Skip to content

Commit c6eb0f0

Browse files
authored
Merge pull request #2201 from Northeastern-Electric-Racing/#2063-use-all-design-reviews-hook
#2063 use all design reviews hook
2 parents 5bd5e3c + a6e5653 commit c6eb0f0

6 files changed

Lines changed: 129 additions & 0 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* This file is part of NER's FinishLine and licensed under GNU AGPLv3.
3+
* See the LICENSE file in the repository root folder for details.
4+
*/
5+
import axios from '../utils/axios';
6+
import { apiUrls } from '../utils/urls';
7+
import { designReviewTransformer } from './transformers/design-reviews.tranformers';
8+
9+
/**
10+
* Gets all the design reviews
11+
*/
12+
export const getAllDesignReviews = () => {
13+
return axios.get(apiUrls.designReviews(), {
14+
transformResponse: (data) => JSON.parse(data).map(designReviewTransformer)
15+
});
16+
};
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { DesignReview } from 'shared';
2+
3+
export const designReviewTransformer = (designReview: DesignReview) => {
4+
return {
5+
...designReview,
6+
dateCreated: new Date(designReview.dateCreated),
7+
dateDeleted: designReview.dateDeleted ? new Date(designReview.dateDeleted) : undefined
8+
};
9+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* This file is part of NER's FinishLine and licensed under GNU AGPLv3.
3+
* See the LICENSE file in the repository root folder for details.
4+
*/
5+
import { useQuery } from 'react-query';
6+
import { getAllDesignReviews } from '../apis/design-reviews.api';
7+
import { DesignReview } from 'shared';
8+
9+
/**
10+
* Custom react hook to get all design reviews
11+
*
12+
* @returns all the design reviews
13+
*/
14+
export const useAllDesignReviews = () => {
15+
return useQuery<DesignReview[], Error>(['design-reviews'], async () => {
16+
const { data } = await getAllDesignReviews();
17+
return data;
18+
});
19+
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* This file is part of NER's FinishLine and licensed under GNU AGPLv3.
3+
* See the LICENSE file in the repository root folder for details.
4+
*/
5+
6+
import { renderHook } from '@testing-library/react-hooks';
7+
import { AxiosResponse } from 'axios';
8+
import { DesignReview } from 'shared';
9+
import wrapper from '../../app/AppContextQuery';
10+
import { mockPromiseAxiosResponse } from '../test-support/test-data/test-utils.stub';
11+
import { exampleAllDesignReviews } from '../test-support/test-data/design-reviews.stub';
12+
import { getAllDesignReviews } from '../../apis/design-reviews.api';
13+
import { useAllDesignReviews } from '../../hooks/design-reviews.hooks';
14+
15+
vi.mock('../../apis/design-reviews.api');
16+
17+
describe('design review hooks', () => {
18+
it('handles getting a list of design reviews', async () => {
19+
const mockedGetAllDesignReviews = getAllDesignReviews as jest.Mock<Promise<AxiosResponse<DesignReview[]>>>;
20+
mockedGetAllDesignReviews.mockReturnValue(mockPromiseAxiosResponse<DesignReview[]>(exampleAllDesignReviews));
21+
22+
const { result, waitFor } = renderHook(() => useAllDesignReviews(), { wrapper });
23+
await waitFor(() => result.current.isSuccess);
24+
expect(result.current.data).toEqual(exampleAllDesignReviews);
25+
});
26+
});
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* This file is part of NER's FinishLine and licensed under GNU AGPLv3.
3+
* See the LICENSE file in the repository root folder for details.
4+
*/
5+
6+
import { DesignReview, DesignReviewStatus, TeamType } from 'shared';
7+
import { exampleAdminUser, exampleAppAdminUser } from './users.stub';
8+
import { exampleWbsProject1 } from './wbs-numbers.stub';
9+
10+
export const teamType1: TeamType = {
11+
teamTypeId: '1',
12+
iconName: 'YouTubeIcon',
13+
name: 'teamType1'
14+
};
15+
16+
export const exampleDesignReview1: DesignReview = {
17+
designReviewId: '1',
18+
dateScheduled: new Date('2024-03-25'),
19+
meetingTimes: [0, 1, 2, 3],
20+
dateCreated: new Date('2024-03-10'),
21+
userCreated: exampleAdminUser,
22+
status: DesignReviewStatus.CONFIRMED,
23+
teamType: teamType1,
24+
requiredMembers: [exampleAdminUser],
25+
optionalMembers: [],
26+
confirmedMembers: [exampleAdminUser],
27+
deniedMembers: [],
28+
isOnline: true,
29+
isInPerson: false,
30+
attendees: [exampleAdminUser],
31+
wbsName: '1',
32+
wbsNum: exampleWbsProject1
33+
};
34+
35+
export const exampleDesignReview2: DesignReview = {
36+
designReviewId: '2',
37+
dateScheduled: new Date('2024-03-25'),
38+
meetingTimes: [0, 4],
39+
dateCreated: new Date('2024-03-10'),
40+
userCreated: exampleAppAdminUser,
41+
status: DesignReviewStatus.CONFIRMED,
42+
teamType: teamType1,
43+
requiredMembers: [exampleAppAdminUser],
44+
optionalMembers: [],
45+
confirmedMembers: [exampleAppAdminUser],
46+
deniedMembers: [],
47+
isOnline: false,
48+
isInPerson: true,
49+
attendees: [exampleAppAdminUser],
50+
wbsName: '1',
51+
wbsNum: exampleWbsProject1
52+
};
53+
54+
export const exampleAllDesignReviews: DesignReview[] = [exampleDesignReview1, exampleDesignReview2];

src/frontend/src/utils/urls.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ const bomCreateManufacturer = () => `${bomEndpoints()}/manufacturer/create`;
129129
const bomCreateMaterialType = () => `${bomEndpoints()}/material-type/create`;
130130
const bomCreateUnit = () => `${bomEndpoints()}/units/create`;
131131

132+
/**************** Design Reviews Endpoints ****************/
133+
const designReviews = () => `${API_URL}/design-reviews`;
134+
132135
/**************** Other Endpoints ****************/
133136
const version = () => `https://api.github.com/repos/Northeastern-Electric-Racing/FinishLine/releases/latest`;
134137

@@ -181,6 +184,8 @@ export const apiUrls = {
181184
changeRequestCreateProposeSolution,
182185
changeRequestRequestReviewer,
183186

187+
designReviews,
188+
184189
teams,
185190
teamsById,
186191
teamsDelete,

0 commit comments

Comments
 (0)