Skip to content

Commit 5159bc7

Browse files
authored
Merge pull request #824 from Real-Dev-Squad/develop
Dev to Main Sync
2 parents 947ba2c + 22305a5 commit 5159bc7

File tree

11 files changed

+199
-62
lines changed

11 files changed

+199
-62
lines changed

__tests__/extension-requests/extension-requests.test.js

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const {
44
extensionRequestsListPending,
55
extensionRequestsListApproved,
66
extensionRequestResponse,
7-
extensionRequestsListPendingDescending,
7+
extensionRequestsListPendingAscending,
88
extensionRequestsListUserSearch,
99
extensionRequestListForAuditLogs,
1010
} = require('../../mock-data/extension-requests');
@@ -46,9 +46,9 @@ describe('Tests the Extension Requests Screen', () => {
4646
const url = interceptedRequest.url();
4747
if (
4848
url ===
49-
'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3APENDING' ||
49+
'https://api.realdevsquad.com/extension-requests?order=desc&size=5&q=status%3APENDING' ||
5050
url ===
51-
'https://api.realdevsquad.com/extension-requests?dev=true&order=asc'
51+
'https://api.realdevsquad.com/extension-requests?dev=true&order=desc'
5252
) {
5353
interceptedRequest.respond({
5454
status: 200,
@@ -86,7 +86,7 @@ describe('Tests the Extension Requests Screen', () => {
8686
});
8787
} else if (
8888
url ===
89-
'https://api.realdevsquad.com/extension-requests?order=desc&size=5&q=status%3APENDING'
89+
'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3APENDING'
9090
) {
9191
interceptedRequest.respond({
9292
status: 200,
@@ -96,7 +96,7 @@ describe('Tests the Extension Requests Screen', () => {
9696
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
9797
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
9898
},
99-
body: JSON.stringify(extensionRequestsListPendingDescending),
99+
body: JSON.stringify(extensionRequestsListPendingAscending),
100100
});
101101
} else if (
102102
url === 'https://api.realdevsquad.com/users?search=sunny&size=1'
@@ -196,7 +196,7 @@ describe('Tests the Extension Requests Screen', () => {
196196
});
197197
} else if (
198198
url ===
199-
'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3APENDING%2Cassignee%3AiODXB6gfsjaZB9p0XlBw'
199+
'https://api.realdevsquad.com/extension-requests?order=desc&size=5&q=status%3APENDING%2Cassignee%3AiODXB6gfsjaZB9p0XlBw'
200200
) {
201201
interceptedRequest.respond({
202202
status: 200,
@@ -210,7 +210,7 @@ describe('Tests the Extension Requests Screen', () => {
210210
});
211211
} else if (
212212
url ===
213-
'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3APENDING%2Cassignee%3AiODXB6gfsjaZB9p0XlBw%2B7yzVDl8s1ORNCtH9Ps7K'
213+
'https://api.realdevsquad.com/extension-requests?order=desc&size=5&q=status%3APENDING%2Cassignee%3AiODXB6gfsjaZB9p0XlBw%2B7yzVDl8s1ORNCtH9Ps7K'
214214
) {
215215
interceptedRequest.respond({
216216
status: 200,
@@ -278,9 +278,9 @@ describe('Tests the Extension Requests Screen', () => {
278278
});
279279
} else if (
280280
url ===
281-
'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3AAPPROVED%2BPENDING%2BDENIED' ||
281+
'https://api.realdevsquad.com/extension-requests?order=desc&size=5&q=status%3AAPPROVED%2BPENDING%2BDENIED' ||
282282
url ===
283-
'https://api.realdevsquad.com/extension-requests?dev=true&order=asc&q=status%3AAPPROVED%2BDENIED'
283+
'https://api.realdevsquad.com/extension-requests?dev=true&order=desc&q=status%3AAPPROVED%2BDENIED'
284284
) {
285285
interceptedRequest.respond({
286286
status: 200,
@@ -346,7 +346,7 @@ describe('Tests the Extension Requests Screen', () => {
346346
});
347347
} else if (
348348
url ===
349-
'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3AAPPROVED%2Cassignee%3AiODXB6gfsjaZB9p0XlBw%2B7yzVDl8s1ORNCtH9Ps7K'
349+
'https://api.realdevsquad.com/extension-requests?order=desc&size=5&q=status%3AAPPROVED%2Cassignee%3AiODXB6gfsjaZB9p0XlBw%2B7yzVDl8s1ORNCtH9Ps7K'
350350
) {
351351
interceptedRequest.respond({
352352
status: 200,
@@ -360,7 +360,7 @@ describe('Tests the Extension Requests Screen', () => {
360360
});
361361
} else if (
362362
url ===
363-
'https://api.realdevsquad.com/extension-requests?order=asc&size=1&q=status%3APENDING'
363+
'https://api.realdevsquad.com/extension-requests?order=desc&size=1&q=status%3APENDING'
364364
) {
365365
interceptedRequest.respond({
366366
status: 200,
@@ -677,11 +677,11 @@ describe('Tests the Extension Requests Screen', () => {
677677

678678
const sortedRequestDaysArray = requestDaysArray
679679
.slice()
680-
.sort((a, b) => a - b);
680+
.sort((a, b) => b - a);
681681
expect(requestDaysArray).toEqual(sortedRequestDaysArray);
682682
});
683683

684-
it('Checks whether the cards displayed in descending order when sort icon is clicked', async () => {
684+
it('Checks whether the cards displayed in ascending order when sort icon is clicked', async () => {
685685
const sortButton = await page.$('.sort-button');
686686

687687
await sortButton.click();
@@ -697,7 +697,7 @@ describe('Tests the Extension Requests Screen', () => {
697697
requestDaysArray.push(requestedDays.slice(5));
698698
}
699699

700-
const sortedRequestDaysArray = [...requestDaysArray].sort().reverse();
700+
const sortedRequestDaysArray = [...requestDaysArray].sort();
701701

702702
expect(requestDaysArray).toEqual(sortedRequestDaysArray);
703703
});
@@ -916,12 +916,12 @@ describe('Tests the Extension Requests Screen', () => {
916916
await page.waitForNetworkIdle();
917917
const url = page.url();
918918
expect(url).toBe(
919-
`${baseUrl}?order=asc&size=5&q=status%3AAPPROVED%2Cassignee%3Asunny%2Brandhir`,
919+
`${baseUrl}?order=desc&size=5&q=status%3AAPPROVED%2Cassignee%3Asunny%2Brandhir`,
920920
);
921921
});
922922
it('Should have UI elements in sync with url', async () => {
923923
await page.goto(
924-
`${baseUrl}/?order=asc&size=5&q=status%3AAPPROVED%2Cassignee%3Asunny%2Brandhir`,
924+
`${baseUrl}/?order=desc&size=5&q=status%3AAPPROVED%2Cassignee%3Asunny%2Brandhir`,
925925
);
926926
const filterButton = await page.$('#filter-button');
927927
await filterButton.click();
@@ -936,15 +936,15 @@ describe('Tests the Extension Requests Screen', () => {
936936
);
937937
expect(searchText).toBe('sunny,randhir');
938938
await page.waitForSelector('.sort-button');
939-
const ascSortIconDisplayStyle = await page.$eval(
940-
'#asc-sort-icon',
939+
const descSortIconDisplayStyle = await page.$eval(
940+
'#desc-sort-icon',
941941
(icon) => window.getComputedStyle(icon).display,
942942
);
943-
expect(ascSortIconDisplayStyle).toBe('block');
943+
expect(descSortIconDisplayStyle).toBe('block');
944944
});
945945

946946
it('Should show empty message if all extension requests have been addressed', async () => {
947-
await page.goto(`${baseUrl}/?order=asc&size=1&q=status%3APENDING`);
947+
await page.goto(`${baseUrl}/?order=desc&size=1&q=status%3APENDING`);
948948
await page.waitForNetworkIdle();
949949

950950
extensionRequestsElement = await page.$('.extension-requests');

__tests__/groups/group.test.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,4 +243,27 @@ describe('Discord Groups Page', () => {
243243

244244
expect(groupCreationModalClosed).toBeFalsy();
245245
});
246+
247+
test('Should display only specified groups when dev=true and name=<group-name> with different case', async () => {
248+
const groupNames = 'fIrSt,DSA+COdInG';
249+
await page.goto(`${PAGE_URL}/groups?dev=true&name=${groupNames}`);
250+
await page.waitForNetworkIdle();
251+
252+
const displayedGroups = await page.evaluate(() => {
253+
return Array.from(document.querySelectorAll('.card__title')).map(
254+
(el) => el.textContent,
255+
);
256+
});
257+
258+
expect(displayedGroups).toEqual(['First Daaa', 'DSA Coding Group']);
259+
});
260+
261+
test('Should display no group found div when no group is present', async () => {
262+
await page.goto(`${PAGE_URL}/groups?dev=true&name=no-group-present`);
263+
await page.waitForNetworkIdle();
264+
265+
const noGroupDiv = await page.$('.no-group-container');
266+
267+
expect(noGroupDiv).toBeTruthy();
268+
});
246269
});

__tests__/user-details/task-duedate-hover.test.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ describe('Tasks On User Management Page', () => {
182182

183183
it('Scroll of task should work', async () => {
184184
await page.goto(
185-
'http://localhost:8000/users/details/index.html?username=ajeyakrishna',
185+
'http://localhost:8000/users/details/index.html?username=ankush',
186186
);
187187
await page.waitForNetworkIdle();
188188
const taskDiv = await page.$$('.accordion-tasks');
@@ -213,12 +213,12 @@ describe('Tasks On User Management Page', () => {
213213
await page.waitForNetworkIdle();
214214

215215
let renderedTasks = await userTasksDevDiv.$$('.user-task');
216-
expect(Array.from(renderedTasks).length).toBe(12);
216+
expect(Array.from(renderedTasks).length).toBe(15);
217217
});
218218

219219
it('New task card should have all the detail fields', async () => {
220220
await page.goto(
221-
'http://localhost:8000/users/details/index.html?username=ajeyakrishna',
221+
'http://localhost:8000/users/details/index.html?username=ankush',
222222
);
223223
await page.waitForNetworkIdle();
224224
const taskDiv = await page.$$('.accordion-tasks');
@@ -236,7 +236,7 @@ describe('Tasks On User Management Page', () => {
236236
);
237237

238238
expect(firstTaskHTML).toContain('<div class="task-title">');
239-
expect(firstTaskHTML).not.toContain('<progress');
239+
expect(firstTaskHTML).toContain('<progress');
240240
expect(firstTaskHTML).toContain('<div class="detail-block eta">');
241241
expect(firstTaskHTML).toContain('<div class="detail-block status">');
242242
expect(firstTaskHTML).toContain('<div class="detail-block startedOn">');
@@ -251,7 +251,7 @@ describe('Tasks On User Management Page', () => {
251251
);
252252

253253
expect(secondTaskHTML).toContain('<div class="task-title">');
254-
expect(secondTaskHTML).not.toContain('<progress');
254+
expect(secondTaskHTML).toContain('<progress');
255255
expect(secondTaskHTML).toContain('<div class="detail-block eta">');
256256
expect(secondTaskHTML).toContain('<div class="detail-block status">');
257257
expect(secondTaskHTML).toContain('<div class="detail-block startedOn">');
@@ -266,7 +266,7 @@ describe('Tasks On User Management Page', () => {
266266
);
267267

268268
expect(thirdTaskHTML).toContain('<div class="task-title">');
269-
expect(thirdTaskHTML).not.toContain('<progress');
269+
expect(thirdTaskHTML).toContain('<progress');
270270
expect(thirdTaskHTML).toContain('<div class="detail-block eta">');
271271
expect(thirdTaskHTML).toContain('<div class="detail-block status">');
272272
expect(thirdTaskHTML).toContain('<div class="detail-block startedOn">');

extension-requests/script.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,11 @@ const render = async () => {
133133
const assigneeFilterState = userIdList.length ? userIdList : '';
134134
filterStates.assignee = assigneeFilterState;
135135
if (!filterStates.order) {
136-
filterStates.order = Order.ASCENDING;
136+
filterStates.order = Order.DESCENDING;
137137
}
138138
} else {
139139
filterStates.status = Status.PENDING;
140-
filterStates.order = Order.ASCENDING;
140+
filterStates.order = Order.DESCENDING;
141141
filterStates.size = DEFAULT_PAGE_SIZE;
142142
}
143143
updateUIBasedOnFilterStates();

groups/createElements.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,22 @@ const createLoadingCard = () => {
5555
return cardElement;
5656
};
5757

58+
const createNoGroupFound = () => {
59+
const noGroupFound = document.createElement('div');
60+
noGroupFound.classList.add('no-group');
61+
noGroupFound.innerHTML = `
62+
<svg class="icon" fill=currentColor viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
63+
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd"></path>
64+
</svg>
65+
<div class="message">
66+
<h2>No groups found</h2>
67+
<p>Please try a different search input</p>
68+
</div>
69+
`;
70+
71+
return noGroupFound;
72+
};
73+
5874
const createNavbarProfile = (profile) => {
5975
const profileElement = document.createElement('div');
6076
profileElement.className = 'profile';
@@ -201,6 +217,7 @@ const createGroupCreationModal = (onClose = () => {}, onSubmit = () => {}) => {
201217
export {
202218
createCard,
203219
createLoadingCard,
220+
createNoGroupFound,
204221
createNavbarProfile,
205222
createNavbarProfileLoading,
206223
createNavbarProfileSignin,

groups/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
</div>
3838
<div class="create-group">
3939
<button class="button">
40-
<span class="button__text">Create grp</span>
40+
<span class="button__text">Create Group</span>
4141
<img src="assets/plus.svg" class="button__icon" />
4242
</button>
4343
</div>

groups/render.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
createCard,
33
createGroupCreationModal,
44
createLoadingCard,
5+
createNoGroupFound,
56
createNavbarProfile,
67
createNavbarProfileLoading,
78
createNavbarProfileSignin,
@@ -96,6 +97,14 @@ const renderGroupById = ({ group, cardOnClick = () => {} }) => {
9697
}
9798
};
9899

100+
const renderNoGroupFound = () => {
101+
const mainContainer = document.querySelector('.group-container');
102+
const noGroupContainer = document.createElement('div');
103+
noGroupContainer.className = 'no-group-container';
104+
noGroupContainer.append(createNoGroupFound());
105+
mainContainer.append(noGroupContainer);
106+
};
107+
99108
export {
100109
renderNotAuthenticatedPage,
101110
renderGroupCreationModal,
@@ -107,4 +116,5 @@ export {
107116
renderLoadingCards,
108117
removeLoadingCards,
109118
renderGroupById,
119+
renderNoGroupFound,
110120
};

groups/script.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
renderGroupById,
77
renderGroupCreationModal,
88
renderLoadingCards,
9+
renderNoGroupFound,
910
renderLoadingNavbarProfile,
1011
renderNavbarProfile,
1112
renderNavbarProfileSignin,
@@ -18,8 +19,17 @@ import {
1819
getUserGroupRoles,
1920
getUserSelf,
2021
removeRoleFromMember,
22+
getDiscordGroupIdsFromSearch,
23+
getParamValueFromURL,
24+
setParamValueInURL,
2125
} from './utils.js';
2226

27+
const QUERY_PARAM_KEY = {
28+
DEV_FEATURE_FLAG: 'dev',
29+
GROUP_SEARCH: 'name',
30+
};
31+
const isDev = getParamValueFromURL(QUERY_PARAM_KEY.DEV_FEATURE_FLAG) === 'true';
32+
2333
const handler = {
2434
set: (obj, prop, value) => {
2535
switch (prop) {
@@ -51,9 +61,16 @@ const handler = {
5161
renderAllGroups({
5262
cardOnClick: groupCardOnAction,
5363
});
64+
if (isDev && (!value || value.length == 0)) renderNoGroupFound();
5465
break;
5566
case 'search':
56-
if (value === '') {
67+
if (isDev) {
68+
setParamValueInURL(QUERY_PARAM_KEY.GROUP_SEARCH, value);
69+
dataStore.filteredGroupsIds = getDiscordGroupIdsFromSearch(
70+
Object.values(dataStore.groups),
71+
value,
72+
);
73+
} else if (value === '') {
5774
if (dataStore.groups == null) break;
5875
dataStore.filteredGroupsIds = Object.values(dataStore.groups).map(
5976
(group) => group.id,
@@ -107,7 +124,7 @@ const dataStore = new Proxy(
107124
userSelf: null,
108125
groups: null,
109126
filteredGroupsIds: null,
110-
search: '',
127+
search: isDev ? getParamValueFromURL(QUERY_PARAM_KEY.GROUP_SEARCH) : '',
111128
discordId: null,
112129
isCreateGroupModalOpen: false,
113130
},
@@ -171,6 +188,12 @@ const afterAuthentication = async () => {
171188
};
172189
return acc;
173190
}, {});
191+
if (isDev) {
192+
dataStore.filteredGroupsIds = getDiscordGroupIdsFromSearch(
193+
Object.values(dataStore.groups),
194+
dataStore.search,
195+
);
196+
}
174197
dataStore.discordId = roleData.userId;
175198
},
176199
);
@@ -188,6 +211,7 @@ const bindGroupCreationButton = () => {
188211

189212
const bindSearchInput = () => {
190213
const searchInput = document.querySelector('.search__input');
214+
if (isDev) searchInput.value = dataStore.search;
191215
searchInput.addEventListener('input', (e) => {
192216
dataStore.search = e.target.value;
193217
});

0 commit comments

Comments
 (0)