diff --git a/cypress.config.ts b/cypress.config.ts index b51c0a71..6c47f29b 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -10,6 +10,7 @@ export default defineConfig({ }, e2e: { + specPattern: "e2e/**/*.spec.ts", setupNodeEvents(on, config) { // implement node event listeners here require("@cypress/code-coverage/task")(on, config); diff --git a/cypress/e2e/accessibility.cy.ts b/e2e/accessibility.spec.ts similarity index 88% rename from cypress/e2e/accessibility.cy.ts rename to e2e/accessibility.spec.ts index 7703169a..edbd3a10 100644 --- a/cypress/e2e/accessibility.cy.ts +++ b/e2e/accessibility.spec.ts @@ -1,5 +1,7 @@ import { MaputnikDriver } from "./maputnik-driver"; +const test = it; + describe("accessibility", () => { const { beforeAndAfter, get, when, then } = new MaputnikDriver(); beforeAndAfter(); @@ -9,7 +11,7 @@ describe("accessibility", () => { when.setStyle("layer"); }); - it("skip link to layer list", () => { + test("skip link to layer list", () => { const selector = "root:skip:layer-list"; then(get.elementByTestId(selector)).shouldExist(); when.tab(); @@ -18,7 +20,7 @@ describe("accessibility", () => { then(get.skipTargetLayerList()).shouldBeFocused(); }); - it("skip link to layer editor", () => { + test("skip link to layer editor", () => { const selector = "root:skip:layer-editor"; then(get.elementByTestId(selector)).shouldExist(); then(get.elementByTestId("skip-target-layer-editor")).shouldExist(); @@ -28,7 +30,7 @@ describe("accessibility", () => { then(get.skipTargetLayerEditor()).shouldBeFocused(); }); - it("skip link to map view", () => { + test("skip link to map view", () => { const selector = "root:skip:map-view"; then(get.elementByTestId(selector)).shouldExist(); when.tab().tab().tab(); diff --git a/cypress/e2e/code-editor.cy.ts b/e2e/code-editor.spec.ts similarity index 84% rename from cypress/e2e/code-editor.cy.ts rename to e2e/code-editor.spec.ts index e9dff130..70a6b685 100644 --- a/cypress/e2e/code-editor.cy.ts +++ b/e2e/code-editor.spec.ts @@ -1,15 +1,17 @@ import { MaputnikDriver } from "./maputnik-driver"; +const test = it; + describe("code editor", () => { const { beforeAndAfter, when, get, then } = new MaputnikDriver(); beforeAndAfter(); - it("open code editor", () => { + test("open code editor", () => { when.click("nav:code-editor"); then(get.element(".maputnik-code-editor")).shouldExist(); }); - it("closes code editor", () => { + test("closes code editor", () => { when.click("nav:code-editor"); then(get.element(".maputnik-code-editor")).shouldExist(); when.click("nav:code-editor"); diff --git a/cypress/e2e/history.cy.ts b/e2e/history.spec.ts similarity index 95% rename from cypress/e2e/history.cy.ts rename to e2e/history.spec.ts index 499a09b2..811fc3f9 100644 --- a/cypress/e2e/history.cy.ts +++ b/e2e/history.spec.ts @@ -1,5 +1,7 @@ import { MaputnikDriver } from "./maputnik-driver"; +const test = it; + describe("history", () => { const { beforeAndAfter, when, get, then } = new MaputnikDriver(); beforeAndAfter(); @@ -13,7 +15,7 @@ describe("history", () => { redoKeyCombo = isMac ? "{meta}{shift}z" : "{ctrl}y"; }); - it("undo/redo", () => { + test("undo/redo", () => { when.setStyle("geojson"); when.modal.open(); @@ -87,7 +89,7 @@ describe("history", () => { }); }); - it("should not redo after undo and value change", () => { + test("should not redo after undo and value change", () => { when.setStyle("geojson"); when.modal.open(); when.modal.fillLayers({ diff --git a/cypress/e2e/i18n.cy.ts b/e2e/i18n.spec.ts similarity index 86% rename from cypress/e2e/i18n.cy.ts rename to e2e/i18n.spec.ts index 23d1a407..33d8f3c6 100644 --- a/cypress/e2e/i18n.cy.ts +++ b/e2e/i18n.spec.ts @@ -1,17 +1,19 @@ import { MaputnikDriver } from "./maputnik-driver"; +const test = it; + describe("i18n", () => { const { beforeAndAfter, get, when, then } = new MaputnikDriver(); beforeAndAfter(); describe("language detector", () => { - it("English", () => { + test("English", () => { const url = "?lng=en"; when.visit(url); then(get.elementByTestId("maputnik-lang-select")).shouldHaveValue("en"); }); - it("Japanese", () => { + test("Japanese", () => { const url = "?lng=ja"; when.visit(url); then(get.elementByTestId("maputnik-lang-select")).shouldHaveValue("ja"); @@ -23,7 +25,7 @@ describe("i18n", () => { when.setStyle("layer"); }); - it("the language switcher switches to Japanese", () => { + test("the language switcher switches to Japanese", () => { const selector = "maputnik-lang-select"; then(get.elementByTestId(selector)).shouldExist(); when.select(selector, "ja"); diff --git a/cypress/e2e/keyboard.cy.ts b/e2e/keyboard.spec.ts similarity index 75% rename from cypress/e2e/keyboard.cy.ts rename to e2e/keyboard.spec.ts index 2f52b1e8..baf9595d 100644 --- a/cypress/e2e/keyboard.cy.ts +++ b/e2e/keyboard.spec.ts @@ -1,4 +1,5 @@ import { MaputnikDriver } from "./maputnik-driver"; +const test = it; describe("keyboard", () => { const { beforeAndAfter, given, when, get, then } = new MaputnikDriver(); @@ -9,7 +10,7 @@ describe("keyboard", () => { when.setStyle(""); }); - it("ESC should unfocus", () => { + test("ESC should unfocus", () => { const targetSelector = "maputnik-select"; when.focus(targetSelector); then(get.elementByTestId(targetSelector)).shouldBeFocused(); @@ -17,42 +18,42 @@ describe("keyboard", () => { then(get.elementByTestId(targetSelector)).shouldNotBeFocused(); }); - it("'?' should show shortcuts modal", () => { + test("'?' should show shortcuts modal", () => { when.typeKeys("?"); then(get.elementByTestId("modal:shortcuts")).shouldBeVisible(); }); - it("'o' should show open modal", () => { + test("'o' should show open modal", () => { when.typeKeys("o"); then(get.elementByTestId("modal:open")).shouldBeVisible(); }); - it("'e' should show export modal", () => { + test("'e' should show export modal", () => { when.typeKeys("e"); then(get.elementByTestId("modal:export")).shouldBeVisible(); }); - it("'d' should show sources modal", () => { + test("'d' should show sources modal", () => { when.typeKeys("d"); then(get.elementByTestId("modal:sources")).shouldBeVisible(); }); - it("'s' should show settings modal", () => { + test("'s' should show settings modal", () => { when.typeKeys("s"); then(get.elementByTestId("modal:settings")).shouldBeVisible(); }); - it("'i' should change map to inspect mode", () => { + test("'i' should change map to inspect mode", () => { when.typeKeys("i"); then(get.inputValue("maputnik-select")).shouldEqual("inspect"); }); - it("'m' should focus map", () => { + test("'m' should focus map", () => { when.typeKeys("m"); then(get.canvas()).shouldBeFocused(); }); - it("'!' should show debug modal", () => { + test("'!' should show debug modal", () => { when.typeKeys("!"); then(get.elementByTestId("modal:debug")).shouldBeVisible(); }); diff --git a/cypress/e2e/layer-editor.cy.ts b/e2e/layer-editor.spec.ts similarity index 88% rename from cypress/e2e/layer-editor.cy.ts rename to e2e/layer-editor.spec.ts index a7906b8c..1b3b074d 100644 --- a/cypress/e2e/layer-editor.cy.ts +++ b/e2e/layer-editor.spec.ts @@ -1,6 +1,8 @@ import { MaputnikDriver } from "./maputnik-driver"; import { v1 as uuid } from "uuid"; +const test = it; + describe("layer editor", () => { const { beforeAndAfter, get, when, then } = new MaputnikDriver(); beforeAndAfter(); @@ -28,8 +30,8 @@ describe("layer editor", () => { return id; } - it("expand/collapse"); - it("id", () => { + test("expand/collapse"); + test("id", () => { const bgId = createBackground(); when.click("layer-list-item:background:" + bgId); @@ -49,7 +51,7 @@ describe("layer editor", () => { }); describe("source", () => { - it("should show error when the source is invalid", () => { + test("should show error when the source is invalid", () => { when.modal.fillLayers({ type: "circle", layer: "invalid", @@ -68,7 +70,7 @@ describe("layer editor", () => { when.click("layer-editor.layer-id"); }); - it("should update min-zoom in local storage", () => { + test("should update min-zoom in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ layers: [ { @@ -105,7 +107,7 @@ describe("layer editor", () => { when.click("layer-editor.layer-id"); }); - it("should update style in local storage", () => { + test("should update style in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ layers: [ { @@ -129,7 +131,7 @@ describe("layer editor", () => { when.click("layer-editor.layer-id"); }); - it("should update style in local storage", () => { + test("should update style in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ layers: [ { @@ -149,7 +151,7 @@ describe("layer editor", () => { when.click("min-zoom.input-text"); }); - it("should update style in local storage", () => { + test("should update style in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ layers: [ { @@ -170,7 +172,7 @@ describe("layer editor", () => { when.click("spec-field:background-color"); }); - it("should update style in local storage", () => { + test("should update style in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ layers: [ { @@ -190,11 +192,11 @@ describe("layer editor", () => { when.type("spec-field-input:background-opacity", "0."); }); - it("should keep '.' in the input field", () => { + test("should keep '.' in the input field", () => { then(get.elementByTestId("spec-field-input:background-opacity")).shouldHaveValue("0."); }); - it("should revert to a valid value when focus out", () => { + test("should revert to a valid value when focus out", () => { when.click("layer-list-item:background:" + bgId); then(get.elementByTestId("spec-field-input:background-opacity")).shouldHaveValue("0"); }); @@ -203,12 +205,12 @@ describe("layer editor", () => { describe("filter", () => { - it("expand/collapse"); - it("compound filter"); + test("expand/collapse"); + test("compound filter"); }); describe("layout", () => { - it("text-font", () => { + test("text-font", () => { when.setStyle("font"); when.collapseGroupInLayerEditor(); when.collapseGroupInLayerEditor(1); @@ -222,14 +224,14 @@ describe("layer editor", () => { }); describe("paint", () => { - it("expand/collapse"); - it("color"); - it("pattern"); - it("opacity"); + test("expand/collapse"); + test("color"); + test("pattern"); + test("opacity"); }); describe("json-editor", () => { - it("add", () => { + test("add", () => { const id = when.modal.fillLayers({ type: "circle", layer: "example", @@ -254,10 +256,10 @@ describe("layer editor", () => { }); - it("expand/collapse"); - it("modify"); + test("expand/collapse"); + test("modify"); - it("parse error", () => { + test("parse error", () => { const bgId = createBackground(); when.click("layer-list-item:background:" + bgId); @@ -273,7 +275,7 @@ describe("layer editor", () => { }); describe("sticky header", () => { - it("should keep layer header visible when scrolling properties", () => { + test("should keep layer header visible when scrolling properties", () => { // Setup: Create a layer with many properties (e.g., symbol layer) when.modal.fillLayers({ type: "symbol", diff --git a/cypress/e2e/layers-list.cy.ts b/e2e/layers-list.spec.ts similarity index 91% rename from cypress/e2e/layers-list.cy.ts rename to e2e/layers-list.spec.ts index f8048d90..41e6705e 100644 --- a/cypress/e2e/layers-list.cy.ts +++ b/e2e/layers-list.spec.ts @@ -1,4 +1,5 @@ import { MaputnikDriver } from "./maputnik-driver"; +const test = it; describe("layers list", () => { const { beforeAndAfter, get, when, then } = new MaputnikDriver(); @@ -16,7 +17,7 @@ describe("layers list", () => { }); }); - it("should update layers in local storage", () => { + test("should update layers in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ layers: [ { @@ -31,7 +32,7 @@ describe("layers list", () => { beforeEach(() => { when.click("layer-list-item:" + id + ":delete"); }); - it("should empty layers in local storage", () => { + test("should empty layers in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ layers: [], }); @@ -42,7 +43,7 @@ describe("layers list", () => { beforeEach(() => { when.click("layer-list-item:" + id + ":copy"); }); - it("should add copy layer in local storage", () => { + test("should add copy layer in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ layers: [ { @@ -63,7 +64,7 @@ describe("layers list", () => { when.click("layer-list-item:" + id + ":toggle-visibility"); }); - it("should update visibility to none in local storage", () => { + test("should update visibility to none in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ layers: [ { @@ -82,7 +83,7 @@ describe("layers list", () => { when.click("layer-list-item:" + id + ":toggle-visibility"); }); - it("should update visibility to visible in local storage", () => { + test("should update visibility to visible in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ layers: [ { @@ -106,7 +107,7 @@ describe("layers list", () => { type: "background", }); }); - it("should show the selected layer in the editor", () => { + test("should show the selected layer in the editor", () => { when.realClick("layer-list-item:" + secondId); then(get.elementByTestId("layer-editor.layer-id.input")).shouldHaveValue(secondId); when.realClick("layer-list-item:" + id); @@ -117,7 +118,7 @@ describe("layers list", () => { }); describe("background", () => { - it("add", () => { + test("add", () => { const id = when.modal.fillLayers({ type: "background", }); @@ -135,7 +136,7 @@ describe("layers list", () => { }); describe("fill", () => { - it("add", () => { + test("add", () => { const id = when.modal.fillLayers({ type: "fill", layer: "example", @@ -153,11 +154,11 @@ describe("layers list", () => { }); // TODO: Change source - it("change source"); + test("change source"); }); describe("line", () => { - it("add", () => { + test("add", () => { const id = when.modal.fillLayers({ type: "line", layer: "example", @@ -174,7 +175,7 @@ describe("layers list", () => { }); }); - it("groups", () => { + test("groups", () => { when.modal.open(); const id1 = when.modal.fillLayers({ id: "aa", @@ -230,7 +231,7 @@ describe("layers list", () => { }); describe("symbol", () => { - it("add", () => { + test("add", () => { const id = when.modal.fillLayers({ type: "symbol", layer: "example", @@ -247,7 +248,7 @@ describe("layers list", () => { }); }); - it("should show spec info when hovering and clicking single line property", () => { + test("should show spec info when hovering and clicking single line property", () => { when.modal.fillLayers({ type: "symbol", layer: "example", @@ -259,7 +260,7 @@ describe("layers list", () => { then(get.elementByTestId("spec-field-doc")).shouldContainText("Rotates the "); }); - it("should show spec info when hovering and clicking multi line property", () => { + test("should show spec info when hovering and clicking multi line property", () => { when.modal.fillLayers({ type: "symbol", layer: "example", @@ -271,7 +272,7 @@ describe("layers list", () => { then(get.elementByTestId("spec-field-doc")).shouldContainText("Offset distance"); }); - it("should hide spec info when clicking a second time", () => { + test("should hide spec info when clicking a second time", () => { when.modal.fillLayers({ type: "symbol", layer: "example", @@ -287,7 +288,7 @@ describe("layers list", () => { }); describe("raster", () => { - it("add", () => { + test("add", () => { const id = when.modal.fillLayers({ type: "raster", layer: "raster", @@ -306,7 +307,7 @@ describe("layers list", () => { }); describe("circle", () => { - it("add", () => { + test("add", () => { const id = when.modal.fillLayers({ type: "circle", layer: "example", @@ -325,7 +326,7 @@ describe("layers list", () => { }); describe("fill extrusion", () => { - it("add", () => { + test("add", () => { const id = when.modal.fillLayers({ type: "fill-extrusion", layer: "example", @@ -344,7 +345,7 @@ describe("layers list", () => { }); describe("hillshade", () => { - it("add", () => { + test("add", () => { const id = when.modal.fillLayers({ type: "hillshade", layer: "example", @@ -361,7 +362,7 @@ describe("layers list", () => { }); }); - it("set hillshade illumination direction array", () => { + test("set hillshade illumination direction array", () => { const id = when.modal.fillLayers({ type: "hillshade", layer: "example", @@ -387,7 +388,7 @@ describe("layers list", () => { }); }); - it("set hillshade highlight color array", () => { + test("set hillshade highlight color array", () => { const id = when.modal.fillLayers({ type: "hillshade", layer: "example", @@ -413,7 +414,7 @@ describe("layers list", () => { }); describe("color-relief", () => { - it("add", () => { + test("add", () => { const id = when.modal.fillLayers({ type: "color-relief", layer: "example", @@ -430,7 +431,7 @@ describe("layers list", () => { }); }); - it("adds elevation expression when clicking the elevation button", () => { + test("adds elevation expression when clicking the elevation button", () => { when.modal.fillLayers({ type: "color-relief", layer: "example", @@ -442,7 +443,7 @@ describe("layers list", () => { }); describe("groups", () => { - it("simple", () => { + test("simple", () => { when.setStyle("geojson"); when.modal.open(); @@ -478,7 +479,7 @@ describe("layers list", () => { }); describe("drag and drop", () => { - it("move layer should update local storage", () => { + test("move layer should update local storage", () => { when.modal.open(); const firstId = when.modal.fillLayers({ id: "a", @@ -517,7 +518,7 @@ describe("layers list", () => { }); describe("sticky header", () => { - it("should keep header visible when scrolling layer list", () => { + test("should keep header visible when scrolling layer list", () => { // Setup: Create multiple layers to enable scrolling for (let i = 0; i < 20; i++) { when.modal.open(); diff --git a/cypress/e2e/map.cy.ts b/e2e/map.spec.ts similarity index 87% rename from cypress/e2e/map.cy.ts rename to e2e/map.spec.ts index c131422c..046620f7 100644 --- a/cypress/e2e/map.cy.ts +++ b/e2e/map.spec.ts @@ -1,10 +1,12 @@ import { MaputnikDriver } from "./maputnik-driver"; +const test = it; + describe("map", () => { const { beforeAndAfter, get, when, then } = new MaputnikDriver(); beforeAndAfter(); describe("zoom level", () => { - it("via url", () => { + test("via url", () => { const zoomLevel = 12.37; when.setStyle("geojson", zoomLevel); then(get.elementByTestId("maplibre:ctrl-zoom")).shouldBeVisible(); @@ -13,7 +15,7 @@ describe("map", () => { ); }); - it("via map controls", () => { + test("via map controls", () => { const zoomLevel = 12.37; when.setStyle("geojson", zoomLevel); then(get.elementByTestId("maplibre:ctrl-zoom")).shouldBeVisible(); @@ -23,7 +25,7 @@ describe("map", () => { ); }); - it("via style file definition", () => { + test("via style file definition", () => { when.setStyle("zoom_7_center_0_51"); then(get.elementByTestId("maplibre:ctrl-zoom")).shouldBeVisible(); then(get.elementByTestId("maplibre:ctrl-zoom")).shouldContainText( @@ -40,7 +42,7 @@ describe("map", () => { }); describe("search", () => { - it("should exist", () => { + test("should exist", () => { then(get.searchControl()).shouldBeVisible(); }); }); @@ -50,12 +52,12 @@ describe("map", () => { when.setStyle("rectangles"); then(get.locationHash().should("exist")); }); - it("should open on feature click", () => { + test("should open on feature click", () => { when.clickCenter("maplibre:map"); then(get.elementByTestId("feature-layer-popup")).shouldBeVisible(); }); - it("should open a second feature after closing popup", () => { + test("should open a second feature after closing popup", () => { when.clickCenter("maplibre:map"); then(get.elementByTestId("feature-layer-popup")).shouldBeVisible(); when.closePopup(); diff --git a/cypress/e2e/maputnik-cypress-helper.ts b/e2e/maputnik-cypress-helper.ts similarity index 100% rename from cypress/e2e/maputnik-cypress-helper.ts rename to e2e/maputnik-cypress-helper.ts diff --git a/cypress/e2e/maputnik-driver.ts b/e2e/maputnik-driver.ts similarity index 100% rename from cypress/e2e/maputnik-driver.ts rename to e2e/maputnik-driver.ts diff --git a/cypress/e2e/modal-driver.ts b/e2e/modal-driver.ts similarity index 100% rename from cypress/e2e/modal-driver.ts rename to e2e/modal-driver.ts diff --git a/cypress/e2e/modals.cy.ts b/e2e/modals.spec.ts similarity index 88% rename from cypress/e2e/modals.cy.ts rename to e2e/modals.spec.ts index 89b01b8d..f2c13fe5 100644 --- a/cypress/e2e/modals.cy.ts +++ b/e2e/modals.spec.ts @@ -1,5 +1,6 @@ import { MaputnikDriver } from "./maputnik-driver"; -import tokens from "../../src/config/tokens.json" with {type: "json"}; +import tokens from "../src/config/tokens.json" with {type: "json"}; +const test = it; describe("modals", () => { const { beforeAndAfter, when, get, given, then } = new MaputnikDriver(); @@ -13,17 +14,17 @@ describe("modals", () => { when.click("nav:open"); }); - it("close", () => { + test("close", () => { when.modal.close("modal:open"); then(get.elementByTestId("modal:open")).shouldNotExist(); }); - it("upload", () => { + test("upload", () => { when.chooseExampleFile(); then(get.fixture("example-style.json")).shouldEqualToStoredStyle(); }); - it("upload via drag and drop", () => { + test("upload via drag and drop", () => { when.dropExampleFile(); then(get.fixture("example-style.json")).shouldEqualToStoredStyle(); }); @@ -36,14 +37,14 @@ describe("modals", () => { when.click("modal:open.url.button"); when.wait(200); }); - it("load from url", () => { + test("load from url", () => { then(get.responseBody("example-style.json")).shouldEqualToStoredStyle(); }); }); }); describe("shortcuts", () => { - it("open/close", () => { + test("open/close", () => { when.setStyle(""); when.typeKeys("?"); when.modal.close("modal:shortcuts"); @@ -56,13 +57,13 @@ describe("modals", () => { when.click("nav:export"); }); - it("close", () => { + test("close", () => { when.modal.close("modal:export"); then(get.elementByTestId("modal:export")).shouldNotExist(); }); // TODO: Work out how to download a file and check the contents - it("download"); + test("download"); }); describe("sources", () => { @@ -71,10 +72,10 @@ describe("modals", () => { when.click("nav:sources"); }); - it("active sources"); - it("public source"); + test("active sources"); + test("public source"); - it("add new source", () => { + test("add new source", () => { const sourceId = "n1z2v3r"; when.setValue("modal:sources.add.source_id", sourceId); when.select("modal:sources.add.source_type", "tile_vector"); @@ -88,7 +89,7 @@ describe("modals", () => { }); }); - it("add new pmtiles source", () => { + test("add new pmtiles source", () => { const sourceId = "pmtilestest"; when.setValue("modal:sources.add.source_id", sourceId); when.select("modal:sources.add.source_type", "pmtiles_vector"); @@ -106,7 +107,7 @@ describe("modals", () => { }); }); - it("add new raster source", () => { + test("add new raster source", () => { const sourceId = "rastertest"; when.setValue("modal:sources.add.source_id", sourceId); when.select("modal:sources.add.source_type", "tile_raster"); @@ -123,7 +124,7 @@ describe("modals", () => { }); describe("inspect", () => { - it("toggle", () => { + test("toggle", () => { // There is no assertion in this test when.setStyle("geojson"); when.select("maputnik-select", "inspect"); @@ -140,7 +141,7 @@ describe("modals", () => { when.click("field-doc-button-Name"); }); - it("should show the spec information", () => { + test("should show the spec information", () => { then(get.elementsText("spec-field-doc")).shouldInclude( "name for the style" ); @@ -154,7 +155,7 @@ describe("modals", () => { when.wait(200); }); - it("show name specifications", () => { + test("show name specifications", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ name: "foobar", }); @@ -167,14 +168,14 @@ describe("modals", () => { when.click("modal:settings.name"); when.wait(200); }); - it("should update owner in local storage", () => { + test("should update owner in local storage", () => { then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ owner: "foobar", }); }); }); - it("sprite url", () => { + test("sprite url", () => { when.setTextInJsonEditor("\"http://example.com\""); when.click("modal:settings.name"); then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ @@ -182,7 +183,7 @@ describe("modals", () => { }); }); - it("sprite object", () => { + test("sprite object", () => { when.setTextInJsonEditor(JSON.stringify([{ id: "1", url: "2" }])); when.click("modal:settings.name"); @@ -191,7 +192,7 @@ describe("modals", () => { }); }); - it("glyphs url", () => { + test("glyphs url", () => { const glyphsUrl = "http://example.com/{fontstack}/{range}.pbf"; when.setValue("modal:settings.glyphs", glyphsUrl); when.click("modal:settings.name"); @@ -200,7 +201,7 @@ describe("modals", () => { }); }); - it("maptiler access token", () => { + test("maptiler access token", () => { const apiKey = "testing123"; when.setValue( "modal:settings.maputnik:openmaptiles_access_token", @@ -214,7 +215,7 @@ describe("modals", () => { }); }); - it("thunderforest access token", () => { + test("thunderforest access token", () => { const apiKey = "testing123"; when.setValue( "modal:settings.maputnik:thunderforest_access_token", @@ -226,7 +227,7 @@ describe("modals", () => { ).shouldInclude({ "maputnik:thunderforest_access_token": apiKey }); }); - it("stadia access token", () => { + test("stadia access token", () => { const apiKey = "testing123"; when.setValue( "modal:settings.maputnik:stadia_access_token", @@ -238,7 +239,7 @@ describe("modals", () => { ).shouldInclude({ "maputnik:stadia_access_token": apiKey }); }); - it("locationiq access token", () => { + test("locationiq access token", () => { const apiKey = "testing123"; when.setValue( "modal:settings.maputnik:locationiq_access_token", @@ -250,14 +251,14 @@ describe("modals", () => { ).shouldInclude({ "maputnik:locationiq_access_token": apiKey }); }); - it("style projection mercator", () => { + test("style projection mercator", () => { when.select("modal:settings.projection", "mercator"); then( get.styleFromLocalStorage().then((style) => style.projection) ).shouldInclude({ type: "mercator" }); }); - it("style projection globe", () => { + test("style projection globe", () => { when.select("modal:settings.projection", "globe"); then( get.styleFromLocalStorage().then((style) => style.projection) @@ -265,7 +266,7 @@ describe("modals", () => { }); - it("style projection vertical-perspective", () => { + test("style projection vertical-perspective", () => { when.select("modal:settings.projection", "vertical-perspective"); then( get.styleFromLocalStorage().then((style) => style.projection) @@ -273,7 +274,7 @@ describe("modals", () => { }); - it("style renderer", () => { + test("style renderer", () => { cy.on("uncaught:exception", () => false); // this is due to the fact that this is an invalid style for openlayers when.select("modal:settings.maputnik:renderer", "ol"); then(get.inputValue("modal:settings.maputnik:renderer")).shouldEqual( @@ -288,7 +289,7 @@ describe("modals", () => { - it("include API key when change renderer", () => { + test("include API key when change renderer", () => { when.click("modal:settings.close-modal"); when.click("nav:open"); @@ -327,7 +328,7 @@ describe("modals", () => { when.modal.open(); }); - it("shows duplicate id error", () => { + test("shows duplicate id error", () => { when.setValue("add-layer.layer-id.input", "background"); when.click("add-layer"); then(get.elementByTestId("modal:add-layer")).shouldExist(); @@ -338,7 +339,7 @@ describe("modals", () => { }); describe("sources", () => { - it("toggle"); + test("toggle"); }); describe("global state", () => { @@ -346,7 +347,7 @@ describe("modals", () => { when.click("nav:global-state"); }); - it("add variable", () => { + test("add variable", () => { when.wait(100); when.click("global-state-add-variable"); then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ @@ -355,7 +356,7 @@ describe("modals", () => { }); - it("add multiple variables", () => { + test("add multiple variables", () => { when.click("global-state-add-variable"); when.click("global-state-add-variable"); when.click("global-state-add-variable"); @@ -365,7 +366,7 @@ describe("modals", () => { }); }); - it("remove variable", () => { + test("remove variable", () => { when.click("global-state-add-variable"); when.click("global-state-add-variable"); when.click("global-state-add-variable"); @@ -376,7 +377,7 @@ describe("modals", () => { }); }); - it("edit variable key", () => { + test("edit variable key", () => { when.click("global-state-add-variable"); when.wait(100); when.setValue("global-state-variable-key:0", "mykey"); @@ -387,7 +388,7 @@ describe("modals", () => { }); }); - it("edit variable value", () => { + test("edit variable value", () => { when.click("global-state-add-variable"); when.wait(100); when.setValue("global-state-variable-value:0", "myvalue"); @@ -400,11 +401,11 @@ describe("modals", () => { }); describe("error panel", () => { - it("not visible when no errors", () => { + test("not visible when no errors", () => { then(get.element("maputnik-message-panel-error")).shouldNotExist(); }); - it("visible on style error", () => { + test("visible on style error", () => { when.modal.open(); when.modal.fillLayers({ type: "circle", @@ -415,7 +416,7 @@ describe("modals", () => { }); describe("Handle localStorage QuotaExceededError", () => { - it("handles quota exceeded error when opening style from URL", () => { + test("handles quota exceeded error when opening style from URL", () => { // Clear localStorage to start fresh cy.clearLocalStorage(); diff --git a/src/components/InputAutocomplete.cy.tsx b/src/components/InputAutocomplete.browser.test.tsx similarity index 100% rename from src/components/InputAutocomplete.cy.tsx rename to src/components/InputAutocomplete.browser.test.tsx diff --git a/tsconfig.json b/tsconfig.json index ef75df38..7b974a42 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,7 +21,7 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src", "cypress/e2e"], + "include": ["src", "cypress/e2e", "e2e/maputnik-cypress-helper.ts"], "exclude": ["dist"], "references": [{ "path": "./tsconfig.node.json" }], // TODO: Remove when issue is resolved https://github.com/cypress-io/cypress/issues/27448 diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..7c7dffc9 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + // Only the unit tests that live next to the source are run by Vitest. The + // e2e specs (*.spec.ts) are run by their own runner, and the component + // browser test is run separately. + include: ["src/**/*.test.{ts,tsx}"], + exclude: ["**/node_modules/**", "e2e/**", "**/*.browser.test.tsx"], + }, +});