import { v1 as uuid } from "uuid"; import type { MaputnikDriver } from "./maputnik-driver"; export class ModalDriver { constructor(private readonly driver: MaputnikDriver) {} public when = { fillLayers: async (opts: { type: string; layer?: string; id?: string }) => { const { when, get, then } = this.driver; const id = opts.id ?? `${opts.type}:${uuid()}`; await when.select("add-layer.layer-type.select", opts.type); await when.type("add-layer.layer-id.input", id); if (opts.layer) { const input = get.elementByTestId("add-layer.layer-source-block").locator("input"); await input.click(); await input.fill(opts.layer); // The source input is a controlled downshift combobox; wait for React to // settle on the typed value before submitting. await then(input).shouldHaveValue(opts.layer); // Close the autocomplete menu so it does not intercept the add button. await get.elementByTestId("add-layer.layer-id.input").click(); } await when.click("add-layer"); return id; }, open: async () => { await this.driver.when.click("layer-list:add-layer"); }, close: async (key: string) => { await this.driver.when.click(key + ".close-modal"); }, }; }