From 48a7b1e90959edab5f44ea75dc870d6582d4df24 Mon Sep 17 00:00:00 2001 From: Ben Irvin Date: Mon, 20 May 2024 11:15:57 +0200 Subject: [PATCH] chore: sync e2e tests with v5 branch (#20334) --- tests/e2e/{constants.js => constants.ts} | 20 ++++--- .../scripts/{dts-export.js => dts-export.ts} | 0 tests/e2e/tests/admin/api-tokens.spec.ts | 52 +++++++++++++++++++ .../admin/{login.spec.js => login.spec.ts} | 10 ++-- .../admin/{logout.spec.js => logout.spec.ts} | 0 .../admin/{signup.spec.js => signup.spec.ts} | 4 +- ...tokens.spec.ts => transfer-tokens.spec.ts} | 6 +-- .../utils/{dts-export.js => dts-export.ts} | 0 .../utils/{dts-import.js => dts-import.ts} | 0 .../utils/{file-reset.js => file-reset.ts} | 0 .../utils/{rate-limit.js => rate-limit.ts} | 0 11 files changed, 71 insertions(+), 21 deletions(-) rename tests/e2e/{constants.js => constants.ts} (65%) rename tests/e2e/scripts/{dts-export.js => dts-export.ts} (100%) create mode 100644 tests/e2e/tests/admin/api-tokens.spec.ts rename tests/e2e/tests/admin/{login.spec.js => login.spec.ts} (92%) rename tests/e2e/tests/admin/{logout.spec.js => logout.spec.ts} (100%) rename tests/e2e/tests/admin/{signup.spec.js => signup.spec.ts} (96%) rename tests/e2e/tests/admin/{transfer/tokens.spec.ts => transfer-tokens.spec.ts} (92%) rename tests/e2e/utils/{dts-export.js => dts-export.ts} (100%) rename tests/e2e/utils/{dts-import.js => dts-import.ts} (100%) rename tests/e2e/utils/{file-reset.js => file-reset.ts} (100%) rename tests/e2e/utils/{rate-limit.js => rate-limit.ts} (100%) diff --git a/tests/e2e/constants.js b/tests/e2e/constants.ts similarity index 65% rename from tests/e2e/constants.js rename to tests/e2e/constants.ts index 0ea248aa05..9d20d5966d 100644 --- a/tests/e2e/constants.js +++ b/tests/e2e/constants.ts @@ -1,6 +1,8 @@ -const { CUSTOM_TRANSFER_TOKEN_ACCESS_KEY } = require('./app-template/template/src/constants'); +export const { + CUSTOM_TRANSFER_TOKEN_ACCESS_KEY, +} = require('./app-template/template/src/constants'); -const ALLOWED_CONTENT_TYPES = [ +export const ALLOWED_CONTENT_TYPES = [ 'admin::user', 'admin::role', 'admin::permission', @@ -18,15 +20,11 @@ const ALLOWED_CONTENT_TYPES = [ 'plugin::upload.file', ]; +export const TITLE_LOGIN = 'Strapi Admin'; +export const TITLE_HOME = 'Homepage'; + // TODO: we should start using @strapi.io addresses to have the chance one day to // actually receive and check the emails; also: it is not nice to spam other peoples // websites -const ADMIN_EMAIL_ADDRESS = 'test@testing.com'; -const ADMIN_PASSWORD = 'Testing123!'; - -module.exports = { - ADMIN_EMAIL_ADDRESS, - ADMIN_PASSWORD, - ALLOWED_CONTENT_TYPES, - CUSTOM_TRANSFER_TOKEN_ACCESS_KEY, -}; +export const ADMIN_EMAIL_ADDRESS = 'test@testing.com'; +export const ADMIN_PASSWORD = 'Testing123!'; diff --git a/tests/e2e/scripts/dts-export.js b/tests/e2e/scripts/dts-export.ts similarity index 100% rename from tests/e2e/scripts/dts-export.js rename to tests/e2e/scripts/dts-export.ts 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..34e0fd8900 --- /dev/null +++ b/tests/e2e/tests/admin/api-tokens.spec.ts @@ -0,0 +1,52 @@ +import { test, expect } from '@playwright/test'; +import { login } from '../../utils/login'; +import { navToHeader } from '../../utils/shared'; +import { resetDatabaseAndImportDataFromPath } from '../../utils/dts-import'; + +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(); + }); +}); diff --git a/tests/e2e/tests/admin/login.spec.js b/tests/e2e/tests/admin/login.spec.ts similarity index 92% rename from tests/e2e/tests/admin/login.spec.js rename to tests/e2e/tests/admin/login.spec.ts index bb99decff5..4b74f541c1 100644 --- a/tests/e2e/tests/admin/login.spec.js +++ b/tests/e2e/tests/admin/login.spec.ts @@ -1,7 +1,7 @@ import { test, expect } from '@playwright/test'; import { resetDatabaseAndImportDataFromPath } from '../../utils/dts-import'; import { toggleRateLimiting } from '../../utils/rate-limit'; -import { ADMIN_EMAIL_ADDRESS, ADMIN_PASSWORD } from '../../constants'; +import { ADMIN_EMAIL_ADDRESS, ADMIN_PASSWORD, TITLE_HOME, TITLE_LOGIN } from '../../constants'; import { login } from '../../utils/login'; test.describe('Login', () => { @@ -17,23 +17,23 @@ test.describe('Login', () => { }) => { // Test without making user authentication persistent await login({ page }); - await expect(page).toHaveTitle('Homepage'); + await expect(page).toHaveTitle(TITLE_HOME); await page.close(); page = await context.newPage(); await page.goto('/admin'); - await expect(page).toHaveTitle('Strapi Admin'); + await expect(page).toHaveTitle(TITLE_LOGIN); // Test with making user authentication persistent await login({ page, rememberMe: true }); - await expect(page).toHaveTitle('Homepage'); + await expect(page).toHaveTitle(TITLE_HOME); await page.close(); page = await context.newPage(); await page.goto('/admin'); - await expect(page).toHaveTitle('Homepage'); + await expect(page).toHaveTitle(TITLE_HOME); }); }); diff --git a/tests/e2e/tests/admin/logout.spec.js b/tests/e2e/tests/admin/logout.spec.ts similarity index 100% rename from tests/e2e/tests/admin/logout.spec.js rename to tests/e2e/tests/admin/logout.spec.ts diff --git a/tests/e2e/tests/admin/signup.spec.js b/tests/e2e/tests/admin/signup.spec.ts similarity index 96% rename from tests/e2e/tests/admin/signup.spec.js rename to tests/e2e/tests/admin/signup.spec.ts index 2cd333a420..ced6b50678 100644 --- a/tests/e2e/tests/admin/signup.spec.js +++ b/tests/e2e/tests/admin/signup.spec.ts @@ -1,7 +1,7 @@ import { test, expect } from '@playwright/test'; import { resetDatabaseAndImportDataFromPath } from '../../utils/dts-import'; -import { ADMIN_EMAIL_ADDRESS, ADMIN_PASSWORD } from '../../constants'; +import { ADMIN_EMAIL_ADDRESS, ADMIN_PASSWORD, TITLE_HOME } from '../../constants'; /** * Fill in the sign up form with valid values @@ -96,6 +96,6 @@ test.describe('Sign Up', () => { }) => { await page.getByRole('button', { name: "Let's start" }).click(); - await expect(page).toHaveTitle('Homepage'); + await expect(page).toHaveTitle(TITLE_HOME); }); }); diff --git a/tests/e2e/tests/admin/transfer/tokens.spec.ts b/tests/e2e/tests/admin/transfer-tokens.spec.ts similarity index 92% rename from tests/e2e/tests/admin/transfer/tokens.spec.ts rename to tests/e2e/tests/admin/transfer-tokens.spec.ts index 3e4f932646..198046ecd7 100644 --- a/tests/e2e/tests/admin/transfer/tokens.spec.ts +++ b/tests/e2e/tests/admin/transfer-tokens.spec.ts @@ -1,7 +1,7 @@ import { test, expect } from '@playwright/test'; -import { login } from '../../../utils/login'; -import { resetDatabaseAndImportDataFromPath } from '../../../utils/dts-import'; -import { navToHeader } from '../../../utils/shared'; +import { login } from '../../utils/login'; +import { resetDatabaseAndImportDataFromPath } from '../../utils/dts-import'; +import { navToHeader } from '../../utils/shared'; const createTransferToken = async (page, tokenName, duration, type) => { await navToHeader( diff --git a/tests/e2e/utils/dts-export.js b/tests/e2e/utils/dts-export.ts similarity index 100% rename from tests/e2e/utils/dts-export.js rename to tests/e2e/utils/dts-export.ts diff --git a/tests/e2e/utils/dts-import.js b/tests/e2e/utils/dts-import.ts similarity index 100% rename from tests/e2e/utils/dts-import.js rename to tests/e2e/utils/dts-import.ts diff --git a/tests/e2e/utils/file-reset.js b/tests/e2e/utils/file-reset.ts similarity index 100% rename from tests/e2e/utils/file-reset.js rename to tests/e2e/utils/file-reset.ts diff --git a/tests/e2e/utils/rate-limit.js b/tests/e2e/utils/rate-limit.ts similarity index 100% rename from tests/e2e/utils/rate-limit.js rename to tests/e2e/utils/rate-limit.ts