Skip to content

Commit 4e28a45

Browse files
committed
Fix e2e tests
1 parent d199e12 commit 4e28a45

12 files changed

Lines changed: 275 additions & 384 deletions

File tree

package-lock.json

Lines changed: 79 additions & 144 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@
4444
"@types/enzyme": "^3.1.15",
4545
"@types/enzyme-adapter-react-16": "^1.0.2",
4646
"@types/jasmine": "^3.3.0",
47-
"@types/karma": "^3.0.0",
48-
"@types/node": "^10.12.10",
49-
"@types/react": "^16.7.7",
50-
"@types/react-dom": "^16.0.10",
47+
"@types/karma": "^3.0.1",
48+
"@types/node": "^10.12.11",
49+
"@types/react": "^16.7.10",
50+
"@types/react-dom": "^16.0.11",
5151
"@types/react-select": "^1.3.0",
5252
"@types/webdriverio": "^4.13.0",
5353
"check-dependencies": "^1.0.1",
@@ -70,7 +70,7 @@
7070
"istanbul": "^0.4.3",
7171
"istanbul-instrumenter-loader": "^3.0.1",
7272
"jasmine": "^3.3.0",
73-
"karma": "^3.1.1",
73+
"karma": "^3.1.3",
7474
"karma-chrome-launcher": "^2.1.1",
7575
"karma-coverage": "^1.1.2",
7676
"karma-jasmine": "^2.0.1",
@@ -82,7 +82,7 @@
8282
"mendix-client": "^7.15.4",
8383
"mendix-widget-build-script": "^1.0.0-rc2",
8484
"node-sass": "^4.10.0",
85-
"nodemon": "^1.18.6",
85+
"nodemon": "^1.18.7",
8686
"pre-commit": "^1.2.2",
8787
"raw-loader": "^0.5.1",
8888
"react": "^16.6.3",
@@ -94,16 +94,16 @@
9494
"serviceworker-webpack-plugin": "^1.0.0-alpha02",
9595
"source-map-loader": "^0.2.4",
9696
"style-loader": "^0.23.1",
97-
"ts-loader": "^5.3.0",
97+
"ts-loader": "^5.3.1",
9898
"tslint": "^5.11.0",
9999
"tslint-eslint-rules": "^5.4.0",
100-
"typescript": "^3.1.6",
100+
"typescript": "^3.2.1",
101101
"wdio-dot-reporter": "0.0.10",
102-
"wdio-jasmine-framework": "^0.3.7",
102+
"wdio-jasmine-framework": "^0.3.8",
103103
"wdio-selenium-standalone-service": "0.0.11",
104104
"wdio-spec-reporter": "^0.1.3",
105-
"webdriverio": "^4.14.0",
106-
"webpack": "^4.26.0",
105+
"webdriverio": "^4.14.1",
106+
"webpack": "^4.26.1",
107107
"webpack-bundle-analyzer": "^3.0.3",
108108
"webpack-cli": "^3.1.2",
109109
"webpack-dev-server": "^3.1.10",

src/DropdownReference/components/DropdownReference.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export interface DropdownReferenceProps {
1212
styleObject?: object;
1313
labelWidth: number;
1414
data: ReferenceOption[];
15-
asyncData: LoadOptionsHandler<{}>;
15+
asyncData?: LoadOptionsHandler<{}>;
1616
value?: string;
1717
labelCaption: string;
1818
showLabel: boolean;

src/DropdownReference/components/DropdownReferenceContainer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,9 @@ class DropdownReferenceContainer extends Component<ContainerProps, ContainerStat
113113
}
114114

115115
private isReadOnly = (): boolean => {
116-
const { editable, mxObject, readOnly, attribute } = this.props;
116+
const { editable, mxObject, readOnly } = this.props;
117117

118-
return editable !== "default" || (!mxObject || readOnly || !!(attribute && mxObject.isReadonlyAttr(attribute)));
118+
return editable !== "default" || !mxObject || readOnly;
119119
}
120120

121121
private resetSubscriptions(mxObject?: mendix.lib.MxObject) {
Lines changed: 65 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,71 @@
1-
// import { shallow } from "enzyme";
2-
// import { createElement } from "react";
1+
import { shallow } from "enzyme";
2+
import { createElement } from "react";
33

4-
// import Select from "react-select";
5-
// import { Label } from "../../../SharedResources/components/Label";
6-
// import { DropdownReference, DropdownReferenceProps } from "../DropdownReference";
7-
// import { Alert } from "../../../SharedResources/components/Alert";
4+
import Select from "react-select";
5+
import { Label } from "../../../SharedResources/components/Label";
6+
import { DropdownReference, DropdownReferenceProps } from "../DropdownReference";
7+
import { Alert } from "../../../SharedResources/components/Alert";
88

9-
// describe("DropdownReference", () => {
10-
// const render = (props: DropdownReferenceProps) => shallow(createElement(DropdownReference, props));
11-
// const ReferenceProps: DropdownReferenceProps = {
12-
// emptyOptionCaption: "Select city",
13-
// labelWidth: 3,
14-
// data: [ { value: "KampalaId" , label: "kampala" }, { value: "AmsterdamId" , label: "Amsterdam" } ],
15-
// value: "Kampala",
16-
// labelCaption: "City",
17-
// loaded: false,
18-
// showLabel: true,
19-
// isClearable: true,
20-
// isReadOnly: false,
21-
// selectType: "normal",
22-
// selectedValue: { value: "Kampala" , label: "kampalaId" } || null,
23-
// handleOnchange: jasmine.createSpy("onClick"),
24-
// readOnlyStyle: "control",
25-
// labelOrientation: "horizontal",
26-
// alertMessage: "No text",
27-
// searchText: "search",
28-
// loadingText: "loading",
29-
// minimumCharacter: 1
30-
// };
9+
describe("DropdownReference", () => {
10+
const render = (props: DropdownReferenceProps) => shallow(createElement(DropdownReference, props));
11+
const ReferenceProps: DropdownReferenceProps = {
12+
emptyOptionCaption: "Select city",
13+
labelWidth: 3,
14+
data: [ { value: "KampalaId" , label: "kampala" }, { value: "AmsterdamId" , label: "Amsterdam" } ],
15+
value: "Kampala",
16+
labelCaption: "City",
17+
showLabel: true,
18+
isClearable: true,
19+
isReadOnly: false,
20+
selectType: "normal",
21+
selectedValue: { value: "Kampala" , label: "kampalaId" } || null,
22+
handleOnchange: jasmine.createSpy("onClick"),
23+
readOnlyStyle: "control",
24+
labelOrientation: "horizontal",
25+
alertMessage: "No text",
26+
searchText: "search",
27+
loadingText: "loading",
28+
minimumCharacter: 1
29+
};
3130

32-
// it("renders the structure correctly", () => {
33-
// const DropdownReferenceComponent = render(ReferenceProps);
34-
// DropdownReferenceComponent.setProps({ loaded: true });
31+
it("renders the structure correctly", () => {
32+
const DropdownReferenceComponent = render(ReferenceProps);
33+
DropdownReferenceComponent.setProps({ loaded: true });
3534

36-
// expect(DropdownReferenceComponent).toBeElement(
37-
// createElement(Label, { label: "City" , orientation: "horizontal" , weight: 3 },
38-
// createElement("div", { className: "widget-dropdown-reference" },
39-
// createElement(Select, {
40-
// clearable: true,
41-
// noResultsText: "",
42-
// disabled: false,
43-
// value: { value: "Kampala" , label: "kampalaId" },
44-
// onChange: jasmine.any(Function) as any,
45-
// clearValueText: "",
46-
// options: [ { value: "Kampala" , label: "kampalaId" } ],
47-
// onInputChange: jasmine.any(Function) as any
48-
// }),
49-
// createElement(Alert, { className: "widget-dropdown-type-ahead-alert", bootstrapStyle: "danger" }, "No text"))
50-
// )
51-
// );
52-
// });
35+
expect(DropdownReferenceComponent).toBeElement(
36+
createElement(Label, { label: "City" , orientation: "horizontal" , weight: 3 },
37+
createElement("div", { className: "widget-dropdown-reference", onClick: jasmine.any(Function) },
38+
createElement(Select, {
39+
clearable: true,
40+
noResultsText: "No results found",
41+
disabled: false,
42+
value: { value: "Kampala" , label: "kampalaId" },
43+
onChange: jasmine.any(Function) as any,
44+
clearValueText: "Clear value",
45+
options: [ { value: "KampalaId" , label: "kampala" }, { value: "AmsterdamId" , label: "Amsterdam" } ]
46+
}),
47+
createElement(Alert, { className: "widget-dropdown-type-ahead-alert", bootstrapStyle: "danger" }, "No text"))
48+
)
49+
);
50+
});
5351

54-
// it("with no label caption renders the structure correctly", () => {
55-
// const DropdownReferenceComponent = render(ReferenceProps);
56-
// DropdownReferenceComponent.setProps({ loaded: true });
52+
it("with no label caption renders the structure correctly", () => {
53+
const DropdownReferenceComponent = render(ReferenceProps);
54+
DropdownReferenceComponent.setProps({ loaded: true });
5755

58-
// DropdownReferenceComponent.setProps({ labelCaption: "", showLabel: false });
59-
// expect(DropdownReferenceComponent).toBeElement(
60-
// createElement("div", { className: "widget-dropdown-reference" },
61-
// createElement(Select, {
62-
// clearable: true,
63-
// noResultsText: "",
64-
// disabled: false,
65-
// value: { value: "Kampala" , label: "kampalaId" },
66-
// onChange: jasmine.any(Function) as any,
67-
// clearValueText: "",
68-
// options: [ { value: "Kampala" , label: "kampalaId" } ],
69-
// onInputChange: jasmine.any(Function) as any
70-
// }),
71-
// createElement(Alert, { className: "widget-dropdown-type-ahead-alert", bootstrapStyle: "danger" }, "No text"))
72-
// );
73-
// });
74-
75-
// it("that is still loading renders with the structure", () => {
76-
// const DropdownReferenceComponent = render(ReferenceProps);
77-
// DropdownReferenceComponent.setProps({ loaded: false });
78-
79-
// expect(DropdownReferenceComponent).toBeElement(createElement("div", { className: "loading-data" }));
80-
// });
81-
82-
// describe("with readOnlyStyle as 'text'", () => {
83-
// it("renders with the structure with a selected value", () => {
84-
// const DropdownReferenceComponent = render(ReferenceProps);
85-
// DropdownReferenceComponent.setProps({ readOnlyStyle: "text" });
86-
87-
// // tslint:disable-next-line:no-console
88-
// console.log(DropdownReferenceComponent.html());
89-
90-
// expect(DropdownReferenceComponent).toBeElement(createElement("div", { className: "loading-data" }));
91-
// });
92-
93-
// it("renders with the structure with a no value", () => {
94-
// const DropdownReferenceComponent = render(ReferenceProps);
95-
// DropdownReferenceComponent.setProps({ readOnlyStyle: "text", selectedValue: null });
96-
97-
// expect(DropdownReferenceComponent).toBeElement(createElement("div", { className: "loading-data" }));
98-
// });
99-
// });
100-
// });
56+
DropdownReferenceComponent.setProps({ labelCaption: "", showLabel: false });
57+
expect(DropdownReferenceComponent).toBeElement(
58+
createElement("div", { className: "widget-dropdown-reference", onClick: jasmine.any(Function) },
59+
createElement(Select, {
60+
clearable: true,
61+
noResultsText: "No results found",
62+
disabled: false,
63+
value: { value: "Kampala" , label: "kampalaId" },
64+
onChange: jasmine.any(Function) as any,
65+
clearValueText: "Clear value",
66+
options: [ { value: "KampalaId" , label: "kampala" }, { value: "AmsterdamId" , label: "Amsterdam" } ]
67+
}),
68+
createElement(Alert, { className: "widget-dropdown-type-ahead-alert", bootstrapStyle: "danger" }, "No text"))
69+
);
70+
});
71+
});

src/DropdownReferenceSet/components/DropdownReferenceSetContainer.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class DropdownReferenceSetContainer extends Component<ContainerProps, ContainerS
4646

4747
private subscriptionHandles: number[] = [];
4848
private association: string = this.props.entityPath.split("/")[0];
49-
private readonly handleOnClick: (selectedOption: ReferenceOption) => void = this.onChange.bind(this);
49+
private readonly handleOnClick: (selectedOption: ReferenceOption | any) => void = this.onChange.bind(this);
5050

5151
render() {
5252
return createElement(DropdownReferenceSet, {
@@ -93,9 +93,9 @@ class DropdownReferenceSetContainer extends Component<ContainerProps, ContainerS
9393
}
9494

9595
private isReadOnly = (): boolean => {
96-
const { editable, mxObject, readOnly, attribute } = this.props;
96+
const { editable, mxObject, readOnly } = this.props;
9797

98-
return editable !== "default" || (!mxObject || readOnly || !(attribute && mxObject.isReadonlyAttr(attribute)));
98+
return editable !== "default" || !mxObject || readOnly;
9999
}
100100

101101
private resetSubscriptions(mxObject?: mendix.lib.MxObject) {
@@ -127,7 +127,7 @@ class DropdownReferenceSetContainer extends Component<ContainerProps, ContainerS
127127
}
128128
}
129129

130-
private onChange(recentSelection: ReferenceOption[] | any) {
130+
private onChange(recentSelection: ReferenceOption[]) {
131131
if (this.props.mxObject) {
132132
const selectedOptions: string[] = [];
133133

src/SharedResources/components/Label.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ export interface LabelProps {
1111

1212
export const Label: FunctionComponent<LabelProps> = ({ children, className, label, style, weight, orientation }) => {
1313
weight = (weight > 11 || weight < 1) ? 3 : weight;
14-
const labelWeight = orientation === "horizontal" ? `col-sm-${weight}` : "col-sm-1";
15-
const childrenWeight = orientation === "horizontal" ? `col-sm-${12 - weight}` : "col-sm-12";
14+
const labelWeight = orientation === "horizontal" ? `col-sm-${weight}` : "";
15+
const childrenWeight = orientation === "horizontal" ? `col-sm-${12 - weight}` : "";
1616

1717
return createElement("div", { className: classNames("form-group", className), style },
1818
createElement("label", { className: `control-label ${labelWeight}` }, label),

tests/e2e/Dropdown.spec.ts

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import homePage from "./pages/home.page";
2+
3+
const defaultOption = "Select city";
4+
const defaultOption2 = "Select users";
5+
6+
describe("Dropdown reference ", () => {
7+
it("should populate multiple values in a dropdown list", () => {
8+
homePage.open();
9+
homePage.dropDownSelector.waitForValue();
10+
browser.pause(500);
11+
homePage.dropDownSelector.click();
12+
homePage.dropDownOptions.waitForValue();
13+
browser.pause(500);
14+
15+
const options = homePage.dropDownOptions.value.length;
16+
17+
expect(options).toBeGreaterThan(1);
18+
});
19+
20+
it("should select an option from the drop-down menu", () => {
21+
homePage.dropDownSelector.waitForExist();
22+
homePage.clearIndicator.click();
23+
browser.pause(100);
24+
expect(homePage.selectPlaceholder).toBe(defaultOption);
25+
26+
homePage.dropDownSelector.click();
27+
homePage.dropDownOptions.waitForExist();
28+
browser.keys("ArrowDown");
29+
browser.keys("ArrowDown");
30+
browser.keys("ArrowDown");
31+
browser.keys("Enter");
32+
33+
homePage.dropDownSelector.waitForValue();
34+
expect(homePage.selectedElement.getHTML()).toContain(homePage.selectedValue);
35+
});
36+
37+
it("should clear the selected option", () => {
38+
homePage.open();
39+
homePage.dropDownSelector.waitForExist();
40+
41+
browser.pause(1000);
42+
expect(homePage.selectedElement.getHTML()).toContain(homePage.selectedValue);
43+
44+
homePage.clearIndicator.click();
45+
homePage.dropDownSelector.waitForValue();
46+
47+
expect(homePage.selectPlaceholder).toBe(defaultOption);
48+
});
49+
});
50+
51+
describe("Dropdown reference set ", () => {
52+
xit("should select multi options from the drop-down menu", () => {
53+
homePage.open();
54+
homePage.dropDownReferenceSet.waitForExist();
55+
homePage.clearSetIndicator.click();
56+
expect(homePage.selectSetPlaceholder).toBe(defaultOption2);
57+
58+
homePage.dropDownReferenceSet.click();
59+
homePage.dropDownOptions2.waitForExist();
60+
browser.keys("ArrowDown");
61+
browser.keys("ArrowDown");
62+
browser.keys("ArrowDown");
63+
browser.keys("Enter");
64+
65+
homePage.dropDownReferenceSet.click();
66+
homePage.dropDownOptions2.waitForExist();
67+
browser.keys("ArrowDown");
68+
browser.keys("ArrowDown");
69+
browser.keys("Enter");
70+
71+
homePage.dropDownReferenceSet.waitForValue();
72+
expect(homePage.selectedSetElement.getHTML()).toContain(homePage.selectedSetValue);
73+
});
74+
75+
it("should clear the selected options", () => {
76+
homePage.open();
77+
homePage.dropDownReferenceSet.waitForExist();
78+
browser.pause(1000);
79+
80+
expect(homePage.selectedSetElement.getHTML()).toContain(homePage.selectedSetValue);
81+
82+
homePage.clearSetIndicator.click();
83+
browser.pause(1000);
84+
homePage.dropDownReferenceSet.waitForValue();
85+
86+
expect(homePage.selectSetPlaceholder).toBe(defaultOption2);
87+
});
88+
});

0 commit comments

Comments
 (0)