add config resolution

This commit is contained in:
Max Schmitt 2024-07-10 22:18:54 +02:00
parent 41fba1a959
commit 10681d401c
3 changed files with 28 additions and 2 deletions

View file

@ -140,6 +140,7 @@ const playwrightFixtures: Fixtures<TestFixtures, WorkerFixtures> = ({
permissions: [({ contextOptions }, use) => use(contextOptions.permissions), { option: true }],
proxy: [({ contextOptions }, use) => use(contextOptions.proxy), { option: true }],
storageState: [({ contextOptions }, use) => use(contextOptions.storageState), { option: true }],
clientCertificates: [({ contextOptions }, use) => use(contextOptions.clientCertificates), { option: true }],
timezoneId: [({ contextOptions }, use) => use(contextOptions.timezoneId), { option: true }],
userAgent: [({ contextOptions }, use) => use(contextOptions.userAgent), { option: true }],
viewport: [({ contextOptions }, use) => use(contextOptions.viewport === undefined ? { width: 1280, height: 720 } : contextOptions.viewport), { option: true }],
@ -155,6 +156,7 @@ const playwrightFixtures: Fixtures<TestFixtures, WorkerFixtures> = ({
_combinedContextOptions: [async ({
acceptDownloads,
bypassCSP,
clientCertificates,
colorScheme,
deviceScaleFactor,
extraHTTPHeaders,
@ -209,6 +211,8 @@ const playwrightFixtures: Fixtures<TestFixtures, WorkerFixtures> = ({
options.proxy = proxy;
if (storageState !== undefined)
options.storageState = storageState;
if (clientCertificates?.length)
options.clientCertificates = resolveClientCerticates(clientCertificates);
if (timezoneId !== undefined)
options.timezoneId = timezoneId;
if (userAgent !== undefined)
@ -416,6 +420,28 @@ function attachConnectedHeaderIfNeeded(testInfo: TestInfo, browser: Browser | nu
}
}
function resolveFileToConfig(file: string | undefined) {
const config = test.info().config.configFile;
if (!config || !file)
return file;
if (!path.isAbsolute(file))
return path.resolve(path.dirname(config), file);
return file;
}
type ClientCertificates = NonNullable<PlaywrightTestOptions['clientCertificates']>;
function resolveClientCerticates(clientCertificates: ClientCertificates): ClientCertificates {
for (const { certs } of clientCertificates) {
for (const cert of certs) {
cert.certPath = resolveFileToConfig(cert.certPath);
cert.keyPath = resolveFileToConfig(cert.keyPath);
cert.pfxPath = resolveFileToConfig(cert.pfxPath);
}
}
return clientCertificates;
}
const kTracingStarted = Symbol('kTracingStarted');
const kIsReusedContext = Symbol('kReusedContext');

View file

@ -5239,7 +5239,7 @@ export interface PlaywrightTestOptions {
* ```
*
*/
clientCertificates: ClientCertificate[];
clientCertificates: ClientCertificate[] | undefined;
/**
* Specify device scale factor (can be thought of as dpr). Defaults to `1`. Learn more about
* [emulating devices with device scale factor](https://playwright.dev/docs/emulation#devices).

View file

@ -210,7 +210,7 @@ export interface PlaywrightTestOptions {
acceptDownloads: boolean;
bypassCSP: boolean;
colorScheme: ColorScheme;
clientCertificates: ClientCertificate[];
clientCertificates: ClientCertificate[] | undefined;
deviceScaleFactor: number | undefined;
extraHTTPHeaders: ExtraHTTPHeaders | undefined;
geolocation: Geolocation | undefined;