From 69da296805a9b2c0a75dfd477224834229d3b5ea Mon Sep 17 00:00:00 2001 From: Ferran Diaz Date: Fri, 15 Dec 2023 16:26:24 +0100 Subject: [PATCH 1/2] feat: add support for playwright config in browser checks --- packages/cli/src/constructs/browser-check.ts | 9 +++++ .../cli/src/constructs/browser-defaults.ts | 39 +++++++++++++++++++ .../cli/src/services/checkly-config-loader.ts | 9 ++++- 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 packages/cli/src/constructs/browser-defaults.ts diff --git a/packages/cli/src/constructs/browser-check.ts b/packages/cli/src/constructs/browser-check.ts index 8469d211..5953271e 100644 --- a/packages/cli/src/constructs/browser-check.ts +++ b/packages/cli/src/constructs/browser-check.ts @@ -6,6 +6,7 @@ import { CheckConfigDefaults } from '../services/checkly-config-loader' import { pathToPosix } from '../services/util' import { Content, Entrypoint } from './construct' import { detectSnapshots, Snapshot } from '../services/snapshot-service' +import { PlaywrightConfig } from './browser-defaults' export interface CheckDependency { path: string @@ -23,6 +24,11 @@ export interface BrowserCheckProps extends CheckProps { * expiration. For example, 'app.checklyhq.com'. */ sslCheckDomain?: string + /** + * A valid playwright config object, same format and keys as you would use on + * playwright.config.ts + */ + playwrightConfig?: PlaywrightConfig, } /** @@ -42,6 +48,7 @@ export class BrowserCheck extends Check { // The `snapshots` field is set later (with a `key`) after these are uploaded to storage. rawSnapshots?: Array<{ absolutePath: string, path: string }> snapshots?: Array + playwrightConfig?: PlaywrightConfig /** * Constructs the Browser Check instance @@ -57,6 +64,7 @@ export class BrowserCheck extends Check { BrowserCheck.applyDefaultBrowserCheckConfig(props) super(logicalId, props) this.sslCheckDomain = props.sslCheckDomain + this.playwrightConfig = props.playwrightConfig if ('content' in props.code) { const script = props.code.content this.script = script @@ -144,6 +152,7 @@ export class BrowserCheck extends Check { dependencies: this.dependencies, sslCheckDomain: this.sslCheckDomain || null, // empty string is converted to null snapshots: this.snapshots, + playwrightConfig: this.playwrightConfig, } } } diff --git a/packages/cli/src/constructs/browser-defaults.ts b/packages/cli/src/constructs/browser-defaults.ts new file mode 100644 index 00000000..f8ef7697 --- /dev/null +++ b/packages/cli/src/constructs/browser-defaults.ts @@ -0,0 +1,39 @@ +import { CheckProps } from './check' + +export type Use = { + baseURL?: string, + colorScheme?: string, + geolocation?: { + longitude?: number, + latitude?: number + }, + locale?: string, + permissions?: string[], + timezoneId?: string, + viewport?: { + width?: number, + height?: number, + }, + deviceScaleFactor?: number, + hasTouch?: boolean, + isMobile?: boolean, + javaScriptEnabled?: boolean, + acceptDownloads?: boolean, + extraHTTPHeaders?: object, + httpCredentials?: object, + ignoreHTTPSErrors?: boolean, + offline?: boolean, + actionTimeout?: number, + navigationTimeout?: number, + testIdAttribute?: string, + launchOptions?: object, + contextOptions?: object, + bypassCSP?: boolean, +} + +export type PlaywrightConfig = { + use?: Use, +} +export interface BrowserPlaywrightDefaults extends CheckProps { + playwrightConfig?: PlaywrightConfig +} diff --git a/packages/cli/src/services/checkly-config-loader.ts b/packages/cli/src/services/checkly-config-loader.ts index 2cd0f73e..b31c7e68 100644 --- a/packages/cli/src/services/checkly-config-loader.ts +++ b/packages/cli/src/services/checkly-config-loader.ts @@ -6,10 +6,15 @@ import { Session } from '../constructs' import { Construct } from '../constructs/construct' import type { Region } from '..' import { ReporterType } from '../reporters/reporter' +import { BrowserPlaywrightDefaults } from '../constructs/browser-defaults' export type CheckConfigDefaults = Pick + | 'alertChannels' | 'privateLocations' | 'retryStrategy'> + +export type BrowserCheckDefaults = Pick export type ChecklyConfig = { /** @@ -39,7 +44,7 @@ export type ChecklyConfig = { /** * Browser checks default configuration properties. */ - browserChecks?: CheckConfigDefaults & { + browserChecks?: BrowserCheckDefaults & { /** * Glob pattern where the CLI looks for Playwright test files, i.e. all `.spec.ts` files */ From ff5046c79af5dda6d5d8872caaf93849d626bd1a Mon Sep 17 00:00:00 2001 From: Ferran Diaz Date: Tue, 19 Dec 2023 15:10:18 +0100 Subject: [PATCH 2/2] feat: add timeout and expect to playwright config --- packages/cli/src/constructs/browser-defaults.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/cli/src/constructs/browser-defaults.ts b/packages/cli/src/constructs/browser-defaults.ts index f8ef7697..db39ab17 100644 --- a/packages/cli/src/constructs/browser-defaults.ts +++ b/packages/cli/src/constructs/browser-defaults.ts @@ -31,9 +31,16 @@ export type Use = { bypassCSP?: boolean, } +export type Expect = { + timeout?: number +} + export type PlaywrightConfig = { use?: Use, + expect?: Expect, + timeout?: number } + export interface BrowserPlaywrightDefaults extends CheckProps { playwrightConfig?: PlaywrightConfig }