feat(fetch): support baseURL, add tests for invalid args (#8562)

This commit is contained in:
Yury Semikhatsky 2021-08-30 13:41:25 -07:00 committed by GitHub
parent e3cc5b3e3f
commit 6d51ed6e4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 2 deletions

View File

@ -47,8 +47,7 @@ export async function playwrightFetch(context: BrowserContext, params: types.Fet
agent = new HttpsProxyAgent(proxyOpts);
}
// TODO(https://github.com/microsoft/playwright/issues/8381): set user agent
const fetchResponse = await sendRequest(context, new URL(params.url), {
const fetchResponse = await sendRequest(context, new URL(params.url, context._options.baseURL), {
method,
headers,
agent,

View File

@ -349,3 +349,44 @@ it('should propagate extra http headers with redirects', async ({context, server
expect(req3.headers['my-secret']).toBe('Value');
});
it('should throw on invalid header value', async ({context, server}) => {
// @ts-expect-error
const error = await context._fetch(`${server.PREFIX}/a/redirect1`, {
headers: {
'foo': 'недопустимое значение',
}
}).catch(e => e);
expect(error.message).toContain('Invalid character in header content');
});
it('should throw on non-http(s) protocol', async ({context}) => {
// @ts-expect-error
const error1 = await context._fetch(`data:text/plain,test`).catch(e => e);
expect(error1.message).toContain('Protocol "data:" not supported');
// @ts-expect-error
const error2 = await context._fetch(`file:///tmp/foo`).catch(e => e);
expect(error2.message).toContain('Protocol "file:" not supported');
});
it('should support https', async ({context, httpsServer}) => {
const oldValue = process.env['NODE_TLS_REJECT_UNAUTHORIZED'];
// https://stackoverflow.com/a/21961005/552185
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
try {
// @ts-expect-error
const response = await context._fetch(httpsServer.EMPTY_PAGE);
expect(response.status()).toBe(200);
} finally {
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = oldValue;
}
});
it('should resolve url relative to baseURL', async function({browser, server, contextFactory, contextOptions}) {
const context = await contextFactory({
...contextOptions,
baseURL: server.PREFIX,
});
// @ts-expect-error
const response = await context._fetch('/empty.html');
expect(response.url()).toBe(server.EMPTY_PAGE);
});