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) => (