From 09a552b8f6fe40f42ed14306e4350459651e6c6f Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 24 Jan 2023 12:08:12 +0100 Subject: [PATCH] add e2e for auth --- .../apps/auth/e2e/login.spec.ts | 27 +++++ .../apps/auth/playwright.config.ts | 107 ++++++++++++++++++ src/Umbraco.Web.UI.Client/e2e/login.spec.ts | 17 --- 3 files changed, 134 insertions(+), 17 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/apps/auth/e2e/login.spec.ts create mode 100644 src/Umbraco.Web.UI.Client/apps/auth/playwright.config.ts delete mode 100644 src/Umbraco.Web.UI.Client/e2e/login.spec.ts diff --git a/src/Umbraco.Web.UI.Client/apps/auth/e2e/login.spec.ts b/src/Umbraco.Web.UI.Client/apps/auth/e2e/login.spec.ts new file mode 100644 index 0000000000..e067cf2979 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/apps/auth/e2e/login.spec.ts @@ -0,0 +1,27 @@ +import { expect, test } from '@playwright/test'; + +test('login', async ({ page }) => { + // Fill input[name="email"] + await page.locator('input[name="email"]').fill('test@umbraco.com'); + + // Fill input[name="password"] + await page.locator('input[name="password"]').fill('test123456'); + + // Listen for message on window containing type: 'login' + const eventPromise = new Promise((resolve) => { + window.addEventListener( + 'message', + (event) => { + expect(event.data.type).toBe('login'); + resolve(); + }, + { once: true } + ); + }); + + // Click [aria-label="Login"] + await page.locator('[aria-label="Login"]').click(); + + // Wait for message on window containing type: 'login' + await eventPromise; +}); diff --git a/src/Umbraco.Web.UI.Client/apps/auth/playwright.config.ts b/src/Umbraco.Web.UI.Client/apps/auth/playwright.config.ts new file mode 100644 index 0000000000..09938a48d2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/apps/auth/playwright.config.ts @@ -0,0 +1,107 @@ +import { devices } from '@playwright/test'; + +import type { PlaywrightTestConfig } from '@playwright/test'; +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// dotenv.config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +const config: PlaywrightTestConfig = { + testDir: './e2e', + /* Maximum time one test can run for. */ + timeout: 30 * 1000, + expect: { + /** + * Maximum time expect() should wait for the condition to be met. + * For example in `await expect(locator).toHaveText();` + */ + timeout: 5000, + }, + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ + actionTimeout: 0, + /* Base URL to use in actions like `await page.goto('/')`. */ + // baseURL: 'http://localhost:5173', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { + ...devices['Desktop Chrome'], + }, + }, + + { + name: 'firefox', + use: { + ...devices['Desktop Firefox'], + }, + }, + + { + name: 'webkit', + use: { + ...devices['Desktop Safari'], + }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { + // ...devices['Pixel 5'], + // }, + // }, + // { + // name: 'Mobile Safari', + // use: { + // ...devices['iPhone 12'], + // }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { + // channel: 'msedge', + // }, + // }, + // { + // name: 'Google Chrome', + // use: { + // channel: 'chrome', + // }, + // }, + ], + + /* Folder for test artifacts such as screenshots, videos, traces, etc. */ + // outputDir: 'test-results/', + + /* Run your local dev server before starting the tests */ + webServer: { + command: 'npm run dev -- --port 8000', + port: 8000, + }, +}; + +export default config; diff --git a/src/Umbraco.Web.UI.Client/e2e/login.spec.ts b/src/Umbraco.Web.UI.Client/e2e/login.spec.ts deleted file mode 100644 index 2b0598fa92..0000000000 --- a/src/Umbraco.Web.UI.Client/e2e/login.spec.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { expect, test } from './test'; - -test('login', async ({ page }) => { - // Go to /login - await page.goto('/login'); - - // Fill input[name="email"] - await page.locator('input[name="email"]').fill('test@umbraco.com'); - - // Fill input[name="password"] - await page.locator('input[name="password"]').fill('test123456'); - - // Click [aria-label="Login"] - await page.locator('[aria-label="Login"]').click(); - - await expect(page).toHaveURL(`/section/content/dashboard/welcome`); -});