Skip to content

Commit 282a733

Browse files
authored
FAT-27164 (#7432)
* FAT-27164-pt1: C1347151 added * FAT-27164-pt1: more tests added * FAT-27164-pt1: C1415769 added
1 parent 0314d82 commit 282a733

12 files changed

Lines changed: 2111 additions & 4 deletions
Lines changed: 352 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,352 @@
1+
import Users from '../../../../support/fragments/users/users';
2+
import UsersCard from '../../../../support/fragments/users/usersCard';
3+
import UserEdit from '../../../../support/fragments/users/userEdit';
4+
import getRandomPostfix from '../../../../support/utils/stringTools';
5+
import TopMenu from '../../../../support/fragments/topMenu';
6+
import Affiliations, { tenantNames } from '../../../../support/dictionary/affiliations';
7+
import ConsortiumManager from '../../../../support/fragments/settings/consortium-manager/consortium-manager';
8+
import CapabilitySets from '../../../../support/dictionary/capabilitySets';
9+
10+
describe('Eureka', () => {
11+
describe('Users', () => {
12+
describe('Consortia', () => {
13+
const randomPostfix = getRandomPostfix();
14+
const testUser = {};
15+
const users = {};
16+
const centralUserIds = [];
17+
const collegeUserIds = [];
18+
19+
const capabSetsToAssignCentral = [
20+
CapabilitySets.uiConsortiaSettingsConsortiaAffiliationsEdit,
21+
CapabilitySets.uiConsortiaSettingsConsortiaAffiliationsView,
22+
CapabilitySets.uiUsersEdit,
23+
CapabilitySets.uiUsersRolesManage,
24+
];
25+
26+
const capabSetsToAssignMember = [
27+
CapabilitySets.uiUsersEdit,
28+
CapabilitySets.uiUsersRolesManage,
29+
];
30+
31+
const userBodies = {};
32+
['A', 'B', 'C', 'D', 'E'].forEach((letter) => {
33+
userBodies[`user${letter}`] = {
34+
type: 'staff',
35+
active: true,
36+
username: `at_c1347146_user${letter.toLowerCase()}_${randomPostfix}`,
37+
personal: {
38+
lastName: `AT_C1347146_LastName_${letter}_${randomPostfix}`,
39+
firstName: `AT_C1347146_FirstName_${letter}_${randomPostfix}`,
40+
middleName: `AT_C1347146_MiddleName_${letter}_${randomPostfix}`,
41+
email: 'at_c1347146@test.com',
42+
preferredContactTypeId: '002',
43+
},
44+
};
45+
});
46+
47+
before('Create users', () => {
48+
cy.getAdminToken();
49+
50+
cy.createTempUser([]).then((props) => {
51+
Object.assign(testUser, props);
52+
cy.assignAffiliationToUser(Affiliations.College, testUser.userId);
53+
cy.assignAffiliationToUser(Affiliations.University, testUser.userId);
54+
cy.assignCapabilitiesToExistingUser(testUser.userId, [], capabSetsToAssignCentral);
55+
});
56+
57+
cy.getUserGroups().then((groupId) => {
58+
['userA', 'userB', 'userC'].forEach((key) => {
59+
userBodies[key].patronGroup = groupId;
60+
cy.createUserWithoutKeycloakInEurekaApi(userBodies[key]).then((userId) => {
61+
users[key] = {
62+
userId,
63+
lastName: userBodies[key].personal.lastName,
64+
firstName: userBodies[key].personal.firstName,
65+
middleName: userBodies[key].personal.middleName,
66+
};
67+
centralUserIds.push(userId);
68+
});
69+
});
70+
});
71+
72+
cy.then(() => {
73+
cy.assignAffiliationToUser(Affiliations.College, users.userC.userId);
74+
});
75+
76+
cy.then(() => {
77+
cy.setTenant(Affiliations.College);
78+
cy.assignCapabilitiesToExistingUser(testUser.userId, [], capabSetsToAssignMember);
79+
cy.getUserGroups().then((groupId) => {
80+
['userD', 'userE'].forEach((key) => {
81+
userBodies[key].patronGroup = groupId;
82+
cy.createUserWithoutKeycloakInEurekaApi(userBodies[key]).then((userId) => {
83+
users[key] = {
84+
userId,
85+
lastName: userBodies[key].personal.lastName,
86+
firstName: userBodies[key].personal.firstName,
87+
middleName: userBodies[key].personal.middleName,
88+
};
89+
collegeUserIds.push(userId);
90+
});
91+
});
92+
});
93+
});
94+
95+
cy.then(() => {
96+
cy.setTenant(Affiliations.University);
97+
cy.assignCapabilitiesToExistingUser(testUser.userId, [], capabSetsToAssignMember);
98+
});
99+
});
100+
101+
before('Login', () => {
102+
cy.resetTenant();
103+
cy.login(testUser.username, testUser.password, {
104+
path: TopMenu.usersPath,
105+
waiter: Users.waitLoading,
106+
});
107+
ConsortiumManager.checkCurrentTenantInTopMenu(tenantNames.central);
108+
cy.visit(`${TopMenu.usersPath}/view/${users.userA.userId}`);
109+
UsersCard.waitLoading();
110+
});
111+
112+
after('Delete users', () => {
113+
cy.resetTenant();
114+
cy.getAdminToken();
115+
Users.deleteViaApi(testUser.userId);
116+
centralUserIds.forEach((id) => Users.deleteViaApi(id));
117+
cy.setTenant(Affiliations.College);
118+
collegeUserIds.forEach((id) => Users.deleteViaApi(id));
119+
});
120+
121+
it(
122+
'C1347146 ECS | Assign affiliation to a user in Central and Member tenants, confirming user creation in Keycloak (thunderjet)',
123+
{ tags: ['criticalPathECS', 'eureka', 'thunderjet', 'C1347146'] },
124+
() => {
125+
// Step 1: Verify User A initial state (1 affiliation)
126+
UsersCard.verifyUserLastFirstNameInCard(users.userA.lastName, users.userA.firstName);
127+
UsersCard.verifyAffiliationsQuantity('1');
128+
129+
// Steps 2-3: Expand affiliations accordion, open modal, check Member-1
130+
UsersCard.expandAffiliationsAccordion();
131+
UsersCard.openAffiliationsModal();
132+
UsersCard.verifyAffiliationModalDefaultState();
133+
UsersCard.verifyTenantInAffiliationsModal(tenantNames.college, {
134+
isShown: true,
135+
isChecked: false,
136+
});
137+
UsersCard.verifyTenantInAffiliationsModal(tenantNames.university, {
138+
isShown: true,
139+
isChecked: false,
140+
});
141+
UsersCard.verifyTenantInAffiliationsModal(tenantNames.central, {
142+
isShown: false,
143+
});
144+
UsersCard.toggleTenantCheckboxInModal(tenantNames.college, { isChecked: true });
145+
UsersCard.verifyTotalSelectedInAffiliationsModal(1);
146+
147+
// Step 4: Check Unassigned checkbox
148+
UsersCard.selectFilterOptionsInAffiliationsModal({ unassigned: true });
149+
UsersCard.verifyTenantInAffiliationsModal(tenantNames.college, {
150+
isShown: false,
151+
});
152+
UsersCard.verifyTenantInAffiliationsModal(tenantNames.university, {
153+
isShown: true,
154+
isChecked: false,
155+
});
156+
UsersCard.verifyTenantInAffiliationsModal(tenantNames.central, {
157+
isShown: false,
158+
});
159+
160+
// Step 5: Save & close → Keycloak modal for Member-1
161+
UsersCard.saveAndCloseAffiliationsModal();
162+
UserEdit.checkPromoteUserModal(
163+
users.userA.lastName,
164+
`${users.userA.firstName} ${users.userA.middleName}`,
165+
);
166+
167+
// Step 6: Cancel → User A affiliations unchanged (1)
168+
UserEdit.clickCancelInPromoteUserModal();
169+
UsersCard.waitLoading();
170+
UsersCard.verifyAffiliationsDetails(tenantNames.central, 1, tenantNames.central);
171+
172+
// Step 7: Assign Member-1, confirm Keycloak → 2 affiliations
173+
UsersCard.openAffiliationsModal();
174+
UsersCard.toggleTenantCheckboxInModal(tenantNames.college);
175+
UsersCard.saveAndCloseAffiliationsModal();
176+
UserEdit.checkPromoteUserModal(
177+
users.userA.lastName,
178+
`${users.userA.firstName} ${users.userA.middleName}`,
179+
);
180+
UserEdit.clickConfirmInPromoteUserModal();
181+
UsersCard.verifyAffiliationChangeSuccessCallout();
182+
UsersCard.waitLoading();
183+
UsersCard.verifyAffiliationsDetails(
184+
tenantNames.central,
185+
2,
186+
tenantNames.college,
187+
tenantNames.central,
188+
);
189+
190+
// Step 8: Swap Member-1 → Member-2, Keycloak modal for Member-2
191+
UsersCard.openAffiliationsModal();
192+
UsersCard.toggleTenantCheckboxInModal(tenantNames.college, { isChecked: false });
193+
UsersCard.toggleTenantCheckboxInModal(tenantNames.university);
194+
UsersCard.saveAndCloseAffiliationsModal();
195+
UserEdit.checkPromoteUserModal(
196+
users.userA.lastName,
197+
`${users.userA.firstName} ${users.userA.middleName}`,
198+
);
199+
200+
// Step 9: Confirm → 2 affiliations (Central + Member-2)
201+
UserEdit.clickConfirmInPromoteUserModal();
202+
UsersCard.verifyAffiliationChangeSuccessCallout();
203+
UsersCard.waitLoading();
204+
UsersCard.verifyAffiliationsDetails(
205+
tenantNames.central,
206+
2,
207+
tenantNames.university,
208+
tenantNames.central,
209+
);
210+
211+
// Step 10: Assign Member-1 again → no Keycloak modal → 3 affiliations
212+
UsersCard.openAffiliationsModal();
213+
UsersCard.toggleTenantCheckboxInModal(tenantNames.college);
214+
UsersCard.saveAndCloseAffiliationsModal();
215+
UsersCard.verifyAffiliationChangeSuccessCallout();
216+
UsersCard.waitLoading();
217+
UsersCard.verifyAffiliationsDetails(
218+
tenantNames.central,
219+
3,
220+
tenantNames.college,
221+
tenantNames.university,
222+
tenantNames.central,
223+
);
224+
225+
// Steps 11-12: User B — assign Member-1 + Member-2, confirm → 3 affiliations
226+
cy.visit(`${TopMenu.usersPath}/view/${users.userB.userId}`);
227+
UsersCard.waitLoading();
228+
UsersCard.verifyUserLastFirstNameInCard(users.userB.lastName, users.userB.firstName);
229+
UsersCard.expandAffiliationsAccordion();
230+
UsersCard.openAffiliationsModal();
231+
UsersCard.toggleTenantCheckboxInModal(tenantNames.college);
232+
UsersCard.toggleTenantCheckboxInModal(tenantNames.university);
233+
UsersCard.saveAndCloseAffiliationsModal();
234+
UserEdit.checkPromoteUserModal(
235+
users.userB.lastName,
236+
`${users.userB.firstName} ${users.userB.middleName}`,
237+
);
238+
UserEdit.clickConfirmInPromoteUserModal();
239+
UsersCard.verifyAffiliationChangeSuccessCallout();
240+
UsersCard.waitLoading();
241+
UsersCard.verifyAffiliationsDetails(
242+
tenantNames.central,
243+
3,
244+
tenantNames.college,
245+
tenantNames.university,
246+
tenantNames.central,
247+
);
248+
249+
// Steps 13-14: User C — assign Member-2, confirm → 3 affiliations
250+
cy.visit(`${TopMenu.usersPath}/view/${users.userC.userId}`);
251+
UsersCard.waitLoading();
252+
UsersCard.verifyUserLastFirstNameInCard(users.userC.lastName, users.userC.firstName);
253+
UsersCard.expandAffiliationsAccordion();
254+
UsersCard.openAffiliationsModal();
255+
UsersCard.toggleTenantCheckboxInModal(tenantNames.university);
256+
UsersCard.saveAndCloseAffiliationsModal();
257+
UserEdit.checkPromoteUserModal(
258+
users.userC.lastName,
259+
`${users.userC.firstName} ${users.userC.middleName}`,
260+
);
261+
UserEdit.clickConfirmInPromoteUserModal();
262+
UsersCard.verifyAffiliationChangeSuccessCallout();
263+
UsersCard.waitLoading();
264+
UsersCard.verifyAffiliationsDetails(
265+
tenantNames.central,
266+
3,
267+
tenantNames.university,
268+
tenantNames.college,
269+
tenantNames.central,
270+
);
271+
272+
// Steps 15-16: User D — assign Member-2, confirm → 3 affiliations
273+
cy.visit(`${TopMenu.usersPath}/view/${users.userD.userId}`);
274+
UsersCard.waitLoading();
275+
UsersCard.verifyUserLastFirstNameInCard(users.userD.lastName, users.userD.firstName);
276+
UsersCard.expandAffiliationsAccordion();
277+
UsersCard.openAffiliationsModal();
278+
UsersCard.toggleTenantCheckboxInModal(tenantNames.university);
279+
UsersCard.saveAndCloseAffiliationsModal();
280+
UserEdit.checkPromoteUserModal(users.userD.lastName, users.userD.firstName);
281+
UserEdit.clickConfirmInPromoteUserModal();
282+
UsersCard.waitLoading();
283+
UsersCard.verifyAffiliationChangeSuccessCallout();
284+
UsersCard.waitLoading();
285+
UsersCard.verifyAffiliationsDetails(
286+
tenantNames.college,
287+
3,
288+
tenantNames.university,
289+
tenantNames.college,
290+
tenantNames.central,
291+
);
292+
293+
// Step 17: Switch to Member-1, navigate to User E, assign Member-2
294+
ConsortiumManager.switchActiveAffiliation(tenantNames.central, tenantNames.college);
295+
Users.waitLoading();
296+
cy.visit(`${TopMenu.usersPath}/view/${users.userE.userId}`);
297+
UsersCard.waitLoading();
298+
UsersCard.verifyUserLastFirstNameInCard(users.userE.lastName, users.userE.firstName);
299+
UsersCard.expandAffiliationsAccordion();
300+
UsersCard.openAffiliationsModal();
301+
UsersCard.toggleTenantCheckboxInModal(tenantNames.university);
302+
UsersCard.saveAndCloseAffiliationsModal();
303+
UserEdit.checkPromoteUserModal(
304+
users.userE.lastName,
305+
`${users.userE.firstName} ${users.userE.middleName}`,
306+
);
307+
308+
// Step 18: Confirm → 3 affiliations
309+
UserEdit.clickConfirmInPromoteUserModal();
310+
UsersCard.waitLoading();
311+
UsersCard.verifyAffiliationChangeSuccessCallout();
312+
UsersCard.waitLoading();
313+
UsersCard.verifyAffiliationsDetails(
314+
tenantNames.college,
315+
3,
316+
tenantNames.university,
317+
tenantNames.college,
318+
tenantNames.central,
319+
);
320+
321+
// Step 19: Unassign Member-2 → 2 affiliations
322+
UsersCard.openAffiliationsModal();
323+
UsersCard.toggleTenantCheckboxInModal(tenantNames.university, { isChecked: false });
324+
UsersCard.saveAndCloseAffiliationsModal();
325+
UsersCard.waitLoading();
326+
UsersCard.verifyAffiliationChangeSuccessCallout();
327+
UsersCard.waitLoading();
328+
UsersCard.verifyAffiliationsDetails(
329+
tenantNames.college,
330+
2,
331+
tenantNames.college,
332+
tenantNames.central,
333+
);
334+
335+
// Step 20: Reassign Member-2 → no Keycloak modal → 3 affiliations
336+
UsersCard.openAffiliationsModal();
337+
UsersCard.toggleTenantCheckboxInModal(tenantNames.university);
338+
UsersCard.saveAndCloseAffiliationsModal();
339+
UsersCard.verifyAffiliationChangeSuccessCallout();
340+
UsersCard.waitLoading();
341+
UsersCard.verifyAffiliationsDetails(
342+
tenantNames.college,
343+
3,
344+
tenantNames.university,
345+
tenantNames.college,
346+
tenantNames.central,
347+
);
348+
},
349+
);
350+
});
351+
});
352+
});

0 commit comments

Comments
 (0)