@uxf/e2e 11.49.4 → 11.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components.d.ts +2 -0
- package/components.js +2 -0
- package/package.json +1 -1
- package/tests/datagrid-v2.e2e.d.ts +1 -0
- package/tests/datagrid-v2.e2e.js +73 -0
- package/tests/date-picker-input.e2e.js +1 -1
- package/tests/multi-select.e2e.d.ts +1 -0
- package/tests/multi-select.e2e.js +32 -0
- package/tests/sidebar-menu.e2e.js +1 -1
- package/ui/date-picker-input.d.ts +1 -1
- package/ui/date-picker-input.js +4 -2
- package/ui/multi-select.d.ts +17 -0
- package/ui/multi-select.js +50 -0
- package/ui/select.d.ts +1 -0
- package/ui/select.js +3 -0
package/components.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ import { textInput } from "./ui/text-input";
|
|
|
20
20
|
import { textLink } from "./ui/text-link";
|
|
21
21
|
import { textarea } from "./ui/textarea";
|
|
22
22
|
import { toggle } from "./ui/toggle";
|
|
23
|
+
import { multiSelect } from "./ui/multi-select";
|
|
23
24
|
export declare const components: {
|
|
24
25
|
button: typeof button;
|
|
25
26
|
buttonGroup: typeof buttonGroup;
|
|
@@ -36,6 +37,7 @@ export declare const components: {
|
|
|
36
37
|
message: typeof message;
|
|
37
38
|
modal: typeof modal;
|
|
38
39
|
multiCombobox: typeof multiCombobox;
|
|
40
|
+
multiSelect: typeof multiSelect;
|
|
39
41
|
radioGroup: typeof radioGroup;
|
|
40
42
|
select: typeof select;
|
|
41
43
|
textarea: typeof textarea;
|
package/components.js
CHANGED
|
@@ -23,6 +23,7 @@ const text_input_1 = require("./ui/text-input");
|
|
|
23
23
|
const text_link_1 = require("./ui/text-link");
|
|
24
24
|
const textarea_1 = require("./ui/textarea");
|
|
25
25
|
const toggle_1 = require("./ui/toggle");
|
|
26
|
+
const multi_select_1 = require("./ui/multi-select");
|
|
26
27
|
exports.components = {
|
|
27
28
|
button: button_1.button,
|
|
28
29
|
buttonGroup: button_group_1.buttonGroup,
|
|
@@ -39,6 +40,7 @@ exports.components = {
|
|
|
39
40
|
message: message_1.message,
|
|
40
41
|
modal: modal_1.modal,
|
|
41
42
|
multiCombobox: multi_combobox_1.multiCombobox,
|
|
43
|
+
multiSelect: multi_select_1.multiSelect,
|
|
42
44
|
radioGroup: radio_group_1.radioGroup,
|
|
43
45
|
select: select_1.select,
|
|
44
46
|
textarea: textarea_1.textarea,
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const testcafe_1 = require("testcafe");
|
|
4
|
+
const components_1 = require("../components");
|
|
5
|
+
const config_1 = require("../config");
|
|
6
|
+
const wait_for_react_1 = require("../utils/wait-for-react");
|
|
7
|
+
(0, testcafe_1.fixture)("Datagrid V2")
|
|
8
|
+
.page(config_1.BASE_URL + "/examples/data-grid/data-grid-v2/Default")
|
|
9
|
+
.httpAuth({ username: "uxf", password: "uxf" })
|
|
10
|
+
.beforeEach(async (t) => {
|
|
11
|
+
await (0, wait_for_react_1.waitForReact)(10000, t);
|
|
12
|
+
});
|
|
13
|
+
(0, testcafe_1.test)("Filters", async (t) => {
|
|
14
|
+
//otevření filtrů
|
|
15
|
+
await components_1.components.iconButton({ iconName: "icon-sprite--filter" }).click();
|
|
16
|
+
//number inputy Number interval (od) a Number interval (do)
|
|
17
|
+
await components_1.components.input({ name: "interval.from" }).type("3");
|
|
18
|
+
await components_1.components.input({ name: "interval.from" }).shouldHaveValue("3");
|
|
19
|
+
await components_1.components.input({ name: "interval.to" }).type("5");
|
|
20
|
+
await components_1.components.input({ name: "interval.to" }).shouldHaveValue("5");
|
|
21
|
+
//email
|
|
22
|
+
await components_1.components.input({ name: "mail" }).type("test@uxf.cz");
|
|
23
|
+
await components_1.components.input({ name: "mail" }).shouldHaveValue("test@uxf.cz");
|
|
24
|
+
//datepicker Date (od) a Date (do)
|
|
25
|
+
await components_1.components.datePickerInput({ dataName: "date.from" }).selectDate(10, 10, 2030);
|
|
26
|
+
await components_1.components.datePickerInput({ dataName: "date.from" }).shouldHaveValue("10. 10. 2030");
|
|
27
|
+
await components_1.components.datePickerInput({ dataName: "date.to" }).selectDate(10, 10, 2032);
|
|
28
|
+
await components_1.components.datePickerInput({ dataName: "date.to" }).shouldHaveValue("10. 10. 2032");
|
|
29
|
+
//datetimepicker Datetime (od) a Datetime (do)
|
|
30
|
+
await components_1.components.datetimePickerInput({ dataName: "datetime.from" }).selectDatetime(10, 10, 2030, 10, 30);
|
|
31
|
+
await components_1.components.datetimePickerInput({ dataName: "datetime.from" }).shouldHaveValue("10. 10. 2030 10:30");
|
|
32
|
+
await components_1.components.datetimePickerInput({ dataName: "datetime.to" }).selectDatetime(10, 10, 2032, 12, 0);
|
|
33
|
+
await components_1.components.datetimePickerInput({ dataName: "datetime.to" }).shouldHaveValue("10. 10. 2032 12:00");
|
|
34
|
+
//select
|
|
35
|
+
await components_1.components.select({ dataName: "select" }).selectItemWithText("A");
|
|
36
|
+
await components_1.components.select({ dataName: "select" }).shouldHaveValue("A");
|
|
37
|
+
//multi select
|
|
38
|
+
await components_1.components.multiSelect({ dataName: "multiSelect" }).selectItemsByText(["Option 1", "Option 2"]);
|
|
39
|
+
//zavření filtru
|
|
40
|
+
await components_1.components.iconButton({ iconName: "icon-sprite--xmark" }).click();
|
|
41
|
+
//kontrola zobrazení chipů
|
|
42
|
+
await t.expect((0, testcafe_1.Selector)(".uxf-chip").withText("Number interval: od 3 do 5").exists).ok();
|
|
43
|
+
await t.expect((0, testcafe_1.Selector)(".uxf-chip").withText("E-mail: test@uxf.cz").exists).ok();
|
|
44
|
+
await t.expect((0, testcafe_1.Selector)(".uxf-chip").withText("Date: od 10/10/2030 do 10/10/2032").exists).ok();
|
|
45
|
+
await t
|
|
46
|
+
.expect((0, testcafe_1.Selector)(".uxf-chip").withText("Datetime: od 10/10/2030 10:30 AM do 10/10/2032 12:00 PM").exists)
|
|
47
|
+
.ok();
|
|
48
|
+
await t.expect((0, testcafe_1.Selector)(".uxf-chip").withText("Select:\xa0A").exists).ok();
|
|
49
|
+
await t.expect((0, testcafe_1.Selector)(".uxf-chip").withText("Multi select:\xa0Option 1, Option 2").exists).ok();
|
|
50
|
+
//otevření filtrů
|
|
51
|
+
await components_1.components.iconButton({ iconName: "icon-sprite--filter" }).click();
|
|
52
|
+
//smazání hodnot u number inputů
|
|
53
|
+
await components_1.components.input({ name: "interval.from" }).replace(" ");
|
|
54
|
+
await components_1.components.input({ name: "interval.to" }).replace(" ");
|
|
55
|
+
//samazání hotnoty text inputu email
|
|
56
|
+
const emailInput = (0, testcafe_1.Selector)(`input[name="mail"]`);
|
|
57
|
+
await t.selectText(emailInput);
|
|
58
|
+
await t.pressKey("delete");
|
|
59
|
+
//smazání datepicker Date (od) a Date (do)
|
|
60
|
+
await components_1.components.datePickerInput({ dataName: "date.from" }).clear();
|
|
61
|
+
await components_1.components.datePickerInput({ dataName: "date.to" }).clear();
|
|
62
|
+
//smazání datetimepicker Datetime (od) a Datetime (do)
|
|
63
|
+
await components_1.components.datetimePickerInput({ dataName: "datetime.from" }).clear();
|
|
64
|
+
await components_1.components.datetimePickerInput({ dataName: "datetime.to" }).clear();
|
|
65
|
+
//smazání hodnoty ze selectu
|
|
66
|
+
await components_1.components.select({ dataName: "select" }).clear();
|
|
67
|
+
//smazání honot z multi selectu
|
|
68
|
+
await components_1.components.multiSelect({ dataName: "multiSelect" }).removeItemsByText(["Option 1", "Option 2"]);
|
|
69
|
+
//zavření filtrů
|
|
70
|
+
await components_1.components.iconButton({ iconName: "icon-sprite--xmark" }).click();
|
|
71
|
+
//kontrola, že se nezobrazují chipy nad datagridem
|
|
72
|
+
await t.expect((0, testcafe_1.Selector)(".uxf-data-grid__filter-list .uxf-chip").exists).notOk();
|
|
73
|
+
});
|
|
@@ -16,7 +16,7 @@ const wait_for_react_1 = require("../utils/wait-for-react");
|
|
|
16
16
|
await defaultDatePickerInput.shouldNotBeDisabled();
|
|
17
17
|
await defaultDatePickerInput.selectDate(1, 1, 2024);
|
|
18
18
|
await defaultDatePickerInput.shouldHaveValue("1. 1. 2024");
|
|
19
|
-
await defaultDatePickerInput.replace(
|
|
19
|
+
await defaultDatePickerInput.replace(5, 12, 2025);
|
|
20
20
|
await defaultDatePickerInput.shouldHaveValue("5. 12. 2025");
|
|
21
21
|
//do disabled se nedá psát
|
|
22
22
|
await components_1.components.datePickerInput({ dataName: "date-disabled" }).shouldBeDisabled();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const testcafe_1 = require("testcafe");
|
|
4
|
+
const components_1 = require("../components");
|
|
5
|
+
const config_1 = require("../config");
|
|
6
|
+
const wait_for_react_1 = require("../utils/wait-for-react");
|
|
7
|
+
(0, testcafe_1.fixture)("Multi combobox")
|
|
8
|
+
.page(config_1.BASE_URL + "/examples/ui/multi-select/Default")
|
|
9
|
+
.httpAuth({ username: "uxf", password: "uxf" })
|
|
10
|
+
.beforeEach(async (t) => {
|
|
11
|
+
await (0, wait_for_react_1.waitForReact)(10000, t);
|
|
12
|
+
});
|
|
13
|
+
(0, testcafe_1.test)("Multi select", async () => {
|
|
14
|
+
const defaultMultiSelect = components_1.components.multiSelect({ dataName: "multi-select" });
|
|
15
|
+
await defaultMultiSelect.shouldExist();
|
|
16
|
+
await defaultMultiSelect.selectItemsByText(["Option red", "Option blue", "Option four", "Option green"]);
|
|
17
|
+
await defaultMultiSelect.shouldHaveValues(["Option red", "Option blue", "Option four", "Option green"]);
|
|
18
|
+
await defaultMultiSelect.selectItemsByIndex([2, 3]);
|
|
19
|
+
await defaultMultiSelect.shouldHaveValues([
|
|
20
|
+
"Option red",
|
|
21
|
+
"Option blue",
|
|
22
|
+
"Option four",
|
|
23
|
+
"Option seven",
|
|
24
|
+
"Option nine",
|
|
25
|
+
]);
|
|
26
|
+
await defaultMultiSelect.removeItemsByText(["Option red", "Option blue"]);
|
|
27
|
+
await defaultMultiSelect.removeItemsByIndex([2]);
|
|
28
|
+
await defaultMultiSelect.shouldNotHaveValues(["Option red", "Option blue"]);
|
|
29
|
+
await defaultMultiSelect.shouldHaveValues(["Option four", "Option green", "Option nine"]);
|
|
30
|
+
await components_1.components.multiSelect({ dataName: "multi-select-disabled" }).shouldBeDisabled();
|
|
31
|
+
await components_1.components.multiSelect({ dataName: "multi-select-invalid" }).shouldBeInvalid();
|
|
32
|
+
});
|
|
@@ -30,7 +30,7 @@ testcafe_1.test.skip("Menu desktop", async () => {
|
|
|
30
30
|
await components_1.components.cms.menu().openUserMenuLink("Změna hesla");
|
|
31
31
|
await testcafe_1.t.expect((0, testcafe_1.Selector)("h1").withExactText("Změna hesla").exists).ok();
|
|
32
32
|
});
|
|
33
|
-
|
|
33
|
+
testcafe_1.test.skip("Menu mobile", async () => {
|
|
34
34
|
await testcafe_1.t.resizeWindow(390, 844);
|
|
35
35
|
await components_1.components.textInput({ name: "username" }).type("root@uxf.cz");
|
|
36
36
|
await components_1.components.textInput({ name: "password" }).type("root");
|
|
@@ -5,7 +5,7 @@ interface DatePickerInputFinder extends BaseFinder {
|
|
|
5
5
|
}
|
|
6
6
|
export declare function datePickerInput(finder: DatePickerInputFinder): {
|
|
7
7
|
selectDate(DD: number, MM: number, YYYY: number): TestControllerPromise<any>;
|
|
8
|
-
replace(
|
|
8
|
+
replace(DD: number, MM: number, YYYY: number): TestControllerPromise<any>;
|
|
9
9
|
shouldHaveValue(value: string): TestControllerPromise<any>;
|
|
10
10
|
shouldBeDisabled(): TestControllerPromise<any>;
|
|
11
11
|
shouldNotBeDisabled(): TestControllerPromise<any>;
|
package/ui/date-picker-input.js
CHANGED
|
@@ -13,8 +13,10 @@ function datePickerInput(finder) {
|
|
|
13
13
|
selectDate(DD, MM, YYYY) {
|
|
14
14
|
return testcafe_1.t.typeText(datepickerInputSelector.find(".uxf-input__element"), `${DD}.${MM}.${YYYY}`);
|
|
15
15
|
},
|
|
16
|
-
replace(
|
|
17
|
-
return testcafe_1.t.typeText(datepickerInputSelector.find(".uxf-input__element"),
|
|
16
|
+
replace(DD, MM, YYYY) {
|
|
17
|
+
return testcafe_1.t.typeText(datepickerInputSelector.find(".uxf-input__element"), `${DD}.${MM}.${YYYY}`, {
|
|
18
|
+
replace: true,
|
|
19
|
+
});
|
|
18
20
|
},
|
|
19
21
|
shouldHaveValue(value) {
|
|
20
22
|
return testcafe_1.t.expect(datepickerInputSelector.find(".uxf-input__element").value).eql(value);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseFinder } from "../utils/base-finder";
|
|
2
|
+
interface MultiSelectFinder extends BaseFinder {
|
|
3
|
+
dataName: string;
|
|
4
|
+
nth?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function multiSelect(finder: MultiSelectFinder): {
|
|
7
|
+
selectItemsByText(optionTexts: string[]): Promise<void>;
|
|
8
|
+
selectItemsByIndex(indexes: number[]): Promise<void>;
|
|
9
|
+
shouldExist(): TestControllerPromise<any>;
|
|
10
|
+
shouldBeDisabled(): TestControllerPromise<any>;
|
|
11
|
+
shouldBeInvalid(): TestControllerPromise<any>;
|
|
12
|
+
removeItemsByText(optionTexts: string[]): Promise<void>;
|
|
13
|
+
removeItemsByIndex(indexes: number[]): Promise<void>;
|
|
14
|
+
shouldHaveValues(optionTexts: string[]): Promise<void>;
|
|
15
|
+
shouldNotHaveValues(optionTexts: string[]): Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.multiSelect = multiSelect;
|
|
4
|
+
const testcafe_1 = require("testcafe");
|
|
5
|
+
const create_selector_1 = require("../utils/create-selector");
|
|
6
|
+
function multiSelect(finder) {
|
|
7
|
+
var _a;
|
|
8
|
+
const multiSelectSelector = (0, create_selector_1.createSelector)(finder)
|
|
9
|
+
.find(".uxf-multi-select")
|
|
10
|
+
.withAttribute("data-name", finder.dataName)
|
|
11
|
+
.nth((_a = finder.nth) !== null && _a !== void 0 ? _a : 0)
|
|
12
|
+
.find(".uxf-multi-select__button");
|
|
13
|
+
return {
|
|
14
|
+
async selectItemsByText(optionTexts) {
|
|
15
|
+
await testcafe_1.t.click(multiSelectSelector);
|
|
16
|
+
await optionTexts.reduce((promise, optionText) => promise.then(() => testcafe_1.t.click((0, testcafe_1.Selector)(".uxf-dropdown__item").withText(optionText))), Promise.resolve());
|
|
17
|
+
await testcafe_1.t.click(multiSelectSelector.find(".uxf-input__arrow-icon"));
|
|
18
|
+
},
|
|
19
|
+
async selectItemsByIndex(indexes) {
|
|
20
|
+
await testcafe_1.t.click(multiSelectSelector);
|
|
21
|
+
await indexes.reduce((promise, index) => promise.then(() => testcafe_1.t.click((0, testcafe_1.Selector)(".uxf-dropdown__item").nth(index))), Promise.resolve());
|
|
22
|
+
await testcafe_1.t.click(multiSelectSelector.find(".uxf-input__arrow-icon"));
|
|
23
|
+
},
|
|
24
|
+
shouldExist() {
|
|
25
|
+
return testcafe_1.t.expect(multiSelectSelector.exists).ok();
|
|
26
|
+
},
|
|
27
|
+
shouldBeDisabled() {
|
|
28
|
+
return testcafe_1.t.expect(multiSelectSelector.hasClass("is-disabled")).ok();
|
|
29
|
+
},
|
|
30
|
+
shouldBeInvalid() {
|
|
31
|
+
return testcafe_1.t.expect(multiSelectSelector.hasClass("is-invalid")).ok();
|
|
32
|
+
},
|
|
33
|
+
async removeItemsByText(optionTexts) {
|
|
34
|
+
await optionTexts.reduce((promise, text) => promise.then(() => testcafe_1.t.click((0, testcafe_1.Selector)(multiSelectSelector).find(".uxf-chip").withText(text).find(".uxf-chip__button"))), Promise.resolve());
|
|
35
|
+
},
|
|
36
|
+
async removeItemsByIndex(indexes) {
|
|
37
|
+
await indexes.reduce((promise, index) => promise.then(() => testcafe_1.t.click((0, testcafe_1.Selector)(multiSelectSelector).find(".uxf-chip__button").nth(index))), Promise.resolve());
|
|
38
|
+
},
|
|
39
|
+
async shouldHaveValues(optionTexts) {
|
|
40
|
+
await optionTexts.reduce((promise, text) => promise.then(() => testcafe_1.t
|
|
41
|
+
.expect((0, testcafe_1.Selector)(multiSelectSelector).find(".uxf-chip").withText(text).exists)
|
|
42
|
+
.ok(`item "${text}" does not exists but it should exists`)), Promise.resolve());
|
|
43
|
+
},
|
|
44
|
+
async shouldNotHaveValues(optionTexts) {
|
|
45
|
+
await optionTexts.reduce((promise, text) => promise.then(() => testcafe_1.t
|
|
46
|
+
.expect((0, testcafe_1.Selector)(multiSelectSelector).find(".uxf-chip").withText(text).exists)
|
|
47
|
+
.notOk(`item "${text}" exists but it should not exist`)), Promise.resolve());
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
package/ui/select.d.ts
CHANGED
|
@@ -12,5 +12,6 @@ export declare function select(finder: SelectInputFinder): {
|
|
|
12
12
|
shouldNotBeDisabled(): TestControllerPromise<any>;
|
|
13
13
|
shouldExists(): TestControllerPromise<any>;
|
|
14
14
|
shouldNotExists(): TestControllerPromise<any>;
|
|
15
|
+
clear(): TestControllerPromise<any>;
|
|
15
16
|
};
|
|
16
17
|
export {};
|
package/ui/select.js
CHANGED
|
@@ -37,5 +37,8 @@ function select(finder) {
|
|
|
37
37
|
shouldNotExists() {
|
|
38
38
|
return testcafe_1.t.expect(buttonSelector.exists).notOk(`Select with data-name: ${finder.dataName} should not exists`);
|
|
39
39
|
},
|
|
40
|
+
clear() {
|
|
41
|
+
return testcafe_1.t.click(buttonSelector.nextSibling().find(".uxf-input__remove-button"));
|
|
42
|
+
},
|
|
40
43
|
};
|
|
41
44
|
}
|