From 592829c6d2fe49ad8cf5152732c0f90dd1d91994 Mon Sep 17 00:00:00 2001 From: JacksonLei123 Date: Tue, 11 Feb 2025 11:57:53 -0500 Subject: [PATCH] feat: update flag to be named apiRequestFailsOnErrorStatus --- docs/src/api/class-apirequest.md | 2 +- docs/src/api/params.md | 6 +- .../playwright-core/src/protocol/validator.ts | 10 ++-- packages/playwright-core/src/server/fetch.ts | 8 +-- packages/playwright-core/types/types.d.ts | 60 +++++++++---------- packages/protocol/src/channels.d.ts | 20 +++---- packages/protocol/src/protocol.yml | 4 +- ...owsercontext-fetchFailOnStatusCode.spec.ts | 14 ++--- tests/library/global-fetch.spec.ts | 8 +-- 9 files changed, 66 insertions(+), 66 deletions(-) diff --git a/docs/src/api/class-apirequest.md b/docs/src/api/class-apirequest.md index dee1d392d5ac4..e4121e79842e6 100644 --- a/docs/src/api/class-apirequest.md +++ b/docs/src/api/class-apirequest.md @@ -21,7 +21,7 @@ Creates new instances of [APIRequestContext]. ### option: APIRequest.newContext.extraHTTPHeaders = %%-context-option-extrahttpheaders-%% * since: v1.16 -### option: APIRequest.newContext.fetchFailOnStatusCode = %%-context-option-fetchFailOnStatusCode-%% +### option: APIRequest.newContext.apiRequestFailsOnErrorStatus = %%-context-option-apiRequestFailsOnErrorStatus-%% * since: v1.51 ### option: APIRequest.newContext.httpCredentials = %%-context-option-httpcredentials-%% diff --git a/docs/src/api/params.md b/docs/src/api/params.md index 6684dba874560..19b4d5905bac0 100644 --- a/docs/src/api/params.md +++ b/docs/src/api/params.md @@ -620,8 +620,8 @@ A list of permissions to grant to all pages in this context. See An object containing additional HTTP headers to be sent with every request. Defaults to none. -## context-option-fetchFailOnStatusCode -- `fetchFailOnStatusCode` <[boolean]> +## context-option-apiRequestFailsOnErrorStatus +- `apiRequestFailsOnErrorStatus` <[boolean]> An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By default, response object is returned for all status codes. @@ -970,7 +970,7 @@ between the same pixel in compared images, between zero (strict) and one (lax), - %%-context-option-locale-%% - %%-context-option-permissions-%% - %%-context-option-extrahttpheaders-%% -- %%-context-option-fetchFailOnStatusCode-%% +- %%-context-option-apiRequestFailsOnErrorStatus-%% - %%-context-option-offline-%% - %%-context-option-httpcredentials-%% - %%-context-option-colorscheme-%% diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index d02a813f87dd2..8555389358977 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -339,7 +339,7 @@ scheme.PlaywrightNewRequestParams = tObject({ userAgent: tOptional(tString), ignoreHTTPSErrors: tOptional(tBoolean), extraHTTPHeaders: tOptional(tArray(tType('NameValue'))), - fetchFailOnStatusCode: tOptional(tBoolean), + apiRequestFailsOnErrorStatus: tOptional(tBoolean), clientCertificates: tOptional(tArray(tObject({ origin: tString, cert: tOptional(tBinary), @@ -569,7 +569,7 @@ scheme.BrowserTypeLaunchPersistentContextParams = tObject({ })), permissions: tOptional(tArray(tString)), extraHTTPHeaders: tOptional(tArray(tType('NameValue'))), - fetchFailOnStatusCode: tOptional(tBoolean), + apiRequestFailsOnErrorStatus: tOptional(tBoolean), offline: tOptional(tBoolean), httpCredentials: tOptional(tObject({ username: tString, @@ -656,7 +656,7 @@ scheme.BrowserNewContextParams = tObject({ })), permissions: tOptional(tArray(tString)), extraHTTPHeaders: tOptional(tArray(tType('NameValue'))), - fetchFailOnStatusCode: tOptional(tBoolean), + apiRequestFailsOnErrorStatus: tOptional(tBoolean), offline: tOptional(tBoolean), httpCredentials: tOptional(tObject({ username: tString, @@ -726,7 +726,7 @@ scheme.BrowserNewContextForReuseParams = tObject({ })), permissions: tOptional(tArray(tString)), extraHTTPHeaders: tOptional(tArray(tType('NameValue'))), - fetchFailOnStatusCode: tOptional(tBoolean), + apiRequestFailsOnErrorStatus: tOptional(tBoolean), offline: tOptional(tBoolean), httpCredentials: tOptional(tObject({ username: tString, @@ -2624,7 +2624,7 @@ scheme.AndroidDeviceLaunchBrowserParams = tObject({ })), permissions: tOptional(tArray(tString)), extraHTTPHeaders: tOptional(tArray(tType('NameValue'))), - fetchFailOnStatusCode: tOptional(tBoolean), + apiRequestFailsOnErrorStatus: tOptional(tBoolean), offline: tOptional(tBoolean), httpCredentials: tOptional(tObject({ username: tString, diff --git a/packages/playwright-core/src/server/fetch.ts b/packages/playwright-core/src/server/fetch.ts index c8478dc4b9b6a..a59d9ce252ab7 100644 --- a/packages/playwright-core/src/server/fetch.ts +++ b/packages/playwright-core/src/server/fetch.ts @@ -45,7 +45,7 @@ import { TLSSocket } from 'tls'; type FetchRequestOptions = { userAgent: string; extraHTTPHeaders?: HeadersArray; - fetchFailOnStatusCode?: boolean; + apiRequestFailsOnErrorStatus?: boolean; httpCredentials?: HTTPCredentials; proxy?: ProxySettings; timeoutSettings: TimeoutSettings; @@ -206,7 +206,7 @@ export abstract class APIRequestContext extends SdkObject { }); const fetchUid = this._storeResponseBody(fetchResponse.body); this.fetchLog.set(fetchUid, controller.metadata.log); - const failOnStatusCode = params.failOnStatusCode !== undefined ? params.failOnStatusCode : !!defaults.fetchFailOnStatusCode; + const failOnStatusCode = params.failOnStatusCode !== undefined ? params.failOnStatusCode : !!defaults.apiRequestFailsOnErrorStatus; if (failOnStatusCode && (fetchResponse.status < 200 || fetchResponse.status >= 400)) { let responseText = ''; if (fetchResponse.body.byteLength) { @@ -612,7 +612,7 @@ export class BrowserContextAPIRequestContext extends APIRequestContext { return { userAgent: this._context._options.userAgent || this._context._browser.userAgent(), extraHTTPHeaders: this._context._options.extraHTTPHeaders, - fetchFailOnStatusCode: this._context._options.fetchFailOnStatusCode, + apiRequestFailsOnErrorStatus: this._context._options.apiRequestFailsOnErrorStatus, httpCredentials: this._context._options.httpCredentials, proxy: this._context._options.proxy || this._context._browser.options.proxy, timeoutSettings: this._context._timeoutSettings, @@ -664,7 +664,7 @@ export class GlobalAPIRequestContext extends APIRequestContext { baseURL: options.baseURL, userAgent: options.userAgent || getUserAgent(), extraHTTPHeaders: options.extraHTTPHeaders, - fetchFailOnStatusCode: !!options.fetchFailOnStatusCode, + apiRequestFailsOnErrorStatus: !!options.apiRequestFailsOnErrorStatus, ignoreHTTPSErrors: !!options.ignoreHTTPSErrors, httpCredentials: options.httpCredentials, clientCertificates: options.clientCertificates, diff --git a/packages/playwright-core/types/types.d.ts b/packages/playwright-core/types/types.d.ts index 70fe4993f454e..c300bf8613707 100644 --- a/packages/playwright-core/types/types.d.ts +++ b/packages/playwright-core/types/types.d.ts @@ -9683,6 +9683,12 @@ export interface Browser { */ acceptDownloads?: boolean; + /** + * An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By + * default, response object is returned for all status codes. + */ + apiRequestFailsOnErrorStatus?: boolean; + /** * When using [page.goto(url[, options])](https://playwright.dev/docs/api/class-page#page-goto), * [page.route(url, handler[, options])](https://playwright.dev/docs/api/class-page#page-route), @@ -9781,12 +9787,6 @@ export interface Browser { */ extraHTTPHeaders?: { [key: string]: string; }; - /** - * An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By - * default, response object is returned for all status codes. - */ - fetchFailOnStatusCode?: boolean; - /** * Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See * [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. @@ -14691,6 +14691,12 @@ export interface BrowserType { */ acceptDownloads?: boolean; + /** + * An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By + * default, response object is returned for all status codes. + */ + apiRequestFailsOnErrorStatus?: boolean; + /** * **NOTE** Use custom browser args at your own risk, as some of them may break Playwright functionality. * @@ -14840,12 +14846,6 @@ export interface BrowserType { */ extraHTTPHeaders?: { [key: string]: string; }; - /** - * An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By - * default, response object is returned for all status codes. - */ - fetchFailOnStatusCode?: boolean; - /** * Firefox user preferences. Learn more about the Firefox user preferences at * [`about:config`](https://support.mozilla.org/en-US/kb/about-config-editor-firefox). @@ -16580,6 +16580,12 @@ export interface AndroidDevice { */ acceptDownloads?: boolean; + /** + * An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By + * default, response object is returned for all status codes. + */ + apiRequestFailsOnErrorStatus?: boolean; + /** * **NOTE** Use custom browser args at your own risk, as some of them may break Playwright functionality. * @@ -16630,12 +16636,6 @@ export interface AndroidDevice { */ extraHTTPHeaders?: { [key: string]: string; }; - /** - * An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By - * default, response object is returned for all status codes. - */ - fetchFailOnStatusCode?: boolean; - /** * Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See * [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. @@ -17425,6 +17425,12 @@ export interface APIRequest { * @param options */ newContext(options?: { + /** + * An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By + * default, response object is returned for all status codes. + */ + apiRequestFailsOnErrorStatus?: boolean; + /** * Methods like * [apiRequestContext.get(url[, options])](https://playwright.dev/docs/api/class-apirequestcontext#api-request-context-get) @@ -17500,12 +17506,6 @@ export interface APIRequest { */ extraHTTPHeaders?: { [key: string]: string; }; - /** - * An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By - * default, response object is returned for all status codes. - */ - fetchFailOnStatusCode?: boolean; - /** * Credentials for [HTTP authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication). If no * origin is specified, the username and password are sent to any servers upon unauthorized responses. @@ -21901,6 +21901,12 @@ export interface BrowserContextOptions { */ acceptDownloads?: boolean; + /** + * An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By + * default, response object is returned for all status codes. + */ + apiRequestFailsOnErrorStatus?: boolean; + /** * When using [page.goto(url[, options])](https://playwright.dev/docs/api/class-page#page-goto), * [page.route(url, handler[, options])](https://playwright.dev/docs/api/class-page#page-route), @@ -21999,12 +22005,6 @@ export interface BrowserContextOptions { */ extraHTTPHeaders?: { [key: string]: string; }; - /** - * An object containing an option to throw an error when API request returns status codes other than 2xx and 3xx. By - * default, response object is returned for all status codes. - */ - fetchFailOnStatusCode?: boolean; - /** * Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See * [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. diff --git a/packages/protocol/src/channels.d.ts b/packages/protocol/src/channels.d.ts index 87b6050d14be1..e1f3b525f04d3 100644 --- a/packages/protocol/src/channels.d.ts +++ b/packages/protocol/src/channels.d.ts @@ -588,7 +588,7 @@ export type PlaywrightNewRequestParams = { userAgent?: string, ignoreHTTPSErrors?: boolean, extraHTTPHeaders?: NameValue[], - fetchFailOnStatusCode?: boolean, + apiRequestFailsOnErrorStatus?: boolean, clientCertificates?: { origin: string, cert?: Binary, @@ -620,7 +620,7 @@ export type PlaywrightNewRequestOptions = { userAgent?: string, ignoreHTTPSErrors?: boolean, extraHTTPHeaders?: NameValue[], - fetchFailOnStatusCode?: boolean, + apiRequestFailsOnErrorStatus?: boolean, clientCertificates?: { origin: string, cert?: Binary, @@ -994,7 +994,7 @@ export type BrowserTypeLaunchPersistentContextParams = { }, permissions?: string[], extraHTTPHeaders?: NameValue[], - fetchFailOnStatusCode?: boolean, + apiRequestFailsOnErrorStatus?: boolean, offline?: boolean, httpCredentials?: { username: string, @@ -1075,7 +1075,7 @@ export type BrowserTypeLaunchPersistentContextOptions = { }, permissions?: string[], extraHTTPHeaders?: NameValue[], - fetchFailOnStatusCode?: boolean, + apiRequestFailsOnErrorStatus?: boolean, offline?: boolean, httpCredentials?: { username: string, @@ -1191,7 +1191,7 @@ export type BrowserNewContextParams = { }, permissions?: string[], extraHTTPHeaders?: NameValue[], - fetchFailOnStatusCode?: boolean, + apiRequestFailsOnErrorStatus?: boolean, offline?: boolean, httpCredentials?: { username: string, @@ -1258,7 +1258,7 @@ export type BrowserNewContextOptions = { }, permissions?: string[], extraHTTPHeaders?: NameValue[], - fetchFailOnStatusCode?: boolean, + apiRequestFailsOnErrorStatus?: boolean, offline?: boolean, httpCredentials?: { username: string, @@ -1328,7 +1328,7 @@ export type BrowserNewContextForReuseParams = { }, permissions?: string[], extraHTTPHeaders?: NameValue[], - fetchFailOnStatusCode?: boolean, + apiRequestFailsOnErrorStatus?: boolean, offline?: boolean, httpCredentials?: { username: string, @@ -1395,7 +1395,7 @@ export type BrowserNewContextForReuseOptions = { }, permissions?: string[], extraHTTPHeaders?: NameValue[], - fetchFailOnStatusCode?: boolean, + apiRequestFailsOnErrorStatus?: boolean, offline?: boolean, httpCredentials?: { username: string, @@ -4745,7 +4745,7 @@ export type AndroidDeviceLaunchBrowserParams = { }, permissions?: string[], extraHTTPHeaders?: NameValue[], - fetchFailOnStatusCode?: boolean, + apiRequestFailsOnErrorStatus?: boolean, offline?: boolean, httpCredentials?: { username: string, @@ -4810,7 +4810,7 @@ export type AndroidDeviceLaunchBrowserOptions = { }, permissions?: string[], extraHTTPHeaders?: NameValue[], - fetchFailOnStatusCode?: boolean, + apiRequestFailsOnErrorStatus?: boolean, offline?: boolean, httpCredentials?: { username: string, diff --git a/packages/protocol/src/protocol.yml b/packages/protocol/src/protocol.yml index 1a54d0806ad68..16320728fe982 100644 --- a/packages/protocol/src/protocol.yml +++ b/packages/protocol/src/protocol.yml @@ -468,7 +468,7 @@ ContextOptions: extraHTTPHeaders: type: array? items: NameValue - fetchFailOnStatusCode: boolean? + apiRequestFailsOnErrorStatus: boolean? offline: boolean? httpCredentials: type: object? @@ -694,7 +694,7 @@ Playwright: extraHTTPHeaders: type: array? items: NameValue - fetchFailOnStatusCode: boolean? + apiRequestFailsOnErrorStatus: boolean? clientCertificates: type: array? items: diff --git a/tests/library/browsercontext-fetchFailOnStatusCode.spec.ts b/tests/library/browsercontext-fetchFailOnStatusCode.spec.ts index 38129217a9470..e922218d68c60 100644 --- a/tests/library/browsercontext-fetchFailOnStatusCode.spec.ts +++ b/tests/library/browsercontext-fetchFailOnStatusCode.spec.ts @@ -16,9 +16,9 @@ import { browserTest as it, expect } from '../config/browserTest'; -it('should throw when fetchFailOnStatusCode is set to true inside BrowserContext options', async ({ browser, server }) => { +it('should throw when apiRequestFailsOnErrorStatus is set to true inside BrowserContext options', async ({ browser, server }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/34204' }); - const context = await browser.newContext({ fetchFailOnStatusCode: true }); + const context = await browser.newContext({ apiRequestFailsOnErrorStatus: true }); server.setRoute('/empty.html', (req, res) => { res.writeHead(404, { 'Content-Length': 10, 'Content-Type': 'text/plain' }); res.end('Not found.'); @@ -30,7 +30,7 @@ it('should throw when fetchFailOnStatusCode is set to true inside BrowserContext it('should not throw when failOnStatusCode is set to false inside BrowserContext options', async ({ browser, server }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/34204' }); - const context = await browser.newContext({ fetchFailOnStatusCode: false }); + const context = await browser.newContext({ apiRequestFailsOnErrorStatus: false }); server.setRoute('/empty.html', (req, res) => { res.writeHead(404, { 'Content-Length': 10, 'Content-Type': 'text/plain' }); res.end('Not found.'); @@ -40,10 +40,10 @@ it('should not throw when failOnStatusCode is set to false inside BrowserContext await context.close(); }); -it('should throw when fetchFailOnStatusCode is set to true inside browserType.launchPersistentContext options', async ({ browserType, server, createUserDataDir }) => { +it('should throw when apiRequestFailsOnErrorStatus is set to true inside browserType.launchPersistentContext options', async ({ browserType, server, createUserDataDir }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/34204' }); const userDataDir = await createUserDataDir(); - const context = await browserType.launchPersistentContext(userDataDir, { fetchFailOnStatusCode: true }); + const context = await browserType.launchPersistentContext(userDataDir, { apiRequestFailsOnErrorStatus: true }); server.setRoute('/empty.html', (req, res) => { res.writeHead(404, { 'Content-Length': 10, 'Content-Type': 'text/plain' }); res.end('Not found.'); @@ -53,10 +53,10 @@ it('should throw when fetchFailOnStatusCode is set to true inside browserType.la await context.close(); }); -it('should not throw when fetchFailOnStatusCode is set to false inside browserType.launchPersistentContext options', async ({ browserType, server, createUserDataDir }) => { +it('should not throw when apiRequestFailsOnErrorStatus is set to false inside browserType.launchPersistentContext options', async ({ browserType, server, createUserDataDir }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/34204' }); const userDataDir = await createUserDataDir(); - const context = await browserType.launchPersistentContext(userDataDir, { fetchFailOnStatusCode: false }); + const context = await browserType.launchPersistentContext(userDataDir, { apiRequestFailsOnErrorStatus: false }); server.setRoute('/empty.html', (req, res) => { res.writeHead(404, { 'Content-Length': 10, 'Content-Type': 'text/plain' }); res.end('Not found.'); diff --git a/tests/library/global-fetch.spec.ts b/tests/library/global-fetch.spec.ts index 0e2e0c3b38777..321f02557d67c 100644 --- a/tests/library/global-fetch.spec.ts +++ b/tests/library/global-fetch.spec.ts @@ -537,9 +537,9 @@ it('should retry ECONNRESET', { await request.dispose(); }); -it('should throw when fetchFailOnStatusCode is set to true inside APIRequest context options', async ({ playwright, server }) => { +it('should throw when apiRequestFailsOnErrorStatus is set to true inside APIRequest context options', async ({ playwright, server }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/34204' }); - const request = await playwright.request.newContext({ fetchFailOnStatusCode: true }); + const request = await playwright.request.newContext({ apiRequestFailsOnErrorStatus: true }); server.setRoute('/empty.html', (req, res) => { res.writeHead(404, { 'Content-Length': 10, 'Content-Type': 'text/plain' }); res.end('Not found.'); @@ -549,9 +549,9 @@ it('should throw when fetchFailOnStatusCode is set to true inside APIRequest con await request.dispose(); }); -it('should not throw when fetchFailOnStatusCode is set to false inside APIRequest context options', async ({ playwright, server }) => { +it('should not throw when apiRequestFailsOnErrorStatus is set to false inside APIRequest context options', async ({ playwright, server }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/34204' }); - const request = await playwright.request.newContext({ fetchFailOnStatusCode: false }); + const request = await playwright.request.newContext({ apiRequestFailsOnErrorStatus: false }); server.setRoute('/empty.html', (req, res) => { res.writeHead(404, { 'Content-Length': 10, 'Content-Type': 'text/plain' }); res.end('Not found.');