evcc-io/tests/config-custom-meter.spec.ts

62 lines
2.3 KiB
TypeScript

import { test, expect } from "@playwright/test";
import { start, stop, restart, baseUrl } from "./evcc";
import { startSimulator, stopSimulator, simulatorHost } from "./simulator";
import { expectModalVisible, expectModalHidden, editorClear, editorPaste } from "./utils";
test.use({ baseURL: baseUrl() });
test.afterEach(async () => {
await stop();
await stopSimulator();
});
test.describe("custom meter type override", async () => {
test("user-defined grid meter with explicit shelly type", async ({ page }) => {
await startSimulator();
await start();
await page.goto("/#/config");
// add grid meter as user-defined device with explicit type: shelly
await page.getByRole("button", { name: "Add grid meter" }).click();
const meterModal = page.getByTestId("meter-modal");
await expectModalVisible(meterModal);
await meterModal.getByLabel("Manufacturer").selectOption("User-defined device");
await page.waitForLoadState("networkidle");
const editor = meterModal.getByTestId("yaml-editor");
await editorClear(editor);
await editorPaste(
editor,
page,
`type: shelly
uri: http://${simulatorHost()}`
);
// validate
const testResult = meterModal.getByTestId("test-result");
await expect(testResult).toContainText("Status: unknown");
await testResult.getByRole("link", { name: "validate" }).click();
await expect(testResult).toContainText("Status: successful");
await expect(testResult).toContainText(["Energy", "0.0 kWh"].join(""));
// save
await meterModal.getByRole("button", { name: "Save" }).click();
await expectModalHidden(meterModal);
await expect(page.getByTestId("grid")).toBeVisible();
// restart and verify no fatal error
await restart();
await page.reload();
await expect(page.getByTestId("fatal-error")).not.toBeVisible();
await expect(page.getByTestId("grid")).toBeVisible();
await expect(page.getByTestId("grid")).toContainText(["Energy", "0.0 kWh"].join(""));
// edit
await page.getByTestId("grid").getByRole("button", { name: "edit" }).click();
await expectModalVisible(meterModal);
const editAgain = meterModal.getByTestId("yaml-editor");
await expect(editAgain).toBeVisible();
await expect(editAgain).toContainText("type: shelly");
});
});