Skip to content

Commit 8fa2e86

Browse files
Adds query params to extension requests page url (#666)
1 parent 178af5b commit 8fa2e86

File tree

4 files changed

+276
-35
lines changed

4 files changed

+276
-35
lines changed

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

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const {
2121
} = require('../../mock-data/users');
2222
const { usersStatus } = require('../../mock-data/users-status');
2323
const { taskDone, auditLogTasks } = require('../../mock-data/tasks/index');
24-
24+
const baseUrl = 'http://localhost:8000/extension-requests';
2525
describe('Tests the Extension Requests Screen', () => {
2626
let browser;
2727
let page;
@@ -46,7 +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=asc&size=5&q=status%3APENDING' ||
50+
url ===
51+
'https://api.realdevsquad.com/extension-requests?dev=true&order=asc'
5052
) {
5153
interceptedRequest.respond({
5254
status: 200,
@@ -109,6 +111,19 @@ describe('Tests the Extension Requests Screen', () => {
109111
},
110112
body: JSON.stringify(userSunny),
111113
});
114+
} else if (
115+
url === 'https://api.realdevsquad.com/users?search=randhir&size=1'
116+
) {
117+
interceptedRequest.respond({
118+
status: 200,
119+
contentType: 'application/json',
120+
headers: {
121+
'Access-Control-Allow-Origin': '*',
122+
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
123+
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
124+
},
125+
body: JSON.stringify(userRandhir),
126+
});
112127
} else if (
113128
url ===
114129
'https://api.realdevsquad.com/tasks/PYj79ki2agB0q5JN3kUf/details'
@@ -263,7 +278,9 @@ describe('Tests the Extension Requests Screen', () => {
263278
});
264279
} else if (
265280
url ===
266-
'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3AAPPROVED%2BPENDING%2BDENIED'
281+
'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3AAPPROVED%2BPENDING%2BDENIED' ||
282+
url ===
283+
'https://api.realdevsquad.com/extension-requests?dev=true&order=asc&q=status%3AAPPROVED%2BDENIED'
267284
) {
268285
interceptedRequest.respond({
269286
status: 200,
@@ -327,12 +344,26 @@ describe('Tests the Extension Requests Screen', () => {
327344
},
328345
body: JSON.stringify(extensionRequestLogs['lw7dRB0I3a6ivsFR5Izs']),
329346
});
347+
} else if (
348+
url ===
349+
'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3AAPPROVED%2Cassignee%3AiODXB6gfsjaZB9p0XlBw%2B7yzVDl8s1ORNCtH9Ps7K'
350+
) {
351+
interceptedRequest.respond({
352+
status: 200,
353+
contentType: 'application/json',
354+
headers: {
355+
'Access-Control-Allow-Origin': '*',
356+
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
357+
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
358+
},
359+
body: JSON.stringify(extensionRequestsListUserSearch),
360+
});
330361
} else {
331362
interceptedRequest.continue();
332363
}
333364
});
334365

335-
await page.goto('http://localhost:8000/extension-requests');
366+
await page.goto(baseUrl);
336367

337368
await page.waitForNetworkIdle();
338369

@@ -799,7 +830,7 @@ describe('Tests the Extension Requests Screen', () => {
799830
const cardNumber1Value = await extensionRequestNumberContainer[1].evaluate(
800831
(node) => node.textContent,
801832
);
802-
expect(cardNumber1Value).toBe('5');
833+
expect(cardNumber1Value).toBe('#5');
803834
});
804835

805836
test('Default Request Number to 1 if requestNumber field is missing in API Response', async () => {
@@ -816,7 +847,7 @@ describe('Tests the Extension Requests Screen', () => {
816847
const cardNumber2Value = await extensionRequestNumberContainer[3].evaluate(
817848
(node) => node.textContent,
818849
);
819-
expect(cardNumber2Value).toBe('1');
850+
expect(cardNumber2Value).toBe('#1');
820851
});
821852

822853
it('Validating if audit logs are being generated in realtime', async () => {
@@ -874,4 +905,41 @@ describe('Tests the Extension Requests Screen', () => {
874905
logs = await extensionLogsForFirstER.$$('.log-div');
875906
expect(Array.from(logs).length).toBe(9);
876907
});
908+
909+
it('Should update page url when filters and usernames are changed', async () => {
910+
await page.click('#filter-button');
911+
await page.click('input[value="PENDING"]');
912+
await page.click('input[value="APPROVED"]');
913+
await page.click('#apply-filter-button');
914+
await page.type('#assignee-search', 'sunny,randhir');
915+
await page.keyboard.press('Enter');
916+
await page.waitForNetworkIdle();
917+
const url = page.url();
918+
expect(url).toBe(
919+
`${baseUrl}?order=asc&size=5&q=status%3AAPPROVED%2Cassignee%3Asunny%2Brandhir`,
920+
);
921+
});
922+
it('Should have UI elements in sync with url', async () => {
923+
await page.goto(
924+
`${baseUrl}/?order=asc&size=5&q=status%3AAPPROVED%2Cassignee%3Asunny%2Brandhir`,
925+
);
926+
const filterButton = await page.$('#filter-button');
927+
await filterButton.click();
928+
await page.waitForSelector('.filter-modal');
929+
const approvedFilter = await page.$('input[value="APPROVED"]');
930+
const currentState = await approvedFilter.getProperty('checked');
931+
const isApprovedChecked = await currentState.jsonValue();
932+
expect(isApprovedChecked).toBe(true);
933+
const searchText = await page.$eval(
934+
'#assignee-search',
935+
(input) => input.value,
936+
);
937+
expect(searchText).toBe('sunny,randhir');
938+
await page.waitForSelector('.sort-button');
939+
const ascSortIconDisplayStyle = await page.$eval(
940+
'#asc-sort-icon',
941+
(icon) => window.getComputedStyle(icon).display,
942+
);
943+
expect(ascSortIconDisplayStyle).toBe('block');
944+
});
877945
});

extension-requests/local-utils.js

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ const generateExtensionRequestParams = (nextPageParams) => {
4747
if (searchQueries.includes(key)) {
4848
let queryString;
4949
if (Array.isArray(value)) {
50-
queryString = key + ':' + value.join('+');
50+
if (value.length) queryString = key + ':' + value.join('+');
5151
} else {
5252
queryString = key + ':' + value;
5353
}
54-
queryStringList.push(queryString);
54+
if (queryString) queryStringList.push(queryString);
5555
} else {
5656
urlSearchParams.append(key, value);
5757
}
@@ -62,6 +62,47 @@ const generateExtensionRequestParams = (nextPageParams) => {
6262
const uri = `/extension-requests?${urlSearchParams.toString()}`;
6363
return uri;
6464
};
65+
66+
/**
67+
* Parses the query parameters from a URL and stores them in the provided object.
68+
*
69+
* @param {string} uri - The URI string containing the query parameters.
70+
* @param {Object} nextPageParamsObject - The object in which the parsed parameters will be stored.
71+
* @returns {Object} The updated `nextPageParamsObject` containing the parsed parameters.
72+
*
73+
* @example
74+
* let params = {};
75+
* parseExtensionRequestParams("/?order=asc&size=5&q=status:APPROVED,assignee:sunny+randhir", params);
76+
* // params will be updated to:
77+
* // {
78+
* // order: "asc",
79+
* // size: "5",
80+
* // status: "APPROVED",
81+
* // assignee: ["sunny", "randhir"]
82+
* // }
83+
*/
84+
const parseExtensionRequestParams = (uri, nextPageParamsObject) => {
85+
const urlSearchParams = new URLSearchParams(uri);
86+
87+
for (const [key, value] of urlSearchParams.entries()) {
88+
if (key === 'q') {
89+
const searchQueries = value.split(',');
90+
searchQueries.forEach((query) => {
91+
if (!query) return;
92+
const [queryKey, queryValue] = query.split(':');
93+
if (queryValue?.includes('+')) {
94+
nextPageParamsObject[queryKey] = queryValue.split('+');
95+
} else if (queryValue) {
96+
nextPageParamsObject[queryKey] = queryValue;
97+
}
98+
});
99+
} else {
100+
nextPageParamsObject[key] = value;
101+
}
102+
}
103+
return nextPageParamsObject;
104+
};
105+
65106
async function updateExtensionRequest({ id, body, isDev = false }) {
66107
const url = `${API_BASE_URL}/extension-requests/${id}${
67108
isDev ? `?dev=true` : ''

0 commit comments

Comments
 (0)