46 lines
1.9 KiB
TypeScript
46 lines
1.9 KiB
TypeScript
import { test, expect } from "@playwright/test";
|
|
import { start, stop, restart, baseUrl } from "./evcc";
|
|
import { expectModalVisible, expectModalHidden } from "./utils";
|
|
|
|
test.use({ baseURL: baseUrl() });
|
|
|
|
const flags = ["--disable-auth", "--template-type", "meter", "--template"];
|
|
const v1Flags = [...flags, "tests/config-multi-product-v1.tpl.yaml"];
|
|
const v2Flags = [...flags, "tests/config-multi-product-v2.tpl.yaml"];
|
|
|
|
test.beforeEach(async () => {
|
|
await start(undefined, undefined, v1Flags);
|
|
});
|
|
test.afterEach(async () => {
|
|
await stop();
|
|
});
|
|
|
|
test.describe("template with multiple products", async () => {
|
|
test("keeps the selected product name", async ({ page }) => {
|
|
await page.goto("/#/config");
|
|
|
|
await page.getByRole("button", { name: "Add grid meter" }).click();
|
|
const meterModal = page.getByTestId("meter-modal");
|
|
await expectModalVisible(meterModal);
|
|
|
|
// both products resolve to the same template, pick the second one (brand + description)
|
|
await meterModal.getByLabel("Manufacturer").selectOption("Zeta Product B");
|
|
await meterModal.getByLabel("Power").fill("5000");
|
|
await meterModal.getByRole("button", { name: "Save" }).click();
|
|
await expectModalHidden(meterModal);
|
|
|
|
await page.getByTestId("grid").getByRole("button", { name: "edit" }).click();
|
|
await expectModalVisible(meterModal);
|
|
await expect(meterModal.getByLabel("Manufacturer")).toHaveValue("Zeta Product B");
|
|
await meterModal.getByLabel("Close").click();
|
|
await expectModalHidden(meterModal);
|
|
|
|
// product renamed in template (software update): persisted name must survive
|
|
await restart(undefined, v2Flags);
|
|
await page.reload();
|
|
|
|
await page.getByTestId("grid").getByRole("button", { name: "edit" }).click();
|
|
await expectModalVisible(meterModal);
|
|
await expect(meterModal.getByLabel("Manufacturer")).toHaveValue("Zeta Product B");
|
|
});
|
|
});
|