Skip to content

Commit c2be994

Browse files
authored
Dev to Main Sync (#903)
1 parent 3f30b39 commit c2be994

File tree

14 files changed

+309
-162
lines changed

14 files changed

+309
-162
lines changed

__tests__/task-requests/task-requestDetails.test.js

Lines changed: 71 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,63 @@ const {
33
urlMappings,
44
defaultMockResponseHeaders,
55
} = require('../../mock-data/taskRequests');
6+
const { user } = require('../../mock-data/users/index.js');
7+
8+
describe('Request container for non-super users', () => {
9+
let browser;
10+
let page;
11+
jest.setTimeout(60000);
12+
13+
beforeAll(async () => {
14+
browser = await puppeteer.launch({
15+
headless: 'new',
16+
ignoreHTTPSErrors: true,
17+
args: ['--incognito', '--disable-web-security'],
18+
devtools: false,
19+
});
20+
page = await browser.newPage();
21+
await page.setRequestInterception(true);
22+
page.on('request', (interceptedRequest) => {
23+
const url = interceptedRequest.url();
24+
if (url == 'https://staging-api.realdevsquad.com/users/self') {
25+
interceptedRequest.respond({
26+
...defaultMockResponseHeaders,
27+
body: JSON.stringify(user),
28+
});
29+
} else if (urlMappings.hasOwnProperty(url)) {
30+
interceptedRequest.respond({
31+
...defaultMockResponseHeaders,
32+
body: JSON.stringify(urlMappings[url]),
33+
});
34+
} else {
35+
interceptedRequest.continue();
36+
}
37+
});
38+
await page.goto(
39+
'http://localhost:8000/task-requests/details/?id=dM5wwD9QsiTzi7eG7Oq5&dev=true',
40+
);
41+
});
42+
43+
afterAll(async () => {
44+
await browser.close();
45+
});
46+
47+
it('Approve and Reject buttons should not render for non-super users', async function () {
48+
await page.waitForNetworkIdle();
49+
const approveButton = await page.$('[data-testid="task-approve-button"]');
50+
const rejectButton = await page.$('[data-testid="task-reject-button"]');
51+
expect(approveButton).toBeNull();
52+
expect(rejectButton).toBeNull();
53+
});
54+
55+
it('Should render task status for non-super users', async function () {
56+
await page.waitForNetworkIdle();
57+
const taskRequestStatus = await page.$(
58+
'[data-testid="requestors-task-status"]',
59+
);
60+
expect(taskRequestStatus).toBeTruthy();
61+
});
62+
});
663

764
describe('Task request details page', () => {
865
let browser;
@@ -89,9 +146,13 @@ describe('Task request details page', () => {
89146
);
90147
});
91148

92-
it('Should contain Approve and Reject buttons', async function () {
93-
const approveButton = await page.$('.requestors__conatainer__list__button');
94-
const rejectButton = await page.$('.request-details__reject__button');
149+
it('Should render Approve and Reject buttons for super users', async function () {
150+
await page.goto(
151+
'http://localhost:8000/task-requests/details/?id=dM5wwD9QsiTzi7eG7Oq5&dev=true',
152+
);
153+
await page.waitForNetworkIdle();
154+
const approveButton = await page.$('[data-testid="task-approve-button"]');
155+
const rejectButton = await page.$('[data-testid="task-reject-button"]');
95156
expect(approveButton).toBeTruthy();
96157
expect(rejectButton).toBeTruthy();
97158
});
@@ -180,9 +241,13 @@ describe('Task request details page with markdown support in description', () =>
180241
expect(descriptionHtmlValue).toContain('<h3 id="heading">Heading</h3>');
181242
});
182243

183-
it('Should contain Approve and Reject buttons', async function () {
184-
const approveButton = await page.$('.requestors__conatainer__list__button');
185-
const rejectButton = await page.$('.request-details__reject__button');
244+
it('Should render Approve and Reject buttons for super users', async function () {
245+
await page.goto(
246+
'http://localhost:8000/task-requests/details/?id=dM5wwD9QsiTzi7eG7Oq6&dev=true',
247+
);
248+
await page.waitForNetworkIdle();
249+
const approveButton = await page.$('[data-testid="task-approve-button"]');
250+
const rejectButton = await page.$('[data-testid="task-reject-button"]');
186251
expect(approveButton).toBeTruthy();
187252
expect(rejectButton).toBeTruthy();
188253
});

__tests__/users/App.test.js

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,13 @@ describe('App Component', () => {
3737
headers,
3838
body: JSON.stringify({
3939
...filteredUsersData,
40-
users: filteredUsersData.users.filter(
41-
(user) => user.roles.in_discord,
42-
),
40+
...mockUserData,
41+
users: [
42+
...filteredUsersData.users.filter(
43+
(user) => user.roles.in_discord,
44+
),
45+
...mockUserData.users.filter((user) => user.roles.in_discord),
46+
],
4347
}),
4448
});
4549
} else if (url === `${API_BASE_URL}/users/search/?verified=true`) {
@@ -49,9 +53,11 @@ describe('App Component', () => {
4953
headers,
5054
body: JSON.stringify({
5155
...filteredUsersData,
52-
users: filteredUsersData.users.filter((user) => user.discordId),
5356
...mockUserData,
54-
users: mockUserData.users.filter((user) => user.discordId),
57+
users: [
58+
...filteredUsersData.users.filter((user) => user.discordId),
59+
...mockUserData.users.filter((user) => user.discordId),
60+
],
5561
}),
5662
});
5763
} else {
@@ -96,4 +102,48 @@ describe('App Component', () => {
96102
const url = await page.url();
97103
expect(url).toContain('?tab=verified');
98104
});
105+
106+
it('should handle user card clicks and apply active_tab class to clicked card only in discord tab', async () => {
107+
await page.goto(`${BASE_URL}/users/discord/?tab=in_discord`);
108+
await page.waitForNetworkIdle();
109+
await page.waitForSelector('.user_card[data-key]');
110+
const userCardTestIds = await page.$$eval(
111+
'[data-testid^="user-card-"]',
112+
(cards) => cards.map((card) => card.getAttribute('data-testid')),
113+
);
114+
for (let i = 0; i < userCardTestIds.length; i++) {
115+
const userCardSelector = `[data-testid="${userCardTestIds[i]}"]`;
116+
const userCardElement = await page.$(userCardSelector);
117+
await userCardElement.click();
118+
await page.waitForTimeout(1000);
119+
const isActive = await page.evaluate((selector) => {
120+
return document
121+
.querySelector(selector)
122+
?.classList.contains('active_tab');
123+
}, userCardSelector);
124+
expect(isActive).toBe(true);
125+
}
126+
});
127+
128+
it('should handle user card clicks and apply active_tab class to clicked card only verified tab', async () => {
129+
await page.goto(`${BASE_URL}/users/discord/?tab=verified`);
130+
await page.waitForNetworkIdle();
131+
await page.waitForSelector('.user_card[data-key]');
132+
const userCardTestIds = await page.$$eval(
133+
'[data-testid^="user-card-"]',
134+
(cards) => cards.map((card) => card.getAttribute('data-testid')),
135+
);
136+
for (let i = 0; i < userCardTestIds.length; i++) {
137+
const userCardSelector = `[data-testid="${userCardTestIds[i]}"]`;
138+
const userCardElement = await page.$(userCardSelector);
139+
await userCardElement.click();
140+
await page.waitForTimeout(1000);
141+
const isActive = await page.evaluate((selector) => {
142+
return document
143+
.querySelector(selector)
144+
?.classList.contains('active_tab');
145+
}, userCardSelector);
146+
expect(isActive).toBe(true);
147+
}
148+
});
99149
});

__tests__/users/user-management-home-screen.test.js

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ describe('Tests the User Management User Listing Screen', () => {
99
let tileViewBtn;
1010
let tableViewBtn;
1111
let userSearchElement;
12-
let paginationElement;
13-
let prevBtn;
14-
let nextBtn;
1512
jest.setTimeout(60000);
1613

1714
beforeAll(async () => {
@@ -71,9 +68,6 @@ describe('Tests the User Management User Listing Screen', () => {
7168
tileViewBtn = await page.$('#tile-view-btn');
7269
tableViewBtn = await page.$('#table-view-btn');
7370
userSearchElement = await page.$('#user-search');
74-
paginationElement = await page.$('#pagination');
75-
prevBtn = await page.$('#prevButton');
76-
nextBtn = await page.$('#nextButton');
7771
});
7872

7973
afterAll(async () => {
@@ -85,9 +79,6 @@ describe('Tests the User Management User Listing Screen', () => {
8579
expect(tileViewBtn).toBeTruthy();
8680
expect(tableViewBtn).toBeTruthy();
8781
expect(userSearchElement).toBeTruthy();
88-
expect(paginationElement).toBeTruthy();
89-
expect(prevBtn).toBeTruthy();
90-
expect(nextBtn).toBeTruthy();
9182
});
9283

9384
it('Check the UI interactions of tile view and table view button.', async () => {

mock-data/taskRequests/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
const { superUserDetails } = require('../users/mockdata.js');
2+
13
const fetchedTaskRequests = [
24
{
35
id: '123CCXSDF123',
@@ -260,7 +262,6 @@ const githubIssue = {
260262
performed_via_github_app: null,
261263
state_reason: 'completed',
262264
};
263-
264265
const individualTaskDetail = {
265266
message: 'task returned successfully',
266267
taskData: {
@@ -306,7 +307,6 @@ const userInformationTaskCreation = {
306307
},
307308
},
308309
};
309-
310310
const userInformation = {
311311
message: 'User returned successfully!',
312312
user: {
@@ -351,6 +351,7 @@ const defaultMockResponseHeaders = {
351351
};
352352

353353
const urlMappings = {
354+
'https://staging-api.realdevsquad.com/users/self': superUserDetails.user,
354355
'https://api.realdevsquad.com/taskRequests/dM5wwD9QsiTzi7eG7Oq5':
355356
individualTaskReqDetail,
356357
'https://api.realdevsquad.com/taskRequests/dM5wwD9QsiTzi7eG7Oq6':

task-requests/details/index.html

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424
crossorigin="anonymous"
2525
referrerpolicy="no-referrer"
2626
></script>
27-
<script src="/task-requests/details/script.js" defer></script>
2827
<script
2928
src="https://cdnjs.cloudflare.com/ajax/libs/showdown/2.1.0/showdown.min.js"
3029
integrity="sha512-LhccdVNGe2QMEfI3x4DVV3ckMRe36TfydKss6mJpdHjNFiV07dFpS2xzeZedptKZrwxfICJpez09iNioiSZ3hA=="
3130
crossorigin="anonymous"
3231
referrerpolicy="no-referrer"
3332
></script>
33+
<script type="module" src="/task-requests/details/script.js" defer></script>
3434
</head>
3535
<body>
3636
<div class="header">
@@ -85,11 +85,6 @@ <h4 class="requestors__container__title">Requestors</h4>
8585
</ul>
8686
</div>
8787
</div>
88-
<div class="reject__container">
89-
<button id="reject-button" class="request-details__reject__button">
90-
Reject
91-
</button>
92-
</div>
9388
</div>
9489
</div>
9590
<div id="toast_task_details" class="hidden">

0 commit comments

Comments
 (0)