Skip to content

Commit 5ed9b13

Browse files
authored
Merge pull request #1020 from Real-Dev-Squad/develop
dev to main sync
2 parents b357684 + 6e2877e commit 5ed9b13

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1843
-262
lines changed

__mocks__/handlers/task-request.handler.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import { rest } from 'msw';
33
const URL = process.env.NEXT_PUBLIC_BASE_URL;
44

55
export const taskRequestSuccessHandlers = [
6-
rest.post(`${URL}/taskRequests/addOrUpdate`, (_, res, ctx) => {
6+
rest.post(`${URL}/taskRequests`, (_, res, ctx) => {
77
return res(ctx.status(201), ctx.json({ message: 'Task request successfully created' }));
88
}),
99
];
1010

1111
export const taskRequestErrorHandler = [
12-
rest.post(`${URL}/taskRequests/addOrUpdate`, (_, res, ctx) => {
12+
rest.post(`${URL}/taskRequests`, (_, res, ctx) => {
1313
return res(
1414
ctx.status(409),
1515
ctx.json({ message: 'taskId not provided' })

__tests__/Unit/Components/Header/Header.test.tsx

Lines changed: 8 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ describe('Header without dev mode', () => {
8989
it('should have Open PRs category', () => {
9090
useRouter.mockImplementation(() => {
9191
return {
92-
pathname: '/openPRs',
93-
query: {},
92+
pathname: '/pull-requests',
93+
query: { state: 'open' },
9494
};
9595
});
9696
render(<Header />);
@@ -116,8 +116,8 @@ describe('Header without dev mode', () => {
116116
it('should have Stale PRs category', () => {
117117
useRouter.mockImplementation(() => {
118118
return {
119-
pathname: '/stale-pr',
120-
query: {},
119+
pathname: '/pull-requests',
120+
query: { state: 'stale' },
121121
};
122122
});
123123
render(<Header />);
@@ -239,8 +239,6 @@ describe('Header with dev mode', () => {
239239
const idleUsersElement = screen.getByText('Idle Users');
240240
const standupElement = screen.getByText('Standup');
241241
const availabilityElement = screen.getByText('Availability Panel');
242-
const openPRDevElement = screen.getByText('Open PRs(dev)');
243-
const stalePRDevElement = screen.getByText('Stale PRs(dev)');
244242

245243
expect(taskElement.classList.contains('active')).toBeTruthy();
246244
expect(issueElement.classList.contains('active')).toBeFalsy();
@@ -250,8 +248,6 @@ describe('Header with dev mode', () => {
250248
expect(idleUsersElement.classList.contains('active')).toBeFalsy();
251249
expect(standupElement.classList.contains('active')).toBeFalsy();
252250
expect(availabilityElement.classList.contains('active')).toBeFalsy();
253-
expect(openPRDevElement.classList.contains('active')).toBeFalsy();
254-
expect(stalePRDevElement.classList.contains('active')).toBeFalsy();
255251
});
256252

257253
it('should have Issues category', () => {
@@ -270,8 +266,6 @@ describe('Header with dev mode', () => {
270266
const idleUsersElement = screen.getByText('Idle Users');
271267
const standupElement = screen.getByText('Standup');
272268
const availabilityElement = screen.getByText('Availability Panel');
273-
const openPRDevElement = screen.getByText('Open PRs(dev)');
274-
const stalePRDevElement = screen.getByText('Stale PRs(dev)');
275269

276270
expect(taskElement.classList.contains('active')).toBeFalsy();
277271
expect(issueElement.classList.contains('active')).toBeTruthy();
@@ -281,8 +275,6 @@ describe('Header with dev mode', () => {
281275
expect(idleUsersElement.classList.contains('active')).toBeFalsy();
282276
expect(standupElement.classList.contains('active')).toBeFalsy();
283277
expect(availabilityElement.classList.contains('active')).toBeFalsy();
284-
expect(openPRDevElement.classList.contains('active')).toBeFalsy();
285-
expect(stalePRDevElement.classList.contains('active')).toBeFalsy();
286278
});
287279

288280
it('should have Mine category', () => {
@@ -301,8 +293,6 @@ describe('Header with dev mode', () => {
301293
const idleUsersElement = screen.getByText('Idle Users');
302294
const standupElement = screen.getByText('Standup');
303295
const availabilityElement = screen.getByText('Availability Panel');
304-
const openPRDevElement = screen.getByText('Open PRs(dev)');
305-
const stalePRDevElement = screen.getByText('Stale PRs(dev)');
306296

307297
expect(taskElement.classList.contains('active')).toBeFalsy();
308298
expect(issueElement.classList.contains('active')).toBeFalsy();
@@ -312,15 +302,13 @@ describe('Header with dev mode', () => {
312302
expect(idleUsersElement.classList.contains('active')).toBeFalsy();
313303
expect(standupElement.classList.contains('active')).toBeFalsy();
314304
expect(availabilityElement.classList.contains('active')).toBeFalsy();
315-
expect(openPRDevElement.classList.contains('active')).toBeFalsy();
316-
expect(stalePRDevElement.classList.contains('active')).toBeFalsy();
317305
});
318306

319307
it('should have Open PRs category', () => {
320308
useRouter.mockImplementation(() => {
321309
return {
322-
pathname: '/openPRs',
323-
query: { dev: true },
310+
pathname: '/pull-requests',
311+
query: { state: 'open', dev: true },
324312
};
325313
});
326314
render(<Header />);
@@ -332,8 +320,6 @@ describe('Header with dev mode', () => {
332320
const idleUsersElement = screen.getByText('Idle Users');
333321
const standupElement = screen.getByText('Standup');
334322
const availabilityElement = screen.getByText('Availability Panel');
335-
const openPRDevElement = screen.getByText('Open PRs(dev)');
336-
const stalePRDevElement = screen.getByText('Stale PRs(dev)');
337323

338324
expect(taskElement.classList.contains('active')).toBeFalsy();
339325
expect(issueElement.classList.contains('active')).toBeFalsy();
@@ -343,15 +329,13 @@ describe('Header with dev mode', () => {
343329
expect(idleUsersElement.classList.contains('active')).toBeFalsy();
344330
expect(standupElement.classList.contains('active')).toBeFalsy();
345331
expect(availabilityElement.classList.contains('active')).toBeFalsy();
346-
expect(openPRDevElement.classList.contains('active')).toBeFalsy();
347-
expect(stalePRDevElement.classList.contains('active')).toBeFalsy();
348332
});
349333

350334
it('should have Stale PRs category', () => {
351335
useRouter.mockImplementation(() => {
352336
return {
353-
pathname: '/stale-pr',
354-
query: { dev: true },
337+
pathname: '/pull-requests',
338+
query: { state: 'stale', dev: true },
355339
};
356340
});
357341
render(<Header />);
@@ -363,8 +347,6 @@ describe('Header with dev mode', () => {
363347
const idleUsersElement = screen.getByText('Idle Users');
364348
const standupElement = screen.getByText('Standup');
365349
const availabilityElement = screen.getByText('Availability Panel');
366-
const openPRDevElement = screen.getByText('Open PRs(dev)');
367-
const stalePRDevElement = screen.getByText('Stale PRs(dev)');
368350

369351
expect(taskElement.classList.contains('active')).toBeFalsy();
370352
expect(issueElement.classList.contains('active')).toBeFalsy();
@@ -374,8 +356,6 @@ describe('Header with dev mode', () => {
374356
expect(idleUsersElement.classList.contains('active')).toBeFalsy();
375357
expect(standupElement.classList.contains('active')).toBeFalsy();
376358
expect(availabilityElement.classList.contains('active')).toBeFalsy();
377-
expect(openPRDevElement.classList.contains('active')).toBeFalsy();
378-
expect(stalePRDevElement.classList.contains('active')).toBeFalsy();
379359
});
380360

381361
it('should have Idle Users category', () => {
@@ -394,8 +374,6 @@ describe('Header with dev mode', () => {
394374
const idleUsersElement = screen.getByText('Idle Users');
395375
const standupElement = screen.getByText('Standup');
396376
const availabilityElement = screen.getByText('Availability Panel');
397-
const openPRDevElement = screen.getByText('Open PRs(dev)');
398-
const stalePRDevElement = screen.getByText('Stale PRs(dev)');
399377

400378
expect(taskElement.classList.contains('active')).toBeFalsy();
401379
expect(issueElement.classList.contains('active')).toBeFalsy();
@@ -405,8 +383,6 @@ describe('Header with dev mode', () => {
405383
expect(idleUsersElement.classList.contains('active')).toBeTruthy();
406384
expect(standupElement.classList.contains('active')).toBeFalsy();
407385
expect(availabilityElement.classList.contains('active')).toBeFalsy();
408-
expect(openPRDevElement.classList.contains('active')).toBeFalsy();
409-
expect(stalePRDevElement.classList.contains('active')).toBeFalsy();
410386
});
411387

412388
it('should have Standup category', () => {
@@ -425,8 +401,6 @@ describe('Header with dev mode', () => {
425401
const idleUsersElement = screen.getByText('Idle Users');
426402
const standupElement = screen.getByText('Standup');
427403
const availabilityElement = screen.getByText('Availability Panel');
428-
const openPRDevElement = screen.getByText('Open PRs(dev)');
429-
const stalePRDevElement = screen.getByText('Stale PRs(dev)');
430404

431405
expect(taskElement.classList.contains('active')).toBeFalsy();
432406
expect(issueElement.classList.contains('active')).toBeFalsy();
@@ -436,8 +410,6 @@ describe('Header with dev mode', () => {
436410
expect(idleUsersElement.classList.contains('active')).toBeFalsy();
437411
expect(standupElement.classList.contains('active')).toBeTruthy();
438412
expect(availabilityElement.classList.contains('active')).toBeFalsy();
439-
expect(openPRDevElement.classList.contains('active')).toBeFalsy();
440-
expect(stalePRDevElement.classList.contains('active')).toBeFalsy();
441413
});
442414

443415
it('should have Availability Panel category', () => {
@@ -456,8 +428,6 @@ describe('Header with dev mode', () => {
456428
const idleUsersElement = screen.getByText('Idle Users');
457429
const standupElement = screen.getByText('Standup');
458430
const availabilityElement = screen.getByText('Availability Panel');
459-
const openPRDevElement = screen.getByText('Open PRs(dev)');
460-
const stalePRDevElement = screen.getByText('Stale PRs(dev)');
461431

462432
expect(taskElement.classList.contains('active')).toBeFalsy();
463433
expect(issueElement.classList.contains('active')).toBeFalsy();
@@ -467,69 +437,5 @@ describe('Header with dev mode', () => {
467437
expect(idleUsersElement.classList.contains('active')).toBeFalsy();
468438
expect(standupElement.classList.contains('active')).toBeFalsy();
469439
expect(availabilityElement.classList.contains('active')).toBeTruthy();
470-
expect(openPRDevElement.classList.contains('active')).toBeFalsy();
471-
expect(stalePRDevElement.classList.contains('active')).toBeFalsy();
472-
});
473-
474-
it('should have Open PRs Dev category', () => {
475-
useRouter.mockImplementation(() => {
476-
return {
477-
pathname: '/pull-requests',
478-
query: { state: 'open', dev: true },
479-
};
480-
});
481-
render(<Header />);
482-
const taskElement = screen.getByText('Tasks');
483-
const issueElement = screen.getByText('Issues');
484-
const mineElement = screen.getByText('Mine');
485-
const openPRElement = screen.getByText('Open PRs');
486-
const stalePRElement = screen.getByText('Stale PRs');
487-
const idleUsersElement = screen.getByText('Idle Users');
488-
const standupElement = screen.getByText('Standup');
489-
const availabilityElement = screen.getByText('Availability Panel');
490-
const openPRDevElement = screen.getByText('Open PRs(dev)');
491-
const stalePRDevElement = screen.getByText('Stale PRs(dev)');
492-
493-
expect(taskElement.classList.contains('active')).toBeFalsy();
494-
expect(issueElement.classList.contains('active')).toBeFalsy();
495-
expect(mineElement.classList.contains('active')).toBeFalsy();
496-
expect(openPRElement.classList.contains('active')).toBeFalsy();
497-
expect(stalePRElement.classList.contains('active')).toBeFalsy();
498-
expect(idleUsersElement.classList.contains('active')).toBeFalsy();
499-
expect(standupElement.classList.contains('active')).toBeFalsy();
500-
expect(availabilityElement.classList.contains('active')).toBeFalsy();
501-
expect(openPRDevElement.classList.contains('active')).toBeTruthy();
502-
expect(stalePRDevElement.classList.contains('active')).toBeFalsy();
503-
});
504-
505-
it('should have Stale PRs Dev category', () => {
506-
useRouter.mockImplementation(() => {
507-
return {
508-
pathname: '/pull-requests',
509-
query: { state: 'stale', dev: true },
510-
};
511-
});
512-
render(<Header />);
513-
const taskElement = screen.getByText('Tasks');
514-
const issueElement = screen.getByText('Issues');
515-
const mineElement = screen.getByText('Mine');
516-
const openPRElement = screen.getByText('Open PRs');
517-
const stalePRElement = screen.getByText('Stale PRs');
518-
const idleUsersElement = screen.getByText('Idle Users');
519-
const standupElement = screen.getByText('Standup');
520-
const availabilityElement = screen.getByText('Availability Panel');
521-
const openPRDevElement = screen.getByText('Open PRs(dev)');
522-
const stalePRDevElement = screen.getByText('Stale PRs(dev)');
523-
524-
expect(taskElement.classList.contains('active')).toBeFalsy();
525-
expect(issueElement.classList.contains('active')).toBeFalsy();
526-
expect(mineElement.classList.contains('active')).toBeFalsy();
527-
expect(openPRElement.classList.contains('active')).toBeFalsy();
528-
expect(stalePRElement.classList.contains('active')).toBeFalsy();
529-
expect(idleUsersElement.classList.contains('active')).toBeFalsy();
530-
expect(standupElement.classList.contains('active')).toBeFalsy();
531-
expect(availabilityElement.classList.contains('active')).toBeFalsy();
532-
expect(openPRDevElement.classList.contains('active')).toBeFalsy();
533-
expect(stalePRDevElement.classList.contains('active')).toBeTruthy();
534440
});
535441
});

__tests__/Unit/Components/Issues/Card.test.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import { renderWithRouter } from '@/test_utils/createMockRouter';
1010
import { Provider } from 'react-redux';
1111
import { store } from '@/app/store';
1212
import fetch from '@/helperFunctions/fetch';
13+
import * as tasksRequestApi from '@/app/services/taskRequestApi';
1314

14-
jest.mock('@/helperFunctions/fetch');
1515
jest.mock('@/hooks/useUserData', () => {
1616
return () => ({
1717
data: {
@@ -174,6 +174,11 @@ describe('Issue card', () => {
174174
expect(assignTaskButton).toBeInTheDocument();
175175
});
176176
test('should call create task request handler when create request button is clicked', async () => {
177+
const addTaskRequestSpy = jest.spyOn(
178+
tasksRequestApi,
179+
'useAddOrUpdateMutation'
180+
);
181+
177182
const screen = renderWithRouter(
178183
<Provider store={store()}>
179184
<Card
@@ -196,6 +201,6 @@ describe('Issue card', () => {
196201
await waitFor(() => {
197202
fireEvent.click(createRequestButton);
198203
});
199-
expect(fetch).toHaveBeenCalled();
204+
expect(addTaskRequestSpy).toHaveBeenCalled();
200205
});
201206
});

__tests__/Unit/Components/Tasks/FilterModal.test.tsx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,46 @@ describe('FilterModal', () => {
111111

112112
expect(mockOnClose).toBeCalled();
113113
});
114+
test('calls onClose when clicked on outside', () => {
115+
render(
116+
<FilterModal
117+
tabs={[Tab.ASSIGNED, Tab.IN_PROGRESS]}
118+
onSelect={mockOnSelect}
119+
activeTab={Tab.ASSIGNED}
120+
onClose={mockOnClose}
121+
dev={true}
122+
/>
123+
);
124+
125+
const closeButton = screen.getByText('×');
126+
const { left, top } = closeButton.getBoundingClientRect();
127+
fireEvent(
128+
closeButton,
129+
new MouseEvent('click', {
130+
bubbles: true,
131+
cancelable: true,
132+
clientX: left + 100,
133+
clientY: top + 100,
134+
})
135+
);
136+
137+
expect(mockOnClose).toBeCalled();
138+
});
139+
test('calls onClose when escape button is clicked', () => {
140+
render(
141+
<FilterModal
142+
tabs={[Tab.ASSIGNED, Tab.IN_PROGRESS]}
143+
onSelect={mockOnSelect}
144+
activeTab={Tab.ASSIGNED}
145+
onClose={mockOnClose}
146+
dev={true}
147+
/>
148+
);
149+
150+
fireEvent.keyDown(document, { key: 'Escape', code: 'Escape' });
151+
152+
expect(mockOnClose).toBeCalled();
153+
});
114154

115155
test('renders the modal with correct active tab', () => {
116156
render(
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import React from 'react';
2+
import { render, fireEvent } from '@testing-library/react';
3+
import Option from '@/components/tasks/TaskSearch/Suggestion/Option';
4+
5+
describe('Option component', () => {
6+
const mockOnClickHandler = jest.fn();
7+
const mockSuggestion = { title: 'this is a long title' };
8+
9+
it('should render correctly', () => {
10+
const { getByTestId } = render(
11+
<Option
12+
idx={0}
13+
onClickHandler={mockOnClickHandler}
14+
suggestion={mockSuggestion}
15+
activeSuggestionIndex={0}
16+
/>
17+
);
18+
19+
const optionElement = getByTestId('option');
20+
expect(optionElement).toBeInTheDocument();
21+
expect(optionElement).toHaveTextContent('title: this is a long title');
22+
});
23+
24+
it('should call onClickHandler when clicked', () => {
25+
const { getByTestId } = render(
26+
<Option
27+
idx={0}
28+
onClickHandler={mockOnClickHandler}
29+
suggestion={mockSuggestion}
30+
activeSuggestionIndex={0}
31+
/>
32+
);
33+
34+
const optionElement = getByTestId('option');
35+
fireEvent.click(optionElement);
36+
expect(mockOnClickHandler).toHaveBeenCalledTimes(1);
37+
expect(mockOnClickHandler).toHaveBeenCalledWith(0);
38+
});
39+
40+
it('should be selected if active', () => {
41+
const { getByTestId } = render(
42+
<Option
43+
idx={0}
44+
onClickHandler={mockOnClickHandler}
45+
suggestion={mockSuggestion}
46+
activeSuggestionIndex={0}
47+
/>
48+
);
49+
50+
const optionElement = getByTestId('option');
51+
expect(optionElement).toHaveClass('selected-suggestion');
52+
});
53+
});

0 commit comments

Comments
 (0)