playwright/tests/library/unit/codegen.spec.ts

676 lines
18 KiB
TypeScript

/**
* Copyright (c) Microsoft Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { test, expect } from '@playwright/test';
import { getAPIRequestCodeGen } from '../../../packages/trace-viewer/src/ui/codegen';
test.describe('javascript', () => {
const impl = getAPIRequestCodeGen('javascript');
test('generatePlaywrightRequestCall', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo?bar=baz',
method: 'GET',
headers: [{ name: 'User-Agent', value: 'Mozilla/5.0' }, { name: 'Date', value: '2021-01-01' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, 'foo')).toEqual(`
await page.request.get('http://example.com/foo', {
params: {
bar: 'baz'
},
data: 'foo',
headers: {
'User-Agent': 'Mozilla/5.0',
Date: '2021-01-01'
}
});`.trim());
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo?bar=baz',
method: 'OPTIONS',
headers: [],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.fetch('http://example.com/foo', {
method: 'options',
params: {
bar: 'baz'
}
});`.trim());
});
test('generatePlaywrightRequestCall with POST method and no body', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'POST',
headers: [{ name: 'Content-Type', value: 'application/json' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.post('http://example.com/foo', {
headers: {
'Content-Type': 'application/json'
}
});`.trim());
});
test('generatePlaywrightRequestCall with PUT method and JSON body', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'PUT',
headers: [{ name: 'Content-Type', value: 'application/json' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, '{"key":"value"}')).toEqual(`
await page.request.put('http://example.com/foo', {
data: '{"key":"value"}',
headers: {
'Content-Type': 'application/json'
}
});`.trim());
});
test('generatePlaywrightRequestCall with PATCH method and form data', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'PATCH',
headers: [{ name: 'Content-Type', value: 'application/x-www-form-urlencoded' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, 'key=value')).toEqual(`
await page.request.patch('http://example.com/foo', {
data: 'key=value',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});`.trim());
});
test('generatePlaywrightRequestCall with DELETE method and custom header', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'DELETE',
headers: [{ name: 'Authorization', value: 'Bearer token' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.delete('http://example.com/foo', {
headers: {
Authorization: 'Bearer token'
}
});`.trim());
});
test('generatePlaywrightRequestCall with HEAD method', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'HEAD',
headers: [],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.head('http://example.com/foo');`.trim());
});
test('generatePlaywrightRequestCall with complex query parameters', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo?bar=baz&qux=quux',
method: 'GET',
headers: [],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.get('http://example.com/foo', {
params: {
bar: 'baz',
qux: 'quux'
}
});`.trim());
});
test('generatePlaywrightRequestCall with multiple headers', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'GET',
headers: [
{ name: 'User-Agent', value: 'Mozilla/5.0' },
{ name: 'Accept', value: 'application/json' },
{ name: 'Authorization', value: 'Bearer token' }
],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.get('http://example.com/foo', {
headers: {
'User-Agent': 'Mozilla/5.0',
Accept: 'application/json',
Authorization: 'Bearer token'
}
});`.trim());
});
test('escape sequences', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'GET',
headers: [
{ name: 'F\\o', value: 'B\\r' },
],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.get('http://example.com/foo', {
headers: {
'F\\\\o': 'B\\\\r'
}
});`.trim());
});
});
test.describe('python', () => {
const impl = getAPIRequestCodeGen('python');
test('generatePlaywrightRequestCall', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo?bar=baz',
method: 'GET',
headers: [{ name: 'User-Agent', value: 'Mozilla/5.0' }, { name: 'Date', value: '2021-01-01' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, 'foo')).toEqual(`
await page.request.get(
"http://example.com/foo",
params={
"bar": "baz"
},
data="foo",
headers={
"User-Agent": "Mozilla/5.0",
"Date": "2021-01-01"
}
)`.trim());
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo?bar=baz',
method: 'OPTIONS',
headers: [],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.fetch(
"http://example.com/foo",
method="options",
params={
"bar": "baz"
}
)`.trim());
});
test('generatePlaywrightRequestCall with POST method and no body', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'POST',
headers: [{ name: 'Content-Type', value: 'application/json' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.post(
"http://example.com/foo",
headers={
"Content-Type": "application/json"
}
)`.trim());
});
test('generatePlaywrightRequestCall with PUT method and JSON body', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'PUT',
headers: [{ name: 'Content-Type', value: 'application/json' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, '{"key":"value"}')).toEqual(`
await page.request.put(
"http://example.com/foo",
data="{\\"key\\":\\"value\\"}",
headers={
"Content-Type": "application/json"
}
)`.trim());
});
test('generatePlaywrightRequestCall with PATCH method and form data', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'PATCH',
headers: [{ name: 'Content-Type', value: 'application/x-www-form-urlencoded' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, 'key=value')).toEqual(`
await page.request.patch(
"http://example.com/foo",
data="key=value",
headers={
"Content-Type": "application/x-www-form-urlencoded"
}
)`.trim());
});
test('generatePlaywrightRequestCall with DELETE method and custom header', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'DELETE',
headers: [{ name: 'Authorization', value: 'Bearer token' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.delete(
"http://example.com/foo",
headers={
"Authorization": "Bearer token"
}
)`.trim());
});
test('generatePlaywrightRequestCall with HEAD method', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'HEAD',
headers: [],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.head("http://example.com/foo")`.trim());
});
test('generatePlaywrightRequestCall with complex query parameters', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo?bar=baz&qux=quux',
method: 'GET',
headers: [],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.get(
"http://example.com/foo",
params={
"bar": "baz",
"qux": "quux"
}
)`.trim());
});
test('generatePlaywrightRequestCall with multiple headers', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'GET',
headers: [
{ name: 'User-Agent', value: 'Mozilla/5.0' },
{ name: 'Accept', value: 'application/json' },
{ name: 'Authorization', value: 'Bearer token' }
],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.get(
"http://example.com/foo",
headers={
"User-Agent": "Mozilla/5.0",
"Accept": "application/json",
"Authorization": "Bearer token"
}
)`.trim());
});
test('escape sequences', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'GET',
headers: [
{ name: 'F\\o', value: 'B\\r' },
],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await page.request.get(
"http://example.com/foo",
headers={
"F\\\\o": "B\\\\r"
}
)`.trim());
});
});
test.describe('csharp', () => {
const impl = getAPIRequestCodeGen('csharp');
test('generatePlaywrightRequestCall', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo?bar=baz',
method: 'GET',
headers: [{ name: 'User-Agent', value: 'Mozilla/5.0' }, { name: 'Date', value: '2021-01-01' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, 'foo')).toEqual(`
await request.GetAsync("http://example.com/foo", new() {
Params = new() {
["bar"] = "baz"
},
Data = "foo",
Headers = new() {
["User-Agent"] = "Mozilla/5.0",
["Date"] = "2021-01-01"
}
});`.trim());
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo?bar=baz',
method: 'OPTIONS',
headers: [],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await request.FetchAsync("http://example.com/foo", new() {
Method = "options",
Params = new() {
["bar"] = "baz"
}
});`.trim());
});
test('generatePlaywrightRequestCall with POST method and no body', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'POST',
headers: [{ name: 'Content-Type', value: 'application/json' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await request.PostAsync("http://example.com/foo", new() {
Headers = new() {
["Content-Type"] = "application/json"
}
});`.trim());
});
test('generatePlaywrightRequestCall with PUT method and JSON body', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'PUT',
headers: [{ name: 'Content-Type', value: 'application/json' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, '{"key":"value"}')).toEqual(`
await request.PutAsync("http://example.com/foo", new() {
Data = "{\\"key\\":\\"value\\"}",
Headers = new() {
["Content-Type"] = "application/json"
}
});`.trim());
});
test('escape sequences', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'GET',
headers: [
{ name: 'F\\o', value: 'B\\r' },
],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
await request.GetAsync("http://example.com/foo", new() {
Headers = new() {
["F\\\\o"] = "B\\\\r"
}
});`.trim());
});
});
test.describe('java', () => {
const impl = getAPIRequestCodeGen('java');
test('generatePlaywrightRequestCall', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo?bar=baz',
method: 'GET',
headers: [{ name: 'User-Agent', value: 'Mozilla/5.0' }, { name: 'Date', value: '2021-01-01' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, 'foo')).toEqual(`
request.get("http://example.com/foo", RequestOptions.create()
.setQueryParam("bar", "baz")
.setData("foo")
.setHeader("User-Agent", "Mozilla/5.0")
.setHeader("Date", "2021-01-01")
);`.trim());
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo?bar=baz',
method: 'OPTIONS',
headers: [],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
request.fetch("http://example.com/foo", RequestOptions.create()
.setMethod("options")
.setQueryParam("bar", "baz")
);`.trim());
});
test('generatePlaywrightRequestCall with POST method and no body', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'POST',
headers: [{ name: 'Content-Type', value: 'application/json' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
request.post("http://example.com/foo", RequestOptions.create()
.setHeader("Content-Type", "application/json")
);`.trim());
});
test('generatePlaywrightRequestCall with PUT method and JSON body', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'PUT',
headers: [{ name: 'Content-Type', value: 'application/json' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, '{"key":"value"}')).toEqual(`
request.put("http://example.com/foo", RequestOptions.create()
.setData("{\\"key\\":\\"value\\"}")
.setHeader("Content-Type", "application/json")
);`.trim());
});
test('generatePlaywrightRequestCall with PATCH method and form data', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'PATCH',
headers: [{ name: 'Content-Type', value: 'application/x-www-form-urlencoded' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, 'key=value')).toEqual(`
request.patch("http://example.com/foo", RequestOptions.create()
.setData("key=value")
.setHeader("Content-Type", "application/x-www-form-urlencoded")
);`.trim());
});
test('generatePlaywrightRequestCall with DELETE method and custom header', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'DELETE',
headers: [{ name: 'Authorization', value: 'Bearer token' }],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
request.delete("http://example.com/foo", RequestOptions.create()
.setHeader("Authorization", "Bearer token")
);`.trim());
});
test('escape sequences', () => {
expect(impl.generatePlaywrightRequestCall({
url: 'http://example.com/foo',
method: 'GET',
headers: [
{ name: 'F\\o', value: 'B\\r' },
],
httpVersion: '1.1',
cookies: [],
queryString: [],
headersSize: 0,
bodySize: 0,
comment: '',
}, undefined)).toEqual(`
request.get(\"http://example.com/foo\", RequestOptions.create()
.setHeader(\"F\\\\o\", \"B\\\\r\")
);`.trim());
});
});