65 lines
2.4 KiB
TypeScript
65 lines
2.4 KiB
TypeScript
import { test, expect } from "@playwright/test";
|
|
import { start, stop, baseUrl } from "./evcc";
|
|
import { expectModalHidden, expectModalVisible } from "./utils";
|
|
|
|
test.use({ baseURL: baseUrl() });
|
|
test.describe.configure({ mode: "parallel" });
|
|
|
|
test.beforeAll(async () => {
|
|
await start();
|
|
});
|
|
test.afterAll(async () => {
|
|
await stop();
|
|
});
|
|
|
|
test.describe("deep linking", async () => {
|
|
test("browser back closes modal", async ({ page }) => {
|
|
await page.goto("/#/config");
|
|
|
|
// Open grid meter modal and verify URL param is added
|
|
await page.getByTestId("add-grid").click();
|
|
const meterModal = page.getByTestId("meter-modal");
|
|
await expectModalVisible(meterModal);
|
|
const urlWithModal = page.url();
|
|
expect(urlWithModal).toContain("meter[type:grid]");
|
|
|
|
// Use browser back to close modal and verify URL param is removed
|
|
await page.goBack();
|
|
await expectModalHidden(meterModal);
|
|
const urlAfterBack = page.url();
|
|
expect(urlAfterBack).not.toContain("meter[type:grid]");
|
|
expect(urlAfterBack).toContain("/#/config");
|
|
});
|
|
|
|
test("direct navigation opens modal", async ({ page }) => {
|
|
// Navigate directly with query param and verify modal opens without clicking
|
|
await page.goto("/#/config?mqtt");
|
|
const mqttModal = page.getByTestId("mqtt-modal");
|
|
await expectModalVisible(mqttModal);
|
|
|
|
// Close modal and verify URL is updated back to config page
|
|
await mqttModal.getByRole("button", { name: "Cancel" }).click();
|
|
await expectModalHidden(mqttModal);
|
|
await page.waitForURL("**/#/config");
|
|
});
|
|
|
|
test("deep link persists after page reload", async ({ page }) => {
|
|
await page.goto("/#/config");
|
|
|
|
// Create and save an offline vehicle with title "Test Car"
|
|
await page.getByTestId("add-vehicle").click();
|
|
const vehicleModal = page.getByTestId("vehicle-modal");
|
|
await expectModalVisible(vehicleModal);
|
|
await vehicleModal.getByLabel("Title").fill("Test Car");
|
|
await vehicleModal.getByRole("button", { name: "Save" }).click();
|
|
await expectModalHidden(vehicleModal);
|
|
|
|
// Edit vehicle, verify URL param persists after reload
|
|
await page.getByTestId("vehicle").getByRole("button", { name: "edit" }).click();
|
|
await expectModalVisible(vehicleModal);
|
|
expect(page.url()).toContain("vehicle=1");
|
|
await page.reload();
|
|
await expectModalVisible(vehicleModal);
|
|
await expect(vehicleModal.getByLabel("Title")).toHaveValue("Test Car");
|
|
});
|
|
});
|