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,
+ });
+ });
+});