diff --git a/tests/api-keys.spec.ts b/tests/api-keys.spec.ts index 16958911..d06cc535 100644 --- a/tests/api-keys.spec.ts +++ b/tests/api-keys.spec.ts @@ -1,13 +1,10 @@ import { test, expect } from "./fixtures"; +import { navigateToApiKeys } from "./pages/settings"; test.describe("API Keys", () => { test("create new api key and make API request", async ({ page }) => { - // Navigate to the app (using baseURL from config) - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -90,9 +87,8 @@ test.describe("API Keys", () => { test("verify empty string validation blocks API key creation", async ({ page }) => { // Navigate to the app - await page.goto("/"); - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); const invalidCases = [ { name: "", description: "Empty string" }, @@ -146,9 +142,8 @@ test.describe("API Keys", () => { test("verify error message when name field is empty", async ({ page }) => { // Navigate to the app - await page.goto("/"); - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Click Generate New Key button to open the modal await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -185,11 +180,8 @@ test.describe("API Keys", () => { test("verify initial status of new API key is 'Enabled'", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -226,11 +218,8 @@ test.describe("API Keys", () => { test("verify delete confirmation message shows correct API key name", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key with a unique name await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -297,11 +286,8 @@ test.describe("API Keys", () => { test("verify API request fails with disabled API key", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -397,11 +383,8 @@ test.describe("API Keys", () => { test("verify Cancel button is disabled when user clicks disable button", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key for testing await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -457,11 +440,8 @@ test.describe("API Keys", () => { test("verify button text changes to 'Disabling' during disable process", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key for testing await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -516,11 +496,8 @@ test.describe("API Keys", () => { test("verify disable API key modal is closed when user clicks X or Cancel button", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key for testing await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -610,11 +587,8 @@ test.describe("API Keys", () => { test("verify Cancel button is disabled when user clicks Enable button", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key for testing await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -677,11 +651,8 @@ test.describe("API Keys", () => { test("verify button text changes to 'Enabling' during enable process", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key for testing await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -743,11 +714,8 @@ test.describe("API Keys", () => { test("create API key, disable it, re-enable it, and send successful API request", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Step 1: Create a new API key console.log('Step 1: Creating new API key...'); @@ -880,11 +848,8 @@ test.describe("API Keys", () => { test("verify Delete Permanently button is disabled until exact API key name is typed", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key for testing await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -960,11 +925,8 @@ test.describe("API Keys", () => { test("verify Delete Permanently button is enabled when exact API key name is typed", async ({ page }) => { // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Create a new API key for testing await page.getByRole('button', { name: 'Generate New Key' }).click(); @@ -1061,9 +1023,8 @@ test.describe("API Keys", () => { test.skip("TEMP: delete all existing API keys for cleanup", async ({ page }) => { // Navigate to the app - await page.goto("/"); - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); console.log('Starting cleanup of all API keys...'); diff --git a/tests/pages/settings.ts b/tests/pages/settings.ts new file mode 100644 index 00000000..f694d90d --- /dev/null +++ b/tests/pages/settings.ts @@ -0,0 +1,15 @@ +import { Page } from '@playwright/test'; + +/** + * Navigates to the API Keys settings page from the home page. + * Starts at '/', clicks the Settings nav link, then the API Keys sub-link. + * + * Assumes the user is already logged in (auth state is set up). + * + * @param page The Playwright page object + */ +export async function navigateToApiKeys(page: Page): Promise { + await page.goto('/'); + await page.getByRole('link', { name: 'Settings' }).click(); + await page.getByRole('link', { name: 'API Keys' }).click(); +} diff --git a/tests/temp-api-keys-cleanup.spec.ts b/tests/temp-api-keys-cleanup.spec.ts index 28bb0e1e..24abbb20 100644 --- a/tests/temp-api-keys-cleanup.spec.ts +++ b/tests/temp-api-keys-cleanup.spec.ts @@ -1,13 +1,10 @@ import { test, expect } from "./fixtures"; +import { navigateToApiKeys } from "./pages/settings"; test.describe("TEMP: API Keys Cleanup", () => { test("cleanup accumulated test API keys", async ({ page }) => { - // Navigate to the app - await page.goto("/"); - - // Navigate to the API keys section via Settings menu - await page.getByRole('link', { name: 'Settings' }).click(); - await page.getByRole('link', { name: 'API Keys' }).click(); + // Navigate to the API Keys settings page + await navigateToApiKeys(page); // Wait for the page to load and show the API keys table // First wait for the table or at least one row to appear