Skip to content

Commit 94cfff5

Browse files
authored
Merge pull request #923 from Real-Dev-Squad/develop
Dev to Main Sync
2 parents 095fdbb + 1ecffc5 commit 94cfff5

File tree

16 files changed

+738
-170
lines changed

16 files changed

+738
-170
lines changed

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

Lines changed: 160 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ describe('Tests the Extension Requests Screen', () => {
281281
},
282282
body: JSON.stringify(extensionRequestListForAuditLogs),
283283
});
284-
} else if (url === `${STAGING_API_URL}/users/self`) {
284+
} else if (url === `${STAGING_API_URL}/users?profile=true`) {
285285
interceptedRequest.respond({
286286
status: 200,
287287
contentType: 'application/json',
@@ -654,6 +654,165 @@ describe('Tests the Extension Requests Screen', () => {
654654
expect(hasSkeletonClassAfter).toBe(false);
655655
});
656656

657+
it('shows error messages for empty title and reason inputs on update under dev feature flag', async () => {
658+
await page.goto(`${LOCAL_TEST_PAGE_URL}/extension-requests/?dev=true`);
659+
const editButtonSelector = '[data-testid="edit-button"]';
660+
const editButton = await page.$(editButtonSelector);
661+
if (!editButton) {
662+
return;
663+
}
664+
await page.click(editButtonSelector);
665+
const updateButtonSelector = '[data-testid="update-button"]';
666+
const titleInputSelector = '[data-testid="title-text-input"]';
667+
const reasonInputSelector = '[data-testid="reason-input-text-area"]';
668+
const titleErrorSelector = '[data-testid="title-input-error"]';
669+
const reasonErrorSelector = '[data-testid="reason-input-error"]';
670+
671+
await page.evaluate((selector) => {
672+
const element = document.querySelector(selector);
673+
if (element) element.value = '';
674+
}, titleInputSelector);
675+
676+
await page.evaluate((selector) => {
677+
const element = document.querySelector(selector);
678+
if (element) element.value = '';
679+
}, reasonInputSelector);
680+
681+
await page.click(updateButtonSelector);
682+
683+
const isTitleErrorVisible = await page
684+
.$eval(titleErrorSelector, (el) => el && !el.classList.contains('hidden'))
685+
.catch(() => false);
686+
687+
const isReasonErrorVisible = await page
688+
.$eval(
689+
reasonErrorSelector,
690+
(el) => el && !el.classList.contains('hidden'),
691+
)
692+
.catch(() => false);
693+
expect(isTitleErrorVisible).toBe(true);
694+
expect(isReasonErrorVisible).toBe(true);
695+
});
696+
697+
it('shows error message if deadline is set to past date under dev feature flag', async () => {
698+
await page.goto(`${LOCAL_TEST_PAGE_URL}/extension-requests/?dev=true`);
699+
const editButtonSelector = '[data-testid="edit-button"]';
700+
const editButton = await page.$(editButtonSelector);
701+
if (!editButton) {
702+
return;
703+
}
704+
705+
await page.click(editButtonSelector);
706+
707+
const extensionInputSelector = '[data-testid="extension-input"]';
708+
const extensionErrorSelector = '[data-testid="extension-input-error"]';
709+
await page.$eval(extensionInputSelector, (input) => {
710+
input.value = '2020-01-01';
711+
});
712+
await page.click('[data-testid="update-button"]');
713+
const isExtensionErrorVisible = await page.$eval(
714+
extensionErrorSelector,
715+
(el) =>
716+
!el.classList.contains('hidden') &&
717+
el.innerText.includes("Past date can't be the new deadline"),
718+
);
719+
expect(isExtensionErrorVisible).toBe(true);
720+
});
721+
722+
it('hides edit button and displays update wrapper on successful update under dev feature flag', async () => {
723+
await page.goto(`${LOCAL_TEST_PAGE_URL}/extension-requests/?dev=true`);
724+
const editButtonSelector = '[data-testid="edit-button"]';
725+
const editButton = await page.$(editButtonSelector);
726+
if (!editButton) {
727+
return;
728+
}
729+
730+
await page.click(editButtonSelector);
731+
732+
const updateButtonSelector = '[data-testid="update-button"]';
733+
const updateWrapperSelector = '[data-testid="update-wrapper"]';
734+
735+
await page.type('[data-testid="title-text-input"]', 'Valid Title');
736+
await page.type('[data-testid="reason-input-text-area"]', 'Valid Reason');
737+
await page.type('[data-testid="extension-input"]', '2050-01-01');
738+
739+
await page.click(updateButtonSelector);
740+
741+
const isEditButtonHidden = await page.$eval(editButtonSelector, (el) =>
742+
el.classList.contains('hidden'),
743+
);
744+
const isUpdateWrapperVisible = await page.$eval(
745+
updateWrapperSelector,
746+
(el) => !el.classList.contains('hidden'),
747+
);
748+
expect(isEditButtonHidden).toBe(true);
749+
expect(isUpdateWrapperVisible).toBe(true);
750+
});
751+
752+
it('handles long title and long reason properly under dev feature flag', async () => {
753+
await page.goto(`${LOCAL_TEST_PAGE_URL}/extension-requests/?dev=true`);
754+
755+
const editButtonSelector = '[data-testid="edit-button"]';
756+
const titleInputSelector = '[data-testid="title-text-input"]';
757+
const reasonInputSelector = '[data-testid="reason-input-text-area"]';
758+
const titleDisplaySelector = '.title-text';
759+
const reasonDisplaySelector = '.reason-text';
760+
761+
const longTitle = 'A'.repeat(300);
762+
const longReason = 'This is a very long reason '.repeat(50);
763+
764+
const editButton = await page.$(editButtonSelector);
765+
if (!editButton) {
766+
return;
767+
}
768+
await page.click(editButtonSelector);
769+
770+
await page.type(titleInputSelector, longTitle);
771+
await page.type(reasonInputSelector, longReason);
772+
773+
const isTitleTruncated = await page.$eval(
774+
titleDisplaySelector,
775+
(el) => window.getComputedStyle(el).textOverflow === 'ellipsis',
776+
);
777+
778+
const isReasonWrapped = await page.$eval(
779+
reasonDisplaySelector,
780+
(el) => window.getComputedStyle(el).whiteSpace === 'normal',
781+
);
782+
783+
expect(isTitleTruncated).toBe(true);
784+
expect(isReasonWrapped).toBe(true);
785+
});
786+
787+
it('displays an error message for invalid date format under dev feature flag', async () => {
788+
await page.goto(`${LOCAL_TEST_PAGE_URL}/extension-requests/?dev=true`);
789+
790+
const editButtonSelector = '[data-testid="edit-button"]';
791+
const editButton = await page.$(editButtonSelector);
792+
if (!editButton) {
793+
return;
794+
}
795+
796+
await page.click(editButtonSelector);
797+
798+
const extensionInputSelector = '[data-testid="extension-input"]';
799+
const extensionErrorSelector = '[data-testid="extension-input-error"]';
800+
801+
await page.$eval(extensionInputSelector, (input) => {
802+
input.value = 'invalid-date';
803+
});
804+
await page.click('[data-testid="update-button"]');
805+
806+
const isExtensionErrorVisible = await page.$eval(
807+
extensionErrorSelector,
808+
(el) =>
809+
!el.classList.contains('hidden') &&
810+
el.innerText.includes('Invalid date format.'),
811+
);
812+
813+
expect(isExtensionErrorVisible).toBe(true);
814+
});
815+
657816
it('Checks whether the card is not removed from display when api call is unsuccessful', async () => {
658817
const extensionCards = await page.$$('.extension-card');
659818

__tests__/groups/group.test.js

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ describe('Discord Groups Page', () => {
313313

314314
test('Should display delete button for super users', async () => {
315315
setSuperUserPermission();
316-
await page.goto(`${LOCAL_TEST_PAGE_URL}/groups?dev=true`);
316+
await page.goto(`${LOCAL_TEST_PAGE_URL}/groups`);
317317
await page.waitForNetworkIdle();
318318
await page.waitForTimeout(1000);
319319

@@ -325,15 +325,6 @@ describe('Discord Groups Page', () => {
325325

326326
test('Should not display delete button when user is normal user', async () => {
327327
resetUserPermission();
328-
await page.goto(`${LOCAL_TEST_PAGE_URL}/groups?dev=true`);
329-
await page.waitForNetworkIdle();
330-
331-
const deleteButtons = await page.$$('.delete-group');
332-
expect(deleteButtons.length).toBe(0);
333-
});
334-
335-
test('Should not display delete button when dev=false', async () => {
336-
setSuperUserPermission();
337328
await page.goto(`${LOCAL_TEST_PAGE_URL}/groups`);
338329
await page.waitForNetworkIdle();
339330

@@ -343,7 +334,7 @@ describe('Discord Groups Page', () => {
343334

344335
test('Should display delete confirmation modal on click of delete button', async () => {
345336
setSuperUserPermission();
346-
await page.goto(`${LOCAL_TEST_PAGE_URL}/groups?dev=true`);
337+
await page.goto(`${LOCAL_TEST_PAGE_URL}/groups`);
347338
await page.waitForNetworkIdle();
348339
await page.waitForTimeout(1000);
349340

@@ -359,7 +350,7 @@ describe('Discord Groups Page', () => {
359350

360351
test('Should close delete confirmation modal when cancel button is clicked', async () => {
361352
setSuperUserPermission();
362-
await page.goto(`${LOCAL_TEST_PAGE_URL}/groups?dev=true`);
353+
await page.goto(`${LOCAL_TEST_PAGE_URL}/groups`);
363354
await page.waitForNetworkIdle();
364355
await page.waitForTimeout(1000);
365356

@@ -372,4 +363,25 @@ describe('Discord Groups Page', () => {
372363
const modalClosed = await page.$('.delete-confirmation-modal');
373364
expect(modalClosed).toBeFalsy();
374365
});
366+
367+
test('Should render loader when deleting a group', async () => {
368+
setSuperUserPermission();
369+
await page.goto(`${LOCAL_TEST_PAGE_URL}/groups`);
370+
await page.waitForNetworkIdle();
371+
await page.waitForTimeout(1000);
372+
373+
const deleteButton = await page.$('.delete-group');
374+
await deleteButton.click();
375+
376+
const confirmButton = await page.waitForSelector('#confirm-delete');
377+
confirmButton.click();
378+
379+
const loader = await page.waitForSelector('.loader');
380+
expect(loader).toBeTruthy();
381+
382+
await page.waitForTimeout(1000);
383+
384+
const loaderAfter = await page.$('.loader');
385+
expect(loaderAfter).toBeFalsy();
386+
});
375387
});

0 commit comments

Comments
 (0)