From 08440fbc0359bf2196acfad2e34f028d251b34ec Mon Sep 17 00:00:00 2001 From: Aidan Timson Date: Tue, 25 Aug 2026 12:13:09 +0100 Subject: [PATCH] Remove security panel rendering tests --- test/e2e/app.spec.ts | 51 -------------- test/e2e/app/src/ha-test-panels.ts | 7 -- test/e2e/app/src/scenarios/index.ts | 29 -------- .../dialogs/dialog-edit-security.test.ts | 12 ---- .../panels/security/ha-panel-security.test.ts | 70 ------------------- 5 files changed, 169 deletions(-) delete mode 100644 test/panels/security/ha-panel-security.test.ts diff --git a/test/e2e/app.spec.ts b/test/e2e/app.spec.ts index 304c2e81a2..c5e397b630 100644 --- a/test/e2e/app.spec.ts +++ b/test/e2e/app.spec.ts @@ -358,57 +358,6 @@ test.describe("Energy dashboard", () => { }); }); -// --------------------------------------------------------------------------- -// Security panel -// --------------------------------------------------------------------------- - -test.describe("Security panel", () => { - test("hides the editor from non-admin users", async ({ page }) => { - await goToPanel(page, "/?scenario=non-admin-security#/security"); - - await expect(page.locator("ha-panel-security")).toBeAttached({ - timeout: PANEL_TIMEOUT, - }); - await expect(page.locator("ha-panel-security hui-view")).toBeAttached({ - timeout: PANEL_TIMEOUT, - }); - await expect( - page.getByRole("button", { name: "Edit security and safety page" }) - ).not.toBeAttached(); - }); - - test("renders configured active security alerts", async ({ page }) => { - await goToPanel(page, "/?scenario=security-alerts#/security"); - - await expect(page.locator("ha-panel-security")).toBeAttached({ - timeout: PANEL_TIMEOUT, - }); - - const alertCard = page.locator("hui-alert-card").first(); - await expect(alertCard).toBeAttached({ timeout: PANEL_TIMEOUT }); - - if (!(await alertCard.isVisible().catch(() => false))) { - const activityTab = page.getByRole("radio", { name: "Activity" }); - if (await activityTab.isVisible().catch(() => false)) { - await activityTab.dispatchEvent("click"); - } - } - - await expect(alertCard).toBeVisible({ timeout: QUICK_TIMEOUT }); - await expect(alertCard.locator("text=Front door")).toBeVisible({ - timeout: QUICK_TIMEOUT, - }); - - await page.evaluate(() => { - (window as any).__mockHass.mockEntities[ - "binary_sensor.front_door" - ].update({ state: "off" }); - }); - - await expect(alertCard).toBeHidden({ timeout: QUICK_TIMEOUT }); - }); -}); - // --------------------------------------------------------------------------- // More-info dialog (light) // --------------------------------------------------------------------------- diff --git a/test/e2e/app/src/ha-test-panels.ts b/test/e2e/app/src/ha-test-panels.ts index 7fd4f20be5..e6552c9be0 100644 --- a/test/e2e/app/src/ha-test-panels.ts +++ b/test/e2e/app/src/ha-test-panels.ts @@ -109,13 +109,6 @@ export const e2eTestPanels: Record = { url_path: "iframe", testSelector: "ha-panel-iframe", }, - security: { - component_name: "security", - icon: "mdi:shield-home", - title: "security", - config: null, - url_path: "security", - }, config: { component_name: "config", icon: "mdi:cog", diff --git a/test/e2e/app/src/scenarios/index.ts b/test/e2e/app/src/scenarios/index.ts index 91121fb3ed..0cb25fa0d8 100644 --- a/test/e2e/app/src/scenarios/index.ts +++ b/test/e2e/app/src/scenarios/index.ts @@ -3,7 +3,6 @@ import type { EntityRegistryEntry, ExtEntityRegistryEntry, } from "../../../../../src/data/entity/entity_registry"; -import type { SecurityFrontendSystemData } from "../../../../../src/data/frontend"; import type { LovelaceRawConfig } from "../../../../../src/data/lovelace/config/types"; import type { MediaPlayerItem } from "../../../../../src/data/media-player"; import { @@ -31,11 +30,6 @@ const nonAdminScenario: Scenario = async (hass) => { }); }; -const nonAdminSecurityScenario: Scenario = async (hass) => { - await nonAdminScenario(hass); - hass.mockWS("frontend/get_system_data", () => ({ value: {} })); -}; - const darkThemeScenario: Scenario = async (hass) => { // Force dark mode by setting selectedTheme.dark = true. // _applyTheme() reads selectedTheme.dark to determine darkMode; setting @@ -295,33 +289,11 @@ const delayedMediaBrowseErrorScenario: Scenario = (hass) => { hass.mockWS("media_source/browse_media", () => browsePromise); }; -const securityAlertsScenario: Scenario = async (hass) => { - const securityData: SecurityFrontendSystemData = { - alert_entities: [{ entity: "binary_sensor.front_door" }], - }; - - hass.addEntities([ - { - entity_id: "binary_sensor.front_door", - state: "on", - attributes: { - friendly_name: "Front door", - device_class: "door", - }, - }, - ]); - - hass.mockWS("frontend/get_system_data", (msg: { key: string }) => ({ - value: msg.key === "security" ? securityData : null, - })); -}; - // ── Registry ────────────────────────────────────────────────────────────── export const scenarios: Record = { default: defaultScenario, "non-admin": nonAdminScenario, - "non-admin-security": nonAdminSecurityScenario, "dark-theme": darkThemeScenario, "custom-theme": customThemeScenario, "delayed-calendar": delayedCalendarScenario, @@ -333,5 +305,4 @@ export const scenarios: Record = { "weather-more-info": weatherMoreInfoScenario, "quick-search-assist": quickSearchAssistScenario, "delayed-lovelace": delayedLovelaceScenario, - "security-alerts": securityAlertsScenario, }; diff --git a/test/panels/security/dialogs/dialog-edit-security.test.ts b/test/panels/security/dialogs/dialog-edit-security.test.ts index c98930038c..feba078a9c 100644 --- a/test/panels/security/dialogs/dialog-edit-security.test.ts +++ b/test/panels/security/dialogs/dialog-edit-security.test.ts @@ -1,4 +1,3 @@ -import { nothing } from "lit"; import { describe, expect, it, vi } from "vitest"; import type { SecurityFrontendSystemData } from "../../../../src/data/frontend"; import type { EditSecurityDialogParams } from "../../../../src/panels/security/dialogs/show-dialog-edit-security"; @@ -8,13 +7,11 @@ import { createMockHass } from "../../../fixtures/hass"; interface TestEditSecurityDialog extends HTMLElement { params: EditSecurityDialogParams; - _state?: SecurityFrontendSystemData; _i18n: HomeAssistantInternationalization; isDirtyState: boolean; connectedCallback(): void; disconnectedCallback(): void; performUpdate(): void; - render(): unknown; } const alertEntitiesChanged = ( @@ -44,15 +41,6 @@ describe("dialog-edit-security", () => { return dialog; }; - it("renders without a Home Assistant snapshot in dialog params", () => { - const dialog = createDialog(); - - expect(dialog._state).toEqual({ alert_entities: [] }); - expect(dialog.render()).not.toBe(nothing); - - dialog.disconnectedCallback(); - }); - it("becomes clean after nested configuration is restored", () => { const alertEntities = [ { entity: "binary_sensor.window", severity: "warning" as const }, diff --git a/test/panels/security/ha-panel-security.test.ts b/test/panels/security/ha-panel-security.test.ts deleted file mode 100644 index 27c540b394..0000000000 --- a/test/panels/security/ha-panel-security.test.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { describe, expect, it, vi } from "vitest"; -import type { SecurityFrontendSystemData } from "../../../src/data/frontend"; -import { fetchFrontendSystemData } from "../../../src/data/frontend"; -import type { HomeAssistant } from "../../../src/types"; -import "../../../src/panels/security/ha-panel-security"; -import { createMockHass } from "../../fixtures/hass"; - -vi.hoisted(() => { - Object.assign(globalThis, { - __STATIC_PATH__: "/", - __BUILD__: "modern", - __VERSION__: "test", - __BACKWARDS_COMPAT__: false, - __SUPERVISOR__: false, - __NAMESPACE__: "frontend", - }); -}); - -vi.mock("../../../src/data/frontend", async (importOriginal) => ({ - ...(await importOriginal()), - fetchFrontendSystemData: vi.fn(), -})); - -interface TestPanelSecurity extends HTMLElement { - hass: HomeAssistant; - _config?: SecurityFrontendSystemData; -} - -const loadConfig = (panel: TestPanelSecurity) => - (panel as unknown as Record<"_loadConfig", () => Promise>)[ - "_loadConfig" - ](); - -describe("ha-panel-security", () => { - it("ignores a stale configuration response after retrying", async () => { - let resolveInitial!: (value: SecurityFrontendSystemData) => void; - let resolveRetry!: (value: SecurityFrontendSystemData) => void; - vi.mocked(fetchFrontendSystemData) - .mockImplementationOnce( - () => - new Promise((resolve) => { - resolveInitial = resolve; - }) - ) - .mockImplementationOnce( - () => - new Promise((resolve) => { - resolveRetry = resolve; - }) - ); - const panel = document.createElement( - "ha-panel-security" - ) as unknown as TestPanelSecurity; - panel.hass = createMockHass(); - - const initialLoad = loadConfig(panel); - const retryLoad = loadConfig(panel); - const retryConfig = { - alert_entities: [{ entity: "binary_sensor.new" }], - }; - resolveRetry(retryConfig); - await retryLoad; - resolveInitial({ - alert_entities: [{ entity: "binary_sensor.old" }], - }); - await initialLoad; - - expect(panel._config).toEqual(retryConfig); - }); -});