From 8666d17a42f2aaac8bc7b09d6832d44e7fd0c615 Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Mon, 8 Jun 2026 12:19:32 +0200 Subject: [PATCH] Add superuser new customer email notification settings --- playwright.prod.config.ts | 71 +- .../displays/selfServe/ErrorBanner.vue | 12 +- .../displays/selfServe/SelfServeTasksStep.vue | 42 +- .../release/ReleaseChannelSidebarSelector.vue | 82 +- src/components/session/token/SessionUser.vue | 16 + src/i18n/locales/da.json | 38 +- src/i18n/locales/de.json | 40 +- src/i18n/locales/en.json | 40 +- src/i18n/locales/no.json | 40 +- src/i18n/locales/sv.json | 40 +- src/services/releaseBootstrap.js | 161 +-- src/services/releaseChannelAvailability.js | 32 +- src/services/releaseTimeline.js | 87 +- src/services/releaseUpdate.js | 407 +------- src/services/sessionPayload.js | 2 + .../userDashboard/profile/UserProfile.vue | 962 +++++++++--------- .../userDashboard/wash/MyWashStart.vue | 29 +- tests/e2e/fixtures/authHelpers.ts | 1 + tests/e2e/pos-mobile-order-flow.spec.js | 26 +- tests/e2e/release-bootstrap.spec.js | 28 +- tests/e2e/release-channel-unavailable.spec.js | 59 +- tests/e2e/release-update-widget.spec.js | 60 +- tests/e2e/self-serve-wash.spec.js | 18 +- tests/e2e/support/mobilePos.js | 23 + tests/e2e/support/network.js | 38 +- tests/e2e/userProfileNotifications.spec.ts | 68 ++ tests/unit/my-wash-start.spec.js | 176 ++++ tests/unit/release-bootstrap.spec.js | 161 ++- .../unit/release-channel-availability.spec.js | 27 +- ...ease-channel-internal-availability.spec.js | 6 +- tests/unit/release-channel-selector.spec.js | 38 +- tests/unit/release-timeline.spec.js | 8 +- tests/unit/release-update.spec.js | 171 +--- tests/unit/self-serve-tasks-step.spec.js | 10 +- tests/unit/session-payload.spec.js | 5 + 35 files changed, 1325 insertions(+), 1699 deletions(-) diff --git a/playwright.prod.config.ts b/playwright.prod.config.ts index cd6d136b..238a9683 100644 --- a/playwright.prod.config.ts +++ b/playwright.prod.config.ts @@ -1,3 +1,4 @@ +import fs from "node:fs"; import { defineConfig, devices } from "@playwright/test"; const baseURL = "http://127.0.0.1:4173"; @@ -5,6 +6,55 @@ const isCI = !!process.env.CI; process.env.PLAYWRIGHT_BASE_URL = baseURL; +const osReleaseValue = (key: string) => { + try { + const body = fs.readFileSync("/etc/os-release", "utf8"); + const match = body.match(new RegExp(`^${key}=(.*)$`, "m")); + return String(match?.[1] || "").replace(/^"|"$/g, ""); + } catch { + return ""; + } +}; + +const isUnsupportedWebKitHost = () => { + if (process.platform !== "linux") { + return false; + } + const id = osReleaseValue("ID").toLowerCase(); + const version = Number.parseFloat(osReleaseValue("VERSION_ID")); + return id === "ubuntu" && Number.isFinite(version) && version >= 26.04; +}; + +const webKitOverride = String(process.env.PLAYWRIGHT_PROD_WEBKIT || "") + .trim() + .toLowerCase(); +const includeWebKit = + webKitOverride === "1" || (webKitOverride !== "0" && webKitOverride !== "false" && !isUnsupportedWebKitHost()); + +const projects = [ + { + name: "chromium-desktop", + use: { + ...devices["Desktop Chrome"], + }, + }, + { + name: "chromium-mobile", + use: { + ...devices["Pixel 5"], + }, + }, +]; + +if (includeWebKit) { + projects.push({ + name: "webkit-desktop", + use: { + ...devices["Desktop Safari"], + }, + }); +} + export default defineConfig({ testDir: "./tests/e2e/release", testMatch: /.*\.local-prod\.spec\.ts/, @@ -28,24 +78,5 @@ export default defineConfig({ timeout: 240_000, reuseExistingServer: !isCI, }, - projects: [ - { - name: "chromium-desktop", - use: { - ...devices["Desktop Chrome"], - }, - }, - { - name: "chromium-mobile", - use: { - ...devices["Pixel 5"], - }, - }, - { - name: "webkit-desktop", - use: { - ...devices["Desktop Safari"], - }, - }, - ], + projects, }); diff --git a/src/components/displays/selfServe/ErrorBanner.vue b/src/components/displays/selfServe/ErrorBanner.vue index 4b9c1c8e..68e1ead9 100644 --- a/src/components/displays/selfServe/ErrorBanner.vue +++ b/src/components/displays/selfServe/ErrorBanner.vue @@ -17,6 +17,7 @@ interface Props { iconLeft?: string; loading?: boolean; showRetry?: boolean; + retryTestId?: string | null; } withDefaults( @@ -26,12 +27,14 @@ withDefaults( iconLeft?: string; loading?: boolean; showRetry?: boolean; + retryTestId?: string | null; }>(), { type: "is-danger", iconLeft: "sync-alt", loading: false, showRetry: true, + retryTestId: null, } ); @@ -41,13 +44,7 @@ const emit = defineEmits<{