From f65e370585c5065e2b2520886e754d536dfea4d8 Mon Sep 17 00:00:00 2001 From: Michael Geers Date: Mon, 26 Jan 2026 19:29:54 +0100 Subject: [PATCH] fix: show battery locked only for discharge (#27025) --- .../js/components/Energyflow/Energyflow.vue | 4 +-- tests/battery-settings.spec.ts | 33 ++++++++++++++++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/assets/js/components/Energyflow/Energyflow.vue b/assets/js/components/Energyflow/Energyflow.vue index 7f3c445ca..d28c4a430 100644 --- a/assets/js/components/Energyflow/Energyflow.vue +++ b/assets/js/components/Energyflow/Energyflow.vue @@ -239,7 +239,6 @@ :power="batteryCharge" :powerUnit="powerUnit" :iconProps="{ - hold: batteryHold, soc: batterySoc, gridCharge: batteryGridChargeActive, }" @@ -247,6 +246,7 @@ :detailsFmt="batteryFmt" :expanded="batteryExpanded" detailsClickable + data-testid="energyflow-entry-batterycharge" @details-clicked="openBatterySettingsModal" @toggle="toggleBattery" > @@ -395,7 +395,7 @@ export default defineComponent({ return this.chargePower(this.batteryPower); }, batteryChargeLabel() { - return this.$t(`main.energyflow.battery${this.batteryHold ? "Hold" : "Charge"}`); + return this.$t("main.energyflow.batteryCharge"); }, batteryDischargeLabel() { return this.$t(`main.energyflow.battery${this.batteryHold ? "Hold" : "Discharge"}`); diff --git a/tests/battery-settings.spec.ts b/tests/battery-settings.spec.ts index dcb708ca4..be54c6582 100644 --- a/tests/battery-settings.spec.ts +++ b/tests/battery-settings.spec.ts @@ -1,12 +1,14 @@ import { test, expect } from "@playwright/test"; import { start, stop, baseUrl } from "./evcc"; import { expectModalVisible, expectModalHidden, openTopNavigation } from "./utils"; -test.use({ baseURL: baseUrl() }); -test.beforeAll(async () => { +test.use({ baseURL: baseUrl() }); +test.describe.configure({ mode: "parallel" }); + +test.beforeEach(async () => { await start("battery-settings.evcc.yaml"); }); -test.afterAll(async () => { +test.afterEach(async () => { await stop(); }); @@ -19,7 +21,7 @@ test.describe("battery settings", async () => { const modal = page.getByTestId("battery-settings-modal"); await expectModalVisible(modal); await expect(modal.getByRole("heading", { name: "Home Battery" })).toBeVisible(); - await expect(modal.getByRole("link", { name: "Grid charging 🧪" })).not.toBeVisible(); + await expect(modal.getByRole("link", { name: "Grid charging" })).toBeVisible(); await expect(modal).toContainText("Battery level: 50%"); await expect(modal).toContainText("10.0 kWh of 20.0 kWh"); }); @@ -63,4 +65,27 @@ test.describe("battery settings", async () => { await expect(modal).not.toBeVisible(); await expect(page.getByRole("button", { name: "grid charging when ≤ -10.0 ct" })).toBeVisible(); }); + + test("hold mode display", async ({ page }) => { + await page.goto("/"); + await page.getByTestId("energyflow").click(); + + const discharge = page.getByTestId("energyflow-entry-batterydischarge"); + const charge = page.getByTestId("energyflow-entry-batterycharge"); + + await expect(discharge).toContainText("Battery discharging"); + await expect(charge).toContainText("Battery charging"); + + // enable discharge lock + await openTopNavigation(page); + await page.getByTestId("topnavigation-battery").click(); + const modal = page.getByTestId("battery-settings-modal"); + await expectModalVisible(modal); + await modal.getByLabel("Prevent discharge in fast mode and planned charging.").check(); + await page.getByRole("button", { name: "Close" }).click(); + await expectModalHidden(modal); + + await expect(discharge).toContainText("Battery (locked)"); + await expect(charge).toContainText("Battery charging"); + }); });