diff --git a/__tests__/extension-requests/extension-requests.test.js b/__tests__/extension-requests/extension-requests.test.js index f395ae4f..1f098824 100644 --- a/__tests__/extension-requests/extension-requests.test.js +++ b/__tests__/extension-requests/extension-requests.test.js @@ -7,6 +7,7 @@ const { extensionRequestsListPendingAscending, extensionRequestsListUserSearch, extensionRequestListForAuditLogs, + extensionRequestsTaskCompleted, } = require('../../mock-data/extension-requests'); const { extensionRequestLogs, @@ -20,7 +21,11 @@ const { searchedUserForAuditLogs, } = require('../../mock-data/users'); const { usersStatus } = require('../../mock-data/users-status'); -const { taskDone, auditLogTasks } = require('../../mock-data/tasks/index'); +const { + taskDone, + auditLogTasks, + taskCompleted, +} = require('../../mock-data/tasks/index'); const { STAGING_API_URL, LOCAL_TEST_PAGE_URL, @@ -135,6 +140,19 @@ describe('Tests the Extension Requests Screen', () => { }, body: JSON.stringify(taskDone), }); + } else if ( + url === `${STAGING_API_URL}/tasks/KYj79ki2agB0q5JN3kUf/details` + ) { + interceptedRequest.respond({ + status: 200, + contentType: 'application/json', + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', + 'Access-Control-Allow-Headers': 'Content-Type, Authorization', + }, + body: JSON.stringify(taskCompleted), + }); } else if ( url === `${STAGING_API_URL}/tasks/GCYGDiU0lw4fwc3qljSY/details` ) { @@ -360,6 +378,22 @@ describe('Tests the Extension Requests Screen', () => { }, body: JSON.stringify(extensionRequestsListUserSearch), }); + } else if ( + url === + `${STAGING_API_URL}/extension-requests?order=desc&q=taskId%3AKYj79ki2agB0q5JN3kUf%2Cstatus%3APENDING` || + url === + `${STAGING_API_URL}/extension-requests?order=desc&dev=true&q=taskId%3AKYj79ki2agB0q5JN3kUf%2Cstatus%3APENDING` + ) { + interceptedRequest.respond({ + status: 200, + contentType: 'application/json', + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', + 'Access-Control-Allow-Headers': 'Content-Type, Authorization', + }, + body: JSON.stringify(extensionRequestsTaskCompleted), + }); } else if ( url === `${STAGING_API_URL}/extension-requests?order=desc&size=1&q=status%3APENDING` || @@ -1277,4 +1311,48 @@ describe('Tests the Extension Requests Screen', () => { expect(extensionCardsAfter.length).toBe(0); }); + + it('should display the task status as "DONE" when task data status is "COMPLETED"', async () => { + await page.goto( + `${LOCAL_TEST_PAGE_URL}/extension-requests?order=desc&q=taskId%3AKYj79ki2agB0q5JN3kUf%2Cstatus%3APENDING`, + ); + await page.waitForNetworkIdle(); + + const extensionCard = await page.$('.extension-card'); + expect(extensionCard).not.toBeNull(); + const statusText = await extensionCard.$eval( + '.task-details-container', + (el) => { + const spans = Array.from(el.querySelectorAll('span')); + const statusSpan = spans.find((span) => + span.previousSibling?.textContent?.includes('Task status'), + ); + return statusSpan?.textContent?.trim(); + }, + ); + + expect(statusText).toBe('DONE'); + }); + + it('should display the task status as "DONE" when task data status is "COMPLETED" for dev flag', async () => { + await page.goto( + `${LOCAL_TEST_PAGE_URL}/extension-requests?order=desc&dev=true&q=taskId%3AKYj79ki2agB0q5JN3kUf%2Cstatus%3APENDING`, + ); + await page.waitForNetworkIdle(); + + const extensionCard = await page.$('.request-card'); + expect(extensionCard).not.toBeNull(); + const statusText = await extensionCard.$eval( + '.task-details-container', + (el) => { + const spans = Array.from(el.querySelectorAll('span')); + const statusSpan = spans.find((span) => + span.previousSibling?.textContent?.includes('Task status'), + ); + return statusSpan?.textContent?.trim(); + }, + ); + + expect(statusText).toBe('DONE'); + }); }); diff --git a/__tests__/task-requests/task-requestDetails.test.js b/__tests__/task-requests/task-requestDetails.test.js index 7bc4a75a..6062188c 100644 --- a/__tests__/task-requests/task-requestDetails.test.js +++ b/__tests__/task-requests/task-requestDetails.test.js @@ -423,6 +423,9 @@ describe('Task request details page with status creation', () => { const approveButton = await page.$('[data-testid="task-approve-button"]'); await approveButton.click(); + await page.waitForSelector('[data-testid="toast-component"]', { + visible: true, + }); const toastComponent = await page.$('[data-testid="toast-component"]'); expect( await toastComponent.evaluate((el) => el.classList.contains('show')), diff --git a/components/request-card/script.js b/components/request-card/script.js index b4ac99f0..677e64c7 100644 --- a/components/request-card/script.js +++ b/components/request-card/script.js @@ -389,7 +389,10 @@ async function createRequestCardComponent({ fetchTaskDetailsPromise.then(({ taskData }) => { if (taskData) { - const taskStatus = taskData?.status?.replaceAll('_', ' '); + let taskStatus = taskData?.status?.replaceAll('_', ' '); + if (taskStatus === 'COMPLETED') { + taskStatus = 'DONE'; + } statusSiteLink.href = `${STATUS_BASE_URL}/tasks/${data.taskId}`; statusSiteLink.innerText = taskData.title; statusSiteLink.classList.remove('skeleton-link'); diff --git a/extension-requests/script.js b/extension-requests/script.js index a6063d41..c59a3944 100644 --- a/extension-requests/script.js +++ b/extension-requests/script.js @@ -1431,7 +1431,10 @@ async function createExtensionCard(data, dev) { const [{ taskData }, userData] = response; const userImage = userData?.picture?.url ?? DEFAULT_AVATAR; let userFirstName = userData?.first_name ?? data.assignee; - const taskStatus = taskData?.status?.replaceAll('_', ' '); + let taskStatus = taskData?.status?.replaceAll('_', ' '); + if (taskStatus === 'COMPLETED') { + taskStatus = 'DONE'; + } const userId = userData?.id; const userStatus = userStatusMap.get(userId); const comittedHours = userStatus?.monthlyHours?.comitted; diff --git a/mock-data/extension-requests/index.js b/mock-data/extension-requests/index.js index 0b20591f..60f0e7f6 100644 --- a/mock-data/extension-requests/index.js +++ b/mock-data/extension-requests/index.js @@ -218,6 +218,24 @@ const extensionRequestListForAuditLogs = { ], }; +const extensionRequestsTaskCompleted = { + message: 'Extension Requests returned successfully!', + allExtensionRequests: [ + { + assignee: 'anuj', + id: 'QISvF7kAmnD9vXHwwIsG', + newEndsOn: 1690528980, + oldEndsOn: 1689954609.948, + reason: 'test reason', + status: 'APPROVED', + taskId: 'KYj79ki2agB0q5JN3kUf', + timestamp: 1689233034, + title: 'test title', + }, + ], + next: '', +}; + module.exports = { extensionRequestsList, extensionRequestsListApproved, @@ -226,4 +244,5 @@ module.exports = { extensionRequestsListPendingAscending, extensionRequestsListUserSearch, extensionRequestListForAuditLogs, + extensionRequestsTaskCompleted, }; diff --git a/mock-data/tasks/index.js b/mock-data/tasks/index.js index 8dc2ab8e..d573207c 100644 --- a/mock-data/tasks/index.js +++ b/mock-data/tasks/index.js @@ -91,8 +91,35 @@ const auditLogTasks = { }, }; +const taskCompleted = { + message: 'task returned successfully', + taskData: { + percentCompleted: 100, + endsOn: 1692149100, + isNoteworthy: false, + createdBy: 'ajeyak', + lossRate: { + dinero: 100, + neelam: 0, + }, + assignee: 'ajeyak', + title: 'A Task', + type: 'feature', + priority: 'HIGH', + completionAward: { + dinero: 1000, + neelam: 0, + }, + startedOn: 1690429785.762, + status: 'COMPLETED', + assigneeId: 'eChYAP0kUwLo4wQ1gqMV', + dependsOn: [], + }, +}; + module.exports = { taskDone, taskVerified, auditLogTasks, + taskCompleted, };