Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 31 additions & 70 deletions tests/api-keys.spec.ts
Original file line number Diff line number Diff line change
@@ -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();
Expand Down Expand Up @@ -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" },
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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...');
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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...');

Expand Down
15 changes: 15 additions & 0 deletions tests/pages/settings.ts
Original file line number Diff line number Diff line change
@@ -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<void> {
await page.goto('/');
await page.getByRole('link', { name: 'Settings' }).click();
await page.getByRole('link', { name: 'API Keys' }).click();
}
9 changes: 3 additions & 6 deletions tests/temp-api-keys-cleanup.spec.ts
Original file line number Diff line number Diff line change
@@ -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
Expand Down