From f76e314f9e2e05efe306fa0c123f855a877102b3 Mon Sep 17 00:00:00 2001 From: Bassel Kanso Date: Wed, 3 Apr 2024 16:38:44 +0300 Subject: [PATCH 1/2] fix: making api tokens creation work --- .../pages/ApiTokens/EditView/EditViewPage.tsx | 5 +- tests/e2e/tests/admin/api-tokens.spec.ts | 56 +++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 tests/e2e/tests/admin/api-tokens.spec.ts diff --git a/packages/core/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx b/packages/core/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx index b69200ad94..79f832f7d7 100644 --- a/packages/core/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx +++ b/packages/core/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx @@ -190,7 +190,8 @@ export const EditView = () => { const res = await createToken({ ...body, // lifespan must be "null" for unlimited (0 would mean instantly expired and isn't accepted) - lifespan: body?.lifespan || null, + lifespan: + body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null, permissions: body.type === 'custom' ? state.selectedActions : null, }); @@ -220,7 +221,7 @@ export const EditView = () => { tokenType: API_TOKEN_TYPE, }); - navigate(res.data.id.toString(), { + navigate(`../api-tokens/${res.data.id.toString()}`, { state: { apiToken: res.data }, replace: true, }); diff --git a/tests/e2e/tests/admin/api-tokens.spec.ts b/tests/e2e/tests/admin/api-tokens.spec.ts new file mode 100644 index 0000000000..f0fa716019 --- /dev/null +++ b/tests/e2e/tests/admin/api-tokens.spec.ts @@ -0,0 +1,56 @@ +import { test, expect } from '@playwright/test'; +import { login } from '../../utils/login'; +import { resetDatabaseAndImportDataFromPath } from '../../scripts/dts-import'; +import { navToHeader } from '../../utils/shared'; + +const createAPIToken = async (page, tokenName, duration, type) => { + await navToHeader( + page, + ['Settings', 'API Tokens', 'Create new API Token'], + 'Create API Token' + ); + + await page.getByLabel('Name*').click(); + await page.getByLabel('Name*').fill(tokenName); + + await page.getByLabel('Token duration').click(); + await page.getByRole('option', { name: duration }).click(); + + await page.getByLabel('Token type').click(); + await page.getByRole('option', { name: type }).click(); + + await page.getByRole('button', { name: 'Save' }).click(); + + await expect(page.getByText('Make sure to copy this token')).toBeVisible(); + await expect(page.getByText('Expiration date:')).toBeVisible(); +}; + +test.describe('API Tokens', () => { + test.beforeEach(async ({ page }) => { + await resetDatabaseAndImportDataFromPath('with-admin.tar'); + await page.goto('/admin'); + await login({ page }); + }); + + // Test token creation + const testCases = [ + ['30-day Read-only token', '30 days', 'Read-only'], + ['30-day full-access token', '30 days', 'Full access'], + ['7-day token', '7 days', 'Full access'], + ['90-day token', '90 days', 'Full access'], + ['unlimited token', 'Unlimited', 'Full access'], + ]; + for (const [name, duration, type] of testCases) { + test(`A user should be able to create a ${name}`, async ({ page }) => { + await createAPIToken(page, name, duration, type); + }); + } + + test('Created tokens list page should be correct', async ({ page }) => { + await createAPIToken(page, 'my test token', 'unlimited', 'Full access'); + await navToHeader(page, ['Settings', 'API Tokens'], 'API Tokens'); + + const row = page.getByRole('gridcell', { name: 'my test token', exact: true }); + await expect(row).toBeVisible(); + }); +}); From 50becbb22100d5d7c3ebabedcfd3d5c46081b7a2 Mon Sep 17 00:00:00 2001 From: Bassel Kanso Date: Wed, 3 Apr 2024 16:53:41 +0300 Subject: [PATCH 2/2] fix: running prettier --- tests/e2e/tests/admin/api-tokens.spec.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/e2e/tests/admin/api-tokens.spec.ts b/tests/e2e/tests/admin/api-tokens.spec.ts index f0fa716019..4563d6cebc 100644 --- a/tests/e2e/tests/admin/api-tokens.spec.ts +++ b/tests/e2e/tests/admin/api-tokens.spec.ts @@ -4,11 +4,7 @@ import { resetDatabaseAndImportDataFromPath } from '../../scripts/dts-import'; import { navToHeader } from '../../utils/shared'; const createAPIToken = async (page, tokenName, duration, type) => { - await navToHeader( - page, - ['Settings', 'API Tokens', 'Create new API Token'], - 'Create API Token' - ); + await navToHeader(page, ['Settings', 'API Tokens', 'Create new API Token'], 'Create API Token'); await page.getByLabel('Name*').click(); await page.getByLabel('Name*').fill(tokenName);