insomnia/packages/insomnia-smoke-test/tests/smoke/oauth.test.ts

167 lines
6.8 KiB
TypeScript
Raw Normal View History

import { expect } from '@playwright/test';
import { loadFixture } from '../../playwright/paths';
import { test } from '../../playwright/test';
test('can make oauth2 requests', async ({ app, page }) => {
if (process.platform === 'darwin') {
test.setTimeout(6 * 60 * 1000);
} else {
test.slow();
}
const sendButton = page.locator('[data-testid="request-pane"] button:has-text("Send")');
const statusTag = page.locator('[data-testid="response-status-tag"]:visible');
const responseBody = page.locator('[data-testid="CodeEditor"]:visible', {
has: page.locator('.CodeMirror-activeline'),
});
await page.locator('[data-testid="project"]').click();
const projectView = page.locator('#wrapper');
await projectView.locator('text=Create').click();
const text = await loadFixture('oauth.yaml');
await app.evaluate(async ({ clipboard }, text) => clipboard.writeText(text), text);
await page.locator('button:has-text("Clipboard")').click();
await page.locator('text=CollectionOauth Testingjust now').click();
// Authorization code
await page.locator('button:has-text("Authorization Code")').click();
// No PKCE
await page.locator('button:has-text("No PKCE")').click();
await expect(page.locator('.app')).toContainText('http://127.0.0.1:4010/oidc/me');
const [authorizationCodePage] = await Promise.all([
app.waitForEvent('window'),
sendButton.click(),
]);
await authorizationCodePage.waitForLoadState();
await authorizationCodePage.waitForFunction("document.cookie !== ''");
await authorizationCodePage.locator('[name="login"]').fill('admin');
await authorizationCodePage.locator('[name="password"]').fill('admin');
await authorizationCodePage.locator('button:has-text("Sign-in")').click();
await expect(statusTag).toContainText('200 OK');
await expect(responseBody).toContainText('"sub": "admin"');
// Navigate to the OAuth2 Tab and refresh the token from there
Tabs accessibility (#4944) * Create a wrapper Tab component * Used the new Tabs component and remove the button from children from grpc-tabbed-messages * Used the new Tabs component and remove the button from children from grpc-request-pane * Used the new Tabs component and remove the button from children from response-pane * Used the new Tabs component and remove the button from children from request-pane * Used the new Tabs component and remove the button from children from git-repository-settings-modal * Used the new Tabs component and remove the button from children from settings-modal * Used the new Tabs component and remove the button from children from workspace-settings-modal * Used the new Tabs component and remove the button from children from generate-config-modal * Used the new Tabs component and remove the button from children from cookie-modify-modal * Used the new Tabs component and remove the button from children from markdown-editor * Use react-aria tabs instead of react-tabs * Delete react-tabs dependency * Use new tabs component and replace markdown-editor with styled-component instead of using less css * Created query editor component with styled-components instead of using less css * Update index.css * Use new tabs component into cookie-modify-modal * Use new tabs in general-config-modal * Use new tabs in settings-modal * Use new tabs in workspace-settings-modal * Use new tabs in git-repository-settings-modal * Use new tabs in request-pane * Use new tabs in response-pane * Use new tabs in grpc-request-pane * Use new tabs in grpc-tabbed-messages * Use new geury editor component and new tab implementation in websocket-request-pane * Use new tabs in websockets-response-pane * Change the package-lock.json file * Remove className props from TabItemProps * Fix rendering issue with tabs children and move action buttons above the nested tabs * Added nested tabs option * Added nested styling * Made the grpc-tabbed-messages to be nested tabs * Fix issue with styles into tablist * Move less styles to styles component * Fixed style issue with borders when tab is selected * Fix styling issues with nested tabs * Added aria labels for all tabs * Fixed tab tests * Fix issue with plugings test * Remove the outline from selected tab * Fix scrolling issue with some tab panels * Remove outline from activity toggle * Add failing test for the Declarative config and kong kubernetes * Fixed issue with generate config modal into the panel * docs and ws request body styling Co-authored-by: Filipe Freire <livrofubia@gmail.com> Co-authored-by: gatzjames <jamesgatzos@gmail.com>
2022-11-11 18:38:30 +00:00
await page.locator('div[role="tab"]:has-text("OAuth 2")').click();
const tokenInput = page.locator('[for="Access-Token"] > input');
const prevToken = await tokenInput.inputValue();
await page.locator('button:has-text("Refresh Token")').click();
await expect(tokenInput).not.toHaveValue(prevToken);
// Clear the session and tokens and fetch a token manually
await page.locator('text=Advanced Options').click();
await page.locator('button:has-text("Clear OAuth 2 session")').click();
await page.locator('button:text-is("Clear")').click();
const [refreshPage] = await Promise.all([
app.waitForEvent('window'),
page.locator('button:has-text("Fetch Tokens")').click(),
]);
await refreshPage.waitForLoadState();
// expect an _interaction cookie to be set with the sign in form
await refreshPage.waitForFunction("document.cookie !== ''");
await refreshPage.locator('[name="login"]').fill('admin');
await refreshPage.locator('[name="password"]').fill('admin');
await refreshPage.locator('button:has-text("Sign-in")').click();
await expect(tokenInput).not.toHaveValue('');
// PKCE SHA256
await page.locator('button:has-text("PKCE SHA256")').click();
await expect(page.locator('.app')).toContainText('http://127.0.0.1:4010/oidc/me');
await expect(page.locator('#Grant-Type')).toHaveValue('authorization_code');
await expect(page.locator('#Code-Challenge-Method')).toHaveValue('S256');
await sendButton.click();
await expect(statusTag).toContainText('200 OK');
await expect(responseBody).toContainText('"sub": "admin"');
// PKCE Plain
await page.locator('button:has-text("PKCE Plain")').click();
await expect(page.locator('.app')).toContainText('http://127.0.0.1:4010/oidc/me');
await expect(page.locator('#Grant-Type')).toHaveValue('authorization_code');
await expect(page.locator('#Code-Challenge-Method')).toHaveValue('plain');
await sendButton.click();
await expect(statusTag).toContainText('200 OK');
await expect(responseBody).toContainText('"sub": "admin"');
// Reset the OAuth 2 session from Preferences
if (process.platform === 'darwin') {
await page.keyboard.press('Meta+,');
} else {
await page.keyboard.press('Control+,');
}
await page.locator('button:has-text("Clear OAuth 2 session")').click();
await page.keyboard.press('Escape');
// Implicit
await page.locator('button:has-text("Implicit")').click();
// ID Token
await page.locator('button:has-text("ID Token")').click();
await expect(page.locator('.app')).toContainText('http://127.0.0.1:4010/oidc/id-token');
await expect(page.locator('#Grant-Type')).toHaveValue('implicit');
const [implicitPage] = await Promise.all([
app.waitForEvent('window'),
sendButton.click(),
]);
await implicitPage.waitForLoadState();
await implicitPage.waitForFunction("document.cookie !== ''");
await implicitPage.locator('[name="login"]').fill('admin');
await implicitPage.locator('[name="password"]').fill('admin');
await implicitPage.locator('button:has-text("Sign-in")').click();
await expect(statusTag).toContainText('200 OK');
await expect(responseBody).toContainText('"sub": "admin"');
// ID and Access Token
await page.locator('button:has-text("ID and Access Token")').click();
await expect(page.locator('.app')).toContainText('http://127.0.0.1:4010/oidc/me');
await expect(page.locator('#Grant-Type')).toHaveValue('implicit');
await sendButton.click();
await expect(statusTag).toContainText('200 OK');
await expect(responseBody).toContainText('"sub": "admin"');
// Reset the OAuth 2 session from Preferences
if (process.platform === 'darwin') {
await page.keyboard.press('Meta+,');
} else {
await page.keyboard.press('Control+,');
}
await page.locator('button:has-text("Clear OAuth 2 session")').click();
await page.keyboard.press('Escape');
// Client Credentials
await page.locator('button:has-text("Client Credentials")').click();
await expect(page.locator('.app')).toContainText('http://127.0.0.1:4010/oidc/client-credential');
await expect(page.locator('#Grant-Type')).toHaveValue('client_credentials');
await sendButton.click();
await expect(statusTag).toContainText('200 OK');
await expect(responseBody).toContainText('"clientId": "client_credentials"');
// Reset the OAuth 2 session from Preferences
if (process.platform === 'darwin') {
await page.keyboard.press('Meta+,');
} else {
await page.keyboard.press('Control+,');
}
await page.locator('button:has-text("Clear OAuth 2 session")').click();
await page.keyboard.press('Escape');
// Resource Owner Password Credentials
await page.locator('button:has-text("Resource Owner Password Credentials")').click();
await expect(page.locator('.app')).toContainText('http://127.0.0.1:4010/oidc/me');
await expect(page.locator('#Grant-Type')).toHaveValue('password');
await sendButton.click();
await expect(statusTag).toContainText('200 OK');
await expect(responseBody).toContainText('"sub": "foo"');
});