mirror of
https://github.com/maputnik/editor.git
synced 2026-01-06 21:40:01 +00:00
This does the following: 1. Moves the WDIO code from javascript to typescript 2. Moves to use files that are `cy.ts` instead of `index.js` 3. Replace e2e to use cypress 4. Introduce back some skipped tests This is in continue to the conversation here: https://github.com/HarelM/editor/pull/3 Before: ``` "spec" Reporter: ------------------------------------------------------------------ [chrome 120.0.6099.71 linux #0-0] Running: chrome (v120.0.6099.71) on linux [chrome 120.0.6099.71 linux #0-0] Session ID: ee9a87bcfce007ac7721929c6e6234d0 [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] » /test/functional/index.js [chrome 120.0.6099.71 linux #0-0] maputnik [chrome 120.0.6099.71 linux #0-0] history [chrome 120.0.6099.71 linux #0-0] - undo/redo [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] layers [chrome 120.0.6099.71 linux #0-0] ops [chrome 120.0.6099.71 linux #0-0] ✓ delete [chrome 120.0.6099.71 linux #0-0] ✓ duplicate [chrome 120.0.6099.71 linux #0-0] ✓ hide [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] background [chrome 120.0.6099.71 linux #0-0] ✓ add [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] modify [chrome 120.0.6099.71 linux #0-0] layer [chrome 120.0.6099.71 linux #0-0] - expand/collapse [chrome 120.0.6099.71 linux #0-0] ✓ id [chrome 120.0.6099.71 linux #0-0] ✓ min-zoom [chrome 120.0.6099.71 linux #0-0] ✓ max-zoom [chrome 120.0.6099.71 linux #0-0] ✓ comments [chrome 120.0.6099.71 linux #0-0] - color [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] filter [chrome 120.0.6099.71 linux #0-0] - expand/collapse [chrome 120.0.6099.71 linux #0-0] - compound filter [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] paint [chrome 120.0.6099.71 linux #0-0] - expand/collapse [chrome 120.0.6099.71 linux #0-0] - color [chrome 120.0.6099.71 linux #0-0] - pattern [chrome 120.0.6099.71 linux #0-0] - opacity [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] json-editor [chrome 120.0.6099.71 linux #0-0] - expand/collapse [chrome 120.0.6099.71 linux #0-0] - modify [chrome 120.0.6099.71 linux #0-0] - parse error [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] fill [chrome 120.0.6099.71 linux #0-0] ✓ add [chrome 120.0.6099.71 linux #0-0] - change source [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] line [chrome 120.0.6099.71 linux #0-0] ✓ add [chrome 120.0.6099.71 linux #0-0] - groups [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] symbol [chrome 120.0.6099.71 linux #0-0] ✓ add [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] raster [chrome 120.0.6099.71 linux #0-0] ✓ add [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] circle [chrome 120.0.6099.71 linux #0-0] ✓ add [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] fill extrusion [chrome 120.0.6099.71 linux #0-0] ✓ add [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] groups [chrome 120.0.6099.71 linux #0-0] ✓ simple [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] map [chrome 120.0.6099.71 linux #0-0] zoom level [chrome 120.0.6099.71 linux #0-0] - via url [chrome 120.0.6099.71 linux #0-0] - via map controls [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] modals [chrome 120.0.6099.71 linux #0-0] open [chrome 120.0.6099.71 linux #0-0] ✓ close [chrome 120.0.6099.71 linux #0-0] - upload [chrome 120.0.6099.71 linux #0-0] ✓ load from url [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] shortcuts [chrome 120.0.6099.71 linux #0-0] ✓ open/close [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] export [chrome 120.0.6099.71 linux #0-0] ✓ close [chrome 120.0.6099.71 linux #0-0] - download [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] sources [chrome 120.0.6099.71 linux #0-0] - active sources [chrome 120.0.6099.71 linux #0-0] - public source [chrome 120.0.6099.71 linux #0-0] - add new source [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] inspect [chrome 120.0.6099.71 linux #0-0] ✓ toggle [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] style settings [chrome 120.0.6099.71 linux #0-0] ✓ name [chrome 120.0.6099.71 linux #0-0] ✓ owner [chrome 120.0.6099.71 linux #0-0] ✓ sprite url [chrome 120.0.6099.71 linux #0-0] ✓ glyphs url [chrome 120.0.6099.71 linux #0-0] ✓ maptiler access token [chrome 120.0.6099.71 linux #0-0] ✓ thunderforest access token [chrome 120.0.6099.71 linux #0-0] ✓ style renderer [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] sources [chrome 120.0.6099.71 linux #0-0] - toggle [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] screenshots [chrome 120.0.6099.71 linux #0-0] ✓ front_page [chrome 120.0.6099.71 linux #0-0] ✓ open [chrome 120.0.6099.71 linux #0-0] ✓ export [chrome 120.0.6099.71 linux #0-0] ✓ sources [chrome 120.0.6099.71 linux #0-0] ✓ style settings [chrome 120.0.6099.71 linux #0-0] ✓ inspect [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] accessibility [chrome 120.0.6099.71 linux #0-0] skip links [chrome 120.0.6099.71 linux #0-0] ✓ skip link to layer list [chrome 120.0.6099.71 linux #0-0] ✓ skip link to layer editor [chrome 120.0.6099.71 linux #0-0] ✓ skip link to map view [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] keyboard [chrome 120.0.6099.71 linux #0-0] shortcuts [chrome 120.0.6099.71 linux #0-0] ✓ ESC should unfocus [chrome 120.0.6099.71 linux #0-0] ✓ '?' should show shortcuts modal [chrome 120.0.6099.71 linux #0-0] ✓ 'o' should show open modal [chrome 120.0.6099.71 linux #0-0] ✓ 'e' should show export modal [chrome 120.0.6099.71 linux #0-0] ✓ 'd' should show sources modal [chrome 120.0.6099.71 linux #0-0] ✓ 's' should show settings modal [chrome 120.0.6099.71 linux #0-0] - 'i' should change map to inspect mode [chrome 120.0.6099.71 linux #0-0] ✓ 'm' should focus map [chrome 120.0.6099.71 linux #0-0] ✓ '!' should show debug modal [chrome 120.0.6099.71 linux #0-0] [chrome 120.0.6099.71 linux #0-0] 44 passing (58.8s) [chrome 120.0.6099.71 linux #0-0] 23 skipped ``` After: ``` accessibility skip links - skip link to layer list - skip link to layer editor - skip link to map view history ✓ undo/redo (4894ms) keyboard shortcuts ✓ ESC should unfocus (1912ms) ✓ '?' should show shortcuts modal (458ms) ✓ 'o' should show open modal (710ms) ✓ 'e' should show export modal (692ms) ✓ 'd' should show sources modal (588ms) ✓ 's' should show settings modal (894ms) ✓ 'i' should change map to inspect mode (804ms) ✓ 'm' should focus map (837ms) ✓ '!' should show debug modal (607ms) layers ops ✓ delete (4313ms) ✓ duplicate (1780ms) ✓ hide (1862ms) background ✓ add (1675ms) modify layer - expand/collapse ✓ id (3735ms) ✓ min-zoom (2209ms) ✓ max-zoom (2127ms) ✓ comments (2515ms) ✓ color (2022ms) filter - expand/collapse - compound filter paint - expand/collapse - color - pattern - opacity json-editor - expand/collapse - modify - parse error fill ✓ add (1831ms) - change source line ✓ add (1844ms) ✓ groups (687ms) symbol ✓ add (2035ms) raster ✓ add (1814ms) circle ✓ add (1867ms) fill extrusion ✓ add (1963ms) groups ✓ simple (2653ms) map zoom level ✓ via url (2279ms) ✓ via map controls (733ms) modals open ✓ close (2519ms) - upload ✓ load from url (1557ms) shortcuts ✓ open/close (1136ms) export ✓ close (755ms) - download sources - active sources - public source - add new source inspect ✓ toggle (1020ms) style settings ✓ name (1085ms) ✓ owner (1060ms) ✓ sprite url (1214ms) ✓ glyphs url (1553ms) ✓ maptiler access token (1111ms) ✓ thunderforest access token (1102ms) ✓ style renderer (922ms) sources - toggle Spec Tests Passing Failing Pending Skipped ┌────────────────────────────────────────────────────────────────────────────────────────────────┐ │ ✔ accessibility.cy.ts 52ms 3 - - 3 - │ ├────────────────────────────────────────────────────────────────────────────────────────────────┤ │ ✔ history.cy.ts 00:06 1 1 - - - │ ├────────────────────────────────────────────────────────────────────────────────────────────────┤ │ ✔ keyboard.cy.ts 00:10 9 9 - - - │ ├────────────────────────────────────────────────────────────────────────────────────────────────┤ │ ✔ layers.cy.ts 00:39 28 17 - 11 - │ ├────────────────────────────────────────────────────────────────────────────────────────────────┤ │ ✔ map.cy.ts 00:04 2 2 - - - │ ├────────────────────────────────────────────────────────────────────────────────────────────────┤ │ ✔ modals.cy.ts 00:16 18 12 - 6 - │ └────────────────────────────────────────────────────────────────────────────────────────────────┘ ✔ All specs passed! 01:18 61 41 - 20 - ``` --------- Co-authored-by: Yuri Astrakhan <yuriastrakhan@gmail.com>
171 lines
5.2 KiB
TypeScript
171 lines
5.2 KiB
TypeScript
import {v1 as uuid} from "uuid";
|
|
|
|
export default {
|
|
isMac() {
|
|
return Cypress.platform === "darwin";
|
|
},
|
|
|
|
beforeEach() {
|
|
this.setupInterception();
|
|
this.setStyle('both');
|
|
},
|
|
|
|
setupInterception() {
|
|
cy.intercept('GET', 'http://localhost:8888/example-style.json', { fixture: 'example-style.json' }).as('example-style.json');
|
|
cy.intercept('GET', 'http://localhost:8888/example-layer-style.json', { fixture: 'example-layer-style.json' });
|
|
cy.intercept('GET', 'http://localhost:8888/geojson-style.json', { fixture: 'geojson-style.json' });
|
|
cy.intercept('GET', 'http://localhost:8888/raster-style.json', { fixture: 'raster-style.json' });
|
|
cy.intercept('GET', 'http://localhost:8888/geojson-raster-style.json', { fixture: 'geojson-raster-style.json' });
|
|
cy.intercept({method: 'GET', url: '*example.local/*' }, []);
|
|
cy.intercept({method: 'GET', url: '*example.com/*' }, []);
|
|
},
|
|
|
|
setStyle(styleProperties: 'geojson' | 'raster' | 'both' | 'layer' | '', zoom? : number) {
|
|
let url = "?debug";
|
|
switch (styleProperties) {
|
|
case "geojson":
|
|
url += "&style=http://localhost:8888/geojson-style.json";
|
|
break;
|
|
case "raster":
|
|
url += "&style=http://localhost:8888/raster-style.json";
|
|
break;
|
|
case "both":
|
|
url += "&style=http://localhost:8888/geojson-raster-style.json";
|
|
break;
|
|
case "layer":
|
|
url += "&style=http://localhost:8888/example-layer-style.json";
|
|
break;
|
|
}
|
|
if (zoom) {
|
|
url += "#" + zoom + "/41.3805/2.1635";
|
|
}
|
|
cy.visit("http://localhost:8888/" + url);
|
|
if (styleProperties) {
|
|
cy.on('window:confirm', () => true)
|
|
}
|
|
cy.get(".maputnik-toolbar-link").should("be.visible");
|
|
},
|
|
|
|
getDataAttribute(key: string, selector?: string) {
|
|
return `*[data-wd-key='${key}'] ${selector || ''}`;
|
|
},
|
|
|
|
closeModal(key: string) {
|
|
const selector = this.getDataAttribute(key);
|
|
|
|
this.isDisplayedInViewport(selector);
|
|
|
|
this.click(this.getDataAttribute(key + ".close-modal"));
|
|
|
|
this.doesNotExists(selector);
|
|
},
|
|
|
|
openLayersModal() {
|
|
cy.get(this.getDataAttribute('layer-list:add-layer')).click();
|
|
|
|
cy.get(this.getDataAttribute('modal:add-layer')).should('exist');
|
|
cy.get(this.getDataAttribute('modal:add-layer')).should('be.visible');
|
|
},
|
|
|
|
getStyleFromWindow(win: Window) {
|
|
const styleId = win.localStorage.getItem("maputnik:latest_style");
|
|
const styleItem = win.localStorage.getItem(`maputnik:style:${styleId}`)
|
|
const obj = JSON.parse(styleItem || "");
|
|
return obj;
|
|
},
|
|
|
|
isStyleStoreEqual(getter: (obj:any) => any, styleObj: any) {
|
|
cy.window().then((win: any) => {
|
|
const obj = this.getStyleFromWindow(win);
|
|
assert.deepEqual(getter(obj), styleObj);
|
|
});
|
|
},
|
|
|
|
isStyleStoreEqualToExampleFileData() {
|
|
cy.window().then((win: any) => {
|
|
const obj = this.getStyleFromWindow(win);
|
|
cy.fixture('example-style.json').should('deep.equal', obj);
|
|
});
|
|
},
|
|
|
|
fillLayersModal(opts: any) {
|
|
var type = opts.type;
|
|
var layer = opts.layer;
|
|
var id;
|
|
if(opts.id) {
|
|
id = opts.id
|
|
}
|
|
else {
|
|
id = `${type}:${uuid()}`;
|
|
}
|
|
|
|
cy.get(this.getDataAttribute('add-layer.layer-type', "select")).select(type);
|
|
cy.get(this.getDataAttribute("add-layer.layer-id", "input")).type(id);
|
|
if(layer) {
|
|
cy.get(this.getDataAttribute("add-layer.layer-source-block", "input")).type(layer);
|
|
}
|
|
cy.get(this.getDataAttribute("add-layer")).click();
|
|
|
|
return id;
|
|
},
|
|
|
|
typeKeys(keys: string) {
|
|
cy.get('body').type(keys);
|
|
},
|
|
|
|
click(selector: string) {
|
|
cy.get(selector).click();
|
|
},
|
|
|
|
select(selector: string, value: string) {
|
|
cy.get(selector).select(value);
|
|
},
|
|
|
|
isSelected(selector: string, value: string) {
|
|
cy.get(selector).find(`option[value="${value}"]`).should("be.selected");
|
|
},
|
|
|
|
|
|
focus(selector: string) {
|
|
cy.get(selector).focus();
|
|
},
|
|
|
|
isFocused(selector: string) {
|
|
cy.get(selector).should('have.focus');
|
|
},
|
|
|
|
isDisplayedInViewport(selector: string) {
|
|
cy.get(selector).should('be.visible');
|
|
},
|
|
|
|
isNotDisplayedInViewport(selector: string) {
|
|
cy.get(selector).should('not.be.visible');
|
|
},
|
|
|
|
setValue(selector: string, text: string) {
|
|
cy.get(selector).clear().type(text, {parseSpecialCharSequences: false});
|
|
},
|
|
|
|
isExists(selector: string) {
|
|
cy.get(selector).should('exist');
|
|
},
|
|
|
|
doesNotExists(selector: string) {
|
|
cy.get(selector).should('not.exist');
|
|
},
|
|
|
|
chooseExampleFile() {
|
|
cy.get("input[type='file']").selectFile('cypress/fixtures/example-style.json', {force: true});
|
|
},
|
|
|
|
getExampleFileUrl() {
|
|
return "http://localhost:8888/example-style.json";
|
|
},
|
|
|
|
waitForExampleFileRequset() {
|
|
cy.wait('@example-style.json');
|
|
}
|
|
|
|
|
|
}
|