Skip to content

Commit 6cb5f27

Browse files
authored
FAT-24721 Implement e2e for C594361 (#7149)
1 parent fedd44d commit 6cb5f27

11 files changed

Lines changed: 935 additions & 24 deletions

File tree

cypress/e2e/consortia/orders/filter-purchase-orders-and-lines-by-fund-code-and-donor.cy.js

Lines changed: 649 additions & 0 deletions
Large diffs are not rendered by default.

cypress/support/api/users.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ Cypress.Commands.add('getUsers', (searchParams) => {
1818
});
1919
});
2020

21-
Cypress.Commands.add('getAdminUserDetails', () => {
22-
if (!Cypress.env('adminUserDetails')) {
21+
Cypress.Commands.add('getAdminUserDetails', (options = {}) => {
22+
const { force = false } = options;
23+
24+
if (force || !Cypress.env('adminUserDetails')) {
2325
return cy
2426
.getUsers({ limit: 1, query: `"username"="${Cypress.env('diku_login')}"` })
2527
.then((users) => {

cypress/support/constants/constants.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1779,12 +1779,14 @@ export const COMMON_BUTTON_LABELS = {
17791779
ACTIONS: 'Actions',
17801780
APPLY: 'Apply',
17811781
CANCEL: 'Cancel',
1782+
CLOSE: 'Close',
17821783
CONFIRM: 'Confirm',
17831784
NEXT: 'Next',
17841785
PREVIOUS: 'Previous',
17851786
REMOVE: 'Remove',
17861787
RESET_ALL: 'Reset all',
17871788
SAVE: 'Save',
1789+
SEARCH: 'Search',
17881790
YES: 'Yes',
17891791
NO: 'No',
17901792
};

cypress/support/fragments/filtersPane.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,4 +563,42 @@ export default {
563563
collapseFilterAccordion(filtersPane, filterLabel) {
564564
this.setFilterAccordionExpanded(filtersPane, filterLabel, false);
565565
},
566+
567+
/* Helpers */
568+
569+
buildMultiSelectFilterValuesAssertion(filtersPane) {
570+
return (filterLabel, expectedValues, options = {}) => {
571+
this.assertMultiSelectFilterValues(filtersPane, filterLabel, expectedValues, options);
572+
};
573+
},
574+
575+
buildMultiSelectFilterOptionsValuesAssertion(filtersPane) {
576+
return (filterLabel, expectedOptions, options = {}) => {
577+
this.assertMultiSelectFilterOptionsValues(filtersPane, filterLabel, expectedOptions, options);
578+
};
579+
},
580+
581+
buildCheckboxFilterValuesAssertion(filtersPane) {
582+
return (filterLabel, labels, options = {}) => {
583+
this.assertCheckboxFilterValues(filtersPane, filterLabel, labels, options);
584+
};
585+
},
586+
587+
buildSelectFilterValueAssertion(filtersPane) {
588+
return (filterLabel, expectedValue, options = {}) => {
589+
this.assertSelectFilterValue(filtersPane, filterLabel, expectedValue, options);
590+
};
591+
},
592+
593+
buildSelectionFilterValueAssertion(filtersPane) {
594+
return (filterLabel, expectedValue, options = {}) => {
595+
this.assertSelectionFilterValue(filtersPane, filterLabel, expectedValue, options);
596+
};
597+
},
598+
599+
buildDateRangeFilterValuesAssertion(filtersPane) {
600+
return (filterLabel, expectedDates, options = {}) => {
601+
this.assertDateRangeFilterValues(filtersPane, filterLabel, expectedDates, options);
602+
};
603+
},
566604
};
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import {
2+
Button,
3+
Checkbox,
4+
Modal,
5+
MultiColumnList,
6+
MultiColumnListCell,
7+
Pane,
8+
SearchField,
9+
including,
10+
} from '../../../../../interactors';
11+
import { COMMON_BUTTON_LABELS, DEFAULT_WAIT_TIME, LIST_ASSERTION_MODES } from '../../../constants';
12+
import MCLHelper from '../../multiColumnList';
13+
14+
const selectOrganizationModal = Modal(including('Add donors'));
15+
const filtersPane = selectOrganizationModal.find(Pane('Search & filter'));
16+
const searchField = filtersPane.find(SearchField({ id: 'input-record-search' }));
17+
const resetAllButton = filtersPane.find(Button(COMMON_BUTTON_LABELS.RESET_ALL));
18+
const searchButton = filtersPane.find(Button(COMMON_BUTTON_LABELS.SEARCH));
19+
const saveButton = selectOrganizationModal.find(Button(COMMON_BUTTON_LABELS.SAVE));
20+
const closeButton = selectOrganizationModal.find(Button(COMMON_BUTTON_LABELS.CLOSE));
21+
const resultsList = selectOrganizationModal.find(MultiColumnList());
22+
23+
const NAME_COLUMN = 'Name';
24+
25+
export default {
26+
waitLoading() {
27+
cy.expect(selectOrganizationModal.exists());
28+
cy.expect(filtersPane.exists());
29+
cy.expect(resultsList.exists());
30+
cy.expect(closeButton.has({ disabled: false }));
31+
cy.expect(saveButton.has({ disabled: true }));
32+
this.assertSelectedDonors(0);
33+
},
34+
35+
selectDonors(names = []) {
36+
const sorted = names.toSorted((a, b) => a.localeCompare(b));
37+
38+
sorted.forEach((name) => {
39+
cy.do([searchField.fillIn(name), searchButton.click()]);
40+
MCLHelper.waitLoadingComplete(resultsList);
41+
cy.wait(DEFAULT_WAIT_TIME);
42+
cy.do(
43+
resultsList
44+
.find(MultiColumnListCell({ row: 0, columnIndex: 0 }))
45+
.find(Checkbox())
46+
.click(),
47+
);
48+
});
49+
cy.do(resetAllButton.click());
50+
MCLHelper.sortListBy(resultsList, NAME_COLUMN);
51+
this.assertSelectedDonors(names.length);
52+
},
53+
54+
submitSelectedDonors() {
55+
cy.do(saveButton.click());
56+
},
57+
58+
assertSelectedDonors(count = 0) {
59+
cy.expect(selectOrganizationModal.has({ footer: including(`Total selected: ${count}`) }));
60+
},
61+
62+
assertModalClosed() {
63+
cy.expect(selectOrganizationModal.absent());
64+
},
65+
66+
assertDonorsListIncludes(names = [], options = {}) {
67+
const { mode = LIST_ASSERTION_MODES.EXISTS } = options;
68+
69+
names.forEach((name) => {
70+
const assertion = resultsList.find(
71+
MultiColumnListCell({ column: NAME_COLUMN, content: including(name) }),
72+
)[mode];
73+
74+
cy.expect(assertion());
75+
});
76+
},
77+
};

cypress/support/fragments/orders/orderLines.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import {
3333
ORDER_EXPORT_CSV_FIELDS,
3434
ORDER_LINE_EXPORT_CSV_FIELDS,
3535
ORDER_LINE_FILTER_LABELS,
36+
RESULTS_PANE_CHOOSE_FILTER_MESSAGE,
3637
} from '../../constants';
3738
import InteractorsTools from '../../utils/interactorsTools';
3839
import getRandomPostfix from '../../utils/stringTools';
@@ -41,6 +42,7 @@ import SearchHelper from '../finance/financeHelper';
4142
import MultiColumnListHelper from '../multiColumnList';
4243
import SelectInstanceModal from './modals/selectInstanceModal';
4344
import SelectLocationModal from './modals/selectLocationModal';
45+
import SelectDonorModal from './modals/selectDonorModal';
4446
import OrderLineDetails from './orderLineDetails';
4547

4648
const path = require('path');
@@ -140,6 +142,11 @@ const submitOrderLine = () => {
140142
}
141143
});
142144
};
145+
146+
// Filters
147+
const donorFilterAccordion = Accordion(ORDER_LINE_FILTER_LABELS.DONOR);
148+
const donorLookUpTrigger = donorFilterAccordion.find(Button('Donor look-up'));
149+
143150
const checkQuantityPhysical = (quantity) => {
144151
cy.expect(Accordion('Cost details').find(KeyValue('Quantity physical')).has({ value: quantity }));
145152
};
@@ -2782,6 +2789,10 @@ export default {
27822789
MultiColumnListHelper.sortListBy(searchResultsPane, columnName);
27832790
},
27842791

2792+
clearFilter(filterLabel) {
2793+
FiltersPaneHelper.clearFilter(filtersPane, filterLabel);
2794+
},
2795+
27852796
filterByCheckboxOptions(filterLabel, options = []) {
27862797
FiltersPaneHelper.filterByCheckboxes(filtersPane, filterLabel, options);
27872798
},
@@ -2798,6 +2809,25 @@ export default {
27982809
this.filterByMultiSelectOptions(ORDER_LINE_FILTER_LABELS.FUND_CODE, codes);
27992810
},
28002811

2812+
removeMultiSelectChips(filterLabel, values = []) {
2813+
FiltersPaneHelper.removeMultiSelectChips(filtersPane, filterLabel, values);
2814+
},
2815+
2816+
filterByDonors(names = []) {
2817+
FiltersPaneHelper.expandFilterAccordion(filtersPane, ORDER_LINE_FILTER_LABELS.DONOR);
2818+
cy.expect(donorLookUpTrigger.exists());
2819+
cy.do(donorLookUpTrigger.click());
2820+
SelectDonorModal.waitLoading();
2821+
SelectDonorModal.assertDonorsListIncludes(names);
2822+
SelectDonorModal.selectDonors(names);
2823+
SelectDonorModal.submitSelectedDonors();
2824+
SelectDonorModal.assertModalClosed();
2825+
},
2826+
2827+
assertNoFiltersApplied() {
2828+
cy.expect(searchResultsPane.find(HTML(including(RESULTS_PANE_CHOOSE_FILTER_MESSAGE))).exists());
2829+
},
2830+
28012831
assertResultsCount(expectedCount) {
28022832
searchResultsPane
28032833
.find(
@@ -2806,11 +2836,34 @@ export default {
28062836
.exists();
28072837
},
28082838

2839+
assertOrderLinesResults(rowsConfig) {
2840+
cy.expect(searchResultsPane.exists());
2841+
MultiColumnListHelper.assertRowsCellsContent(searchResultsPane, rowsConfig);
2842+
this.assertResultsCount(rowsConfig.length);
2843+
},
2844+
28092845
assertResultsActionIsDisabled(actionButtonName, expectedDisabledState = true) {
28102846
const actionsBtn = searchResultsPane.find(actionsButton);
28112847

28122848
cy.do(actionsBtn.click());
28132849
cy.do(Button(actionButtonName).has({ disabled: expectedDisabledState }));
28142850
cy.do(actionsBtn.click());
28152851
},
2852+
2853+
assertMultiSelectFilterValues:
2854+
FiltersPaneHelper.buildMultiSelectFilterValuesAssertion(filtersPane),
2855+
assertMultiSelectFilterOptions:
2856+
FiltersPaneHelper.buildMultiSelectFilterOptionsValuesAssertion(filtersPane),
2857+
2858+
assertFundCodeFilterValues(expectedValues, options = {}) {
2859+
this.assertMultiSelectFilterValues(ORDER_LINE_FILTER_LABELS.FUND_CODE, expectedValues, options);
2860+
},
2861+
2862+
assertFundCodeFilterOptions(expectedOptions, options = {}) {
2863+
this.assertMultiSelectFilterOptions(
2864+
ORDER_LINE_FILTER_LABELS.FUND_CODE,
2865+
expectedOptions,
2866+
options,
2867+
);
2868+
},
28162869
};

cypress/support/fragments/orders/orders.js

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,23 +1047,10 @@ export default {
10471047
FiltersPaneHelper.collapseFilterAccordion(ordersFiltersPane, filterLabel);
10481048
},
10491049

1050-
assertMultiSelectFilterValues(filterLabel, expectedValues, options = {}) {
1051-
FiltersPaneHelper.assertMultiSelectFilterValues(
1052-
ordersFiltersPane,
1053-
filterLabel,
1054-
expectedValues,
1055-
options,
1056-
);
1057-
},
1058-
1059-
assertMultiSelectFilterOptions(filterLabel, expectedOptions, options = {}) {
1060-
FiltersPaneHelper.assertMultiSelectFilterOptionsValues(
1061-
ordersFiltersPane,
1062-
filterLabel,
1063-
expectedOptions,
1064-
options,
1065-
);
1066-
},
1050+
assertMultiSelectFilterValues:
1051+
FiltersPaneHelper.buildMultiSelectFilterValuesAssertion(ordersFiltersPane),
1052+
assertMultiSelectFilterOptions:
1053+
FiltersPaneHelper.buildMultiSelectFilterOptionsValuesAssertion(ordersFiltersPane),
10671054

10681055
assertFundCodeFilterValues(expectedValues, options = {}) {
10691056
this.assertMultiSelectFilterValues(ORDER_FILTER_LABELS.FUND_CODE, expectedValues, options);

cypress/support/fragments/orders/ordersHelper.js

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,109 @@ export default {
2121
);
2222
},
2323

24+
/* Request interceptors */
25+
2426
interceptGetOrders() {
2527
cy.intercept('GET', '/orders/composite-orders*').as('waiterForOrdersQueryCompleted');
2628
},
27-
2829
waitForOrdersQueryCompleted() {
2930
cy.wait('@waiterForOrdersQueryCompleted');
3031
},
3132

3233
interceptGetOrderLines() {
3334
cy.intercept('GET', '/orders/order-lines*').as('waiterForOrderLinesQueryCompleted');
3435
},
35-
3636
waitForOrderLinesQueryCompleted() {
3737
cy.wait('@waiterForOrderLinesQueryCompleted');
3838
},
3939

4040
interceptCustomFields() {
4141
cy.intercept('GET', '/custom-fields*').as('waiterForCustomFieldsQueryCompleted');
4242
},
43-
4443
waitForCustomFieldsQueryCompleted() {
4544
cy.wait('@waiterForCustomFieldsQueryCompleted');
4645
},
46+
47+
interceptGetAcquisitionUnits() {
48+
cy.intercept('GET', '/acquisition-units/units*').as('waiterForAcquisitionUnitsQueryCompleted');
49+
},
50+
waitForAcquisitionUnitsQueryCompleted() {
51+
cy.wait('@waiterForAcquisitionUnitsQueryCompleted');
52+
},
53+
54+
interceptGetOrganizations() {
55+
cy.intercept('GET', '/organizations/organizations*').as('waiterForOrganizationsQueryCompleted');
56+
},
57+
waitForOrganizationsQueryCompleted() {
58+
cy.wait('@waiterForOrganizationsQueryCompleted');
59+
},
60+
61+
interceptGetPrefixes() {
62+
cy.intercept('GET', '/orders/configuration/prefixes*').as('waiterForPrefixesQueryCompleted');
63+
},
64+
waitForPrefixesQueryCompleted() {
65+
cy.wait('@waiterForPrefixesQueryCompleted');
66+
},
67+
68+
interceptGetSuffixes() {
69+
cy.intercept('GET', '/orders/configuration/suffixes*').as('waiterForSuffixesQueryCompleted');
70+
},
71+
waitForSuffixesQueryCompleted() {
72+
cy.wait('@waiterForSuffixesQueryCompleted');
73+
},
74+
75+
interceptGetReasonsForClosure() {
76+
cy.intercept('GET', '/orders/configuration/reasons-for-closure*').as(
77+
'waiterForReasonsForClosureQueryCompleted',
78+
);
79+
},
80+
waitForReasonsForClosureQueryCompleted() {
81+
cy.wait('@waiterForReasonsForClosureQueryCompleted');
82+
},
83+
84+
interceptGetTenantAddresses() {
85+
cy.intercept('GET', '/tenant-addresses*').as('waiterForTenantAddressesQueryCompleted');
86+
},
87+
waitForTenantAddressesQueryCompleted() {
88+
cy.wait('@waiterForTenantAddressesQueryCompleted');
89+
},
90+
91+
interceptGetSettingsEntries() {
92+
cy.intercept('GET', '/settings/entries*').as('waiterForSettingsEntriesQueryCompleted');
93+
},
94+
waitForSettingsEntriesQueryCompleted() {
95+
cy.wait('@waiterForSettingsEntriesQueryCompleted');
96+
},
97+
98+
interceptGetTags() {
99+
cy.intercept('GET', '/tags*').as('waiterForTagsQueryCompleted');
100+
},
101+
waitForTagsQueryCompleted() {
102+
cy.wait('@waiterForTagsQueryCompleted');
103+
},
104+
105+
interceptGetAcquisitionMethods() {
106+
cy.intercept('GET', '/orders/acquisition-methods*').as(
107+
'waiterForAcquisitionMethodsQueryCompleted',
108+
);
109+
},
110+
waitForAcquisitionMethodsQueryCompleted() {
111+
cy.wait('@waiterForAcquisitionMethodsQueryCompleted');
112+
},
113+
114+
interceptGetMaterialTypes() {
115+
cy.intercept('GET', '/material-types*').as('waiterForMaterialTypesQueryCompleted');
116+
},
117+
waitForMaterialTypesQueryCompleted() {
118+
cy.wait('@waiterForMaterialTypesQueryCompleted');
119+
},
120+
121+
interceptGetOrdersStorageSettings() {
122+
cy.intercept('GET', '/orders-storage/settings*').as(
123+
'waiterForOrdersStorageSettingsQueryCompleted',
124+
);
125+
},
126+
waitForOrdersStorageSettingsQueryCompleted() {
127+
cy.wait('@waiterForOrdersStorageSettingsQueryCompleted');
128+
},
47129
};

0 commit comments

Comments
 (0)