import { Timestamp } from '@serenity-js/core'; import type { CookieData} from '@serenity-js/web'; import { Cookie, CookieMissingError } from '@serenity-js/web'; import type { ProtractorBrowser } from 'protractor'; import { ensure, isDefined } from 'tiny-types'; import { promised } from '../promised'; /** * Protractor-specific implementation of [`Cookie`](https://serenity-js.org/api/web/class/Cookie/). * * @group Models */ export class ProtractorCookie extends Cookie { constructor(private readonly browser: ProtractorBrowser, cookieName: string) { super(cookieName); ensure('browser', browser, isDefined()); } async delete(): Promise { return await promised(this.browser.manage().deleteCookie(this.cookieName)); } /** * @protected */ protected async read(): Promise { const cookie = await this.browser.manage().getCookie(this.cookieName); if (! cookie) { throw new CookieMissingError(`Cookie '${ this.cookieName }' not set`); } return { name: cookie.name, value: cookie.value, domain: cookie.domain, path: cookie.path, expiry: typeof cookie.expiry === 'number' && cookie.expiry >= 0 ? Timestamp.fromTimestampInSeconds(Math.round(cookie.expiry)) : undefined, httpOnly: cookie.httpOnly, secure: cookie.secure, } } }