diff --git a/examples/github-api/tests/example.spec.ts b/examples/github-api/tests/example.spec.ts new file mode 100644 index 0000000000..e2f984ccc7 --- /dev/null +++ b/examples/github-api/tests/example.spec.ts @@ -0,0 +1,8 @@ +import { test, expect } from '@playwright/test'; + +test('should get post #1', async ({ request }) => { + const post = await request.get(`https://jsonplaceholder.typicode.com/posts/1`); + expect(post.ok()).toBeTruthy(); + + await request.post(`https://jsonplaceholder.typicode.com/posts/1`); +}); diff --git a/packages/trace-viewer/src/ui/networkResourceDetails.tsx b/packages/trace-viewer/src/ui/networkResourceDetails.tsx index 1f9fcc4581..8f39c9f8e5 100644 --- a/packages/trace-viewer/src/ui/networkResourceDetails.tsx +++ b/packages/trace-viewer/src/ui/networkResourceDetails.tsx @@ -24,29 +24,29 @@ import { generateCurlCommand, generateFetchCall } from '../third_party/devtools' import { CopyToClipboard } from './copyToClipboard'; export const NetworkResourceDetails: React.FunctionComponent<{ - resource: ResourceSnapshot; - onClose: () => void; + resource?: ResourceSnapshot; + onClose?: () => void; }> = ({ resource, onClose }) => { const [selectedTab, setSelectedTab] = React.useState('request'); return ]} + leftToolbar={onClose ? [] : undefined} tabs={[ { id: 'request', title: 'Request', - render: () => , + render: () => resource ? :
, }, { id: 'response', title: 'Response', - render: () => , + render: () => resource ? :
, }, { id: 'body', title: 'Body', - render: () => , + render: () => resource ? :
, }, ]} selectedTab={selectedTab} diff --git a/packages/trace-viewer/src/ui/uiModeView.tsx b/packages/trace-viewer/src/ui/uiModeView.tsx index a97716bdc4..ee61ac4fe5 100644 --- a/packages/trace-viewer/src/ui/uiModeView.tsx +++ b/packages/trace-viewer/src/ui/uiModeView.tsx @@ -108,6 +108,7 @@ export const UIModeView: React.FC<{}> = ({ const [showRouteActions, setShowRouteActions] = useSetting('show-route-actions', true); const [darkMode, setDarkMode] = useDarkModeSetting(); const [showScreenshot, setShowScreenshot] = useSetting('screenshot-instead-of-snapshot', false); + const [apiTestingView, setApiTestingView] = useSetting('api-testing-view', false); const inputRef = React.useRef(null); @@ -528,6 +529,7 @@ export const UIModeView: React.FC<{}> = ({ { value: darkMode, set: setDarkMode, title: 'Dark mode' }, { value: showRouteActions, set: setShowRouteActions, title: 'Show route actions' }, { value: showScreenshot, set: setShowScreenshot, title: 'Show screenshot instead of snapshot' }, + { value: apiTestingView, set: setApiTestingView, title: 'API Testing view' }, ]} />}
} diff --git a/packages/trace-viewer/src/ui/workbench.tsx b/packages/trace-viewer/src/ui/workbench.tsx index e1ce2298ae..a8dd61cc1b 100644 --- a/packages/trace-viewer/src/ui/workbench.tsx +++ b/packages/trace-viewer/src/ui/workbench.tsx @@ -43,6 +43,7 @@ import './workbench.css'; import { testStatusIcon, testStatusText } from './testUtils'; import type { UITestStatus } from './testUtils'; import { SettingsView } from './settingsView'; +import { NetworkResourceDetails } from './networkResourceDetails'; export const Workbench: React.FunctionComponent<{ model?: modelUtil.MultiTraceModel, @@ -72,6 +73,7 @@ export const Workbench: React.FunctionComponent<{ const [sidebarLocation, setSidebarLocation] = useSetting<'bottom' | 'right'>('propertiesSidebarLocation', 'bottom'); const [showRouteActions, setShowRouteActions] = useSetting('show-route-actions', true); const [showScreenshot, setShowScreenshot] = useSetting('screenshot-instead-of-snapshot', false); + const [apiTestingView, setApiTestingView] = useSetting('api-testing-view', false); const filteredActions = React.useMemo(() => { return (model?.actions || []).filter(action => showRouteActions || !isRouteAction(action)); @@ -235,16 +237,10 @@ export const Workbench: React.FunctionComponent<{ render: () => }; - const tabs: TabbedPaneTabModel[] = [ - inspectorTab, - callTab, - logTab, - errorsTab, - consoleTab, - networkTab, - sourceTab, - attachmentsTab, - ]; + const tabs: TabbedPaneTabModel[] = + apiTestingView + ? [callTab, logTab, errorsTab, networkTab, attachmentsTab] + : [inspectorTab, callTab, logTab, errorsTab, consoleTab, networkTab, sourceTab, attachmentsTab]; if (annotations !== undefined) { const annotationsTab: TabbedPaneTabModel = { @@ -312,10 +308,15 @@ export const Workbench: React.FunctionComponent<{ title: 'Settings', component: , }; + let entryForSelectedAction: Entry | undefined; + if (selectedAction?.method === 'fetch') + entryForSelectedAction = networkModel.resources.find(resource => resource.request.url === selectedAction.params.url && resource.request.method === selectedAction.params.method); + return
: