From e70de49f9bd3d52416079b3cb2161772852c4c87 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 16 Aug 2022 16:05:32 +0200 Subject: [PATCH 1/3] add test attributes to help locate buttons --- .../src/upgrader/upgrader-view.element.ts | 6 +++++- src/Umbraco.Web.UI.Client/src/upgrader/upgrader.element.ts | 7 ++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/upgrader/upgrader-view.element.ts b/src/Umbraco.Web.UI.Client/src/upgrader/upgrader-view.element.ts index 7a2c3608fc..8b694109de 100644 --- a/src/Umbraco.Web.UI.Client/src/upgrader/upgrader-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/upgrader/upgrader-view.element.ts @@ -55,6 +55,7 @@ export class UmbUpgraderView extends LitElement { ? html`

${this.errorMessage}

` : ''} `; + return html` + ${this.errorMessage ? html`

${this.errorMessage}

` : ''} + `; } render() { diff --git a/src/Umbraco.Web.UI.Client/src/upgrader/upgrader.element.ts b/src/Umbraco.Web.UI.Client/src/upgrader/upgrader.element.ts index d9e65a755b..8b1a339c60 100644 --- a/src/Umbraco.Web.UI.Client/src/upgrader/upgrader.element.ts +++ b/src/Umbraco.Web.UI.Client/src/upgrader/upgrader.element.ts @@ -5,7 +5,8 @@ import { html, LitElement } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { getUpgradeSettings, PostUpgradeAuthorize } from '../core/api/fetcher'; -import { UmbracoUpgrader } from '../core/models'; + +import type { UmbracoUpgrader } from '../core/models'; /** * @element umb-upgrader @@ -30,7 +31,7 @@ export class UmbUpgrader extends LitElement { } render() { - return html` + return html` Date: Tue, 16 Aug 2022 16:05:46 +0200 Subject: [PATCH 2/3] extend Page element to login for all tests --- src/Umbraco.Web.UI.Client/test.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/test.ts b/src/Umbraco.Web.UI.Client/test.ts index 9a0a529569..00680e64cf 100644 --- a/src/Umbraco.Web.UI.Client/test.ts +++ b/src/Umbraco.Web.UI.Client/test.ts @@ -4,10 +4,18 @@ import { createWorkerFixture } from 'playwright-msw'; import { handlers } from './src/mocks/e2e-handlers'; import type { MockServiceWorker } from 'playwright-msw'; + const test = base.extend<{ worker: MockServiceWorker; }>({ worker: createWorkerFixture(...handlers), + page: async ({ page }, use) => { + // Set is-authenticated in sessionStorage to true + await page.addInitScript(`window.sessionStorage.setItem('is-authenticated', 'true');`); + + // Use signed-in page in all tests + await use(page); + }, }); export { test, expect }; From 98141cbd3170339266e61834eed96b4dd914f72f Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 16 Aug 2022 16:05:57 +0200 Subject: [PATCH 3/3] add upgrader e2e tests --- .../e2e/upgrader.spec.ts | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/e2e/upgrader.spec.ts diff --git a/src/Umbraco.Web.UI.Client/e2e/upgrader.spec.ts b/src/Umbraco.Web.UI.Client/e2e/upgrader.spec.ts new file mode 100644 index 0000000000..8421f333e7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/e2e/upgrader.spec.ts @@ -0,0 +1,62 @@ +import { rest } from 'msw'; + +import umbracoPath from '../src/core/helpers/umbraco-path'; +import { ProblemDetails, StatusResponse } from '../src/core/models'; +import { expect, test } from '../test'; + +test.describe('upgrader tests', () => { + test.beforeEach(async ({ page, worker }) => { + await worker.use( + // Override the server status to be "must-install" + rest.get(umbracoPath('/server/status'), (_req, res, ctx) => { + return res( + // Respond with a 200 status code + ctx.status(200), + ctx.json({ + serverStatus: 'must-upgrade', + }) + ); + }) + ); + + await page.goto('/upgrade'); + }); + + test('upgrader is shown', async ({ page }) => { + await page.waitForSelector('[data-test="upgrader"]'); + await expect(page).toHaveURL('/upgrade'); + await expect(page.locator('h1')).toHaveText('Upgrading Umbraco', { useInnerText: true }); + }); + + test('upgrader has a "View Report" button', async ({ page }) => { + await expect(page.locator('[data-test="view-report-button"]')).toBeVisible(); + }); + + test('upgrader completes successfully', async ({ page }) => { + await page.click('[data-test="continue-button"]'); + await page.waitForSelector('umb-backoffice', { timeout: 30000 }); + }); + + test('upgrader fails and shows error', async ({ page, worker }) => { + await worker.use( + // Override the server status to be "must-install" + rest.post(umbracoPath('/upgrade/authorize'), (_req, res, ctx) => { + return res( + // Respond with a 200 status code + ctx.status(400), + ctx.json({ + status: 400, + type: 'error', + detail: 'Something went wrong', + }) + ); + }) + ); + + await page.click('[data-test="continue-button"]'); + + await expect(page.locator('[data-test="error-message"]')).toHaveText('Something went wrong', { + useInnerText: true, + }); + }); +});