diff --git a/__tests__/Unit/Components/Tabs/Tab.test.tsx b/__tests__/Unit/Components/Tabs/Tab.test.tsx index de94895cc..3cf4a7cb2 100644 --- a/__tests__/Unit/Components/Tabs/Tab.test.tsx +++ b/__tests__/Unit/Components/Tabs/Tab.test.tsx @@ -32,7 +32,10 @@ describe('Tabs Component', () => { const presentTabs = screen.queryAllByRole('button'); expect(presentTabs.length).toBe( TABS.filter( - (tab) => tab != 'BLOCKED' && !newTaskStatus.includes(tab) + (tab) => + tab != Tab.BLOCKED && + tab != Tab.ASSIGNEE_ARCHIVED && + !newTaskStatus.includes(tab) ).length ); }); @@ -118,7 +121,10 @@ describe('Tabs Component', () => { ); const presentTabs = screen.getAllByRole('button'); const OLDTABS = TABS.filter( - (tab) => tab != 'BLOCKED' && !newTaskStatus.includes(tab) + (tab) => + tab != Tab.BLOCKED && + tab != Tab.ASSIGNEE_ARCHIVED && + !newTaskStatus.includes(tab) ); for (let i = 0; i < presentTabs.length; i++) { expect(presentTabs[i].textContent).toBe(changeName(OLDTABS[i])); diff --git a/__tests__/Unit/Components/Tasks/FilterModal.test.tsx b/__tests__/Unit/Components/Tasks/FilterModal.test.tsx index 06ecd5412..98875bfaa 100644 --- a/__tests__/Unit/Components/Tasks/FilterModal.test.tsx +++ b/__tests__/Unit/Components/Tasks/FilterModal.test.tsx @@ -236,4 +236,48 @@ describe('FilterModal', () => { const doneButton = screen.getByText(/done/i); expect(doneButton).not.toHaveClass('status-button-active'); }); + test('Assignee Archived Modal should be visibel in tasks page when dev=true', () => { + render( + + ); + + const assignee_archivedButton = screen.getByText(/assignee archived/i); + expect(assignee_archivedButton).toBeInTheDocument(); + }); + test('Assignee Archived should not be visible when dev!=true', () => { + render( + + ); + + expect( + screen.queryByText(/assignee archived/i) + ).not.toBeInTheDocument(); + }); + test('Clicking on Assignee Archived from filter modal should call hte onSelect function with the right props', () => { + render( + + ); + + const assignee_archivedButton = screen.getByText(/assignee archived/i); + fireEvent.click(assignee_archivedButton); + expect(mockOnSelect).toBeCalledWith(Tab.ASSIGNEE_ARCHIVED); + }); }); diff --git a/__tests__/Unit/utils/getActiveTab.test.ts b/__tests__/Unit/utils/getActiveTab.test.ts index c0bd43f21..76e0b8a18 100644 --- a/__tests__/Unit/utils/getActiveTab.test.ts +++ b/__tests__/Unit/utils/getActiveTab.test.ts @@ -13,6 +13,7 @@ describe('Unit | Util | Get Active Tab', () => { expect(getActiveTab('merged')).toEqual(Tab.MERGED); expect(getActiveTab('completed')).toEqual(Tab.COMPLETED); expect(getActiveTab('in-progress')).toEqual(Tab.IN_PROGRESS); + expect(getActiveTab('archived')).toEqual(Tab.ASSIGNEE_ARCHIVED); expect(getActiveTab('someRandomSection')).toEqual(Tab.ALL); }); diff --git a/__tests__/Utils/taskQueryParams.test.ts b/__tests__/Utils/taskQueryParams.test.ts index 28952149c..72d68a807 100644 --- a/__tests__/Utils/taskQueryParams.test.ts +++ b/__tests__/Utils/taskQueryParams.test.ts @@ -17,7 +17,14 @@ describe('extractQueryParams', () => { expect(result.assignees).toEqual(['sunny-s']); expect(result.title).toBe('Develop feature'); }); - + it('should extract assignee-role and title assignee role from query param', () => { + const queryParam = + 'assignee-role:archived assignee:sunny-s Develop feature'; + const result = extractQueryParams(queryParam); + expect(result.assignees).toEqual(['sunny-s']); + expect(result.title).toBe('Develop feature'); + expect(result.assigneeRole).toBe('archived'); + }); it('should extract status, multiple assignees, and title from query param', () => { const queryParam = 'status:in-progress assignee:sunny-s assignee:ajoy-kumar Develop feature'; @@ -42,6 +49,11 @@ describe('getQueryParamTab', () => { const result = getQueryParamTab(tab); expect(result).toBe('status:in-progress'); }); + it('should generate a query param for assignee archived tab', () => { + const tab = Tab.ASSIGNEE_ARCHIVED; + const result = getQueryParamTab(tab); + expect(result).toBe('assignee-role:archived'); + }); }); describe('getAPIQueryParamAssignee', () => { diff --git a/src/app/services/tasksApi.ts b/src/app/services/tasksApi.ts index 654a0c28a..059e727f6 100644 --- a/src/app/services/tasksApi.ts +++ b/src/app/services/tasksApi.ts @@ -20,14 +20,19 @@ export const tasksApi = api.injectEndpoints({ prevTasks, assignee, title, + assigneeRole, }) => { const baseQuery = `/tasks?size=${size}&dev=true`; let url = - !status || status === 'ALL' + !status || + status === 'ALL' || + status === 'ASSIGNEE_ARCHIVED' ? baseQuery : `${baseQuery}&status=${status}`; - + if (assigneeRole || status === 'ASSIGNEE_ARCHIVED') { + url += `&assignee-role=${assigneeRole}`; + } if (assignee) { url += `&assignee=${assignee}`; } @@ -43,7 +48,6 @@ export const tasksApi = api.injectEndpoints({ if (prevTasks) { url = prevTasks; } - return { url }; }, providesTags: ['Tasks'], diff --git a/src/components/Header/index.tsx b/src/components/Header/index.tsx index 162cda4d1..d90e4502e 100644 --- a/src/components/Header/index.tsx +++ b/src/components/Header/index.tsx @@ -40,6 +40,9 @@ export const Header = () => { router.pathname === pathName && (router.pathname === '/pull-requests' ? queryState === state + : true) && + (router.pathname === '/tasks' && dev + ? !router?.asPath?.includes('assignee-role%3A') : true) } /> @@ -53,7 +56,14 @@ export const Header = () => { key={index} title={title} link={refURL} - isActive={router.pathname === pathName} + isActive={ + router.pathname === pathName && + (router.pathname === '/tasks' + ? router?.asPath?.includes( + 'assignee-role%3A' + ) + : true) + } /> ) )} diff --git a/src/components/Tabs/index.tsx b/src/components/Tabs/index.tsx index 46e1fb567..520b73250 100644 --- a/src/components/Tabs/index.tsx +++ b/src/components/Tabs/index.tsx @@ -19,7 +19,9 @@ const Tabs = ({ dev, tabs, onSelect, activeTab }: TabsProps) => ( .filter((tab: Tab) => dev ? !depreciatedTaskStatus.includes(tab) - : tab != 'BLOCKED' && !newTaskStatus.includes(tab) + : tab != Tab.BLOCKED && + tab != Tab.ASSIGNEE_ARCHIVED && + !newTaskStatus.includes(tab) ) .map((tab: Tab) => (