Skip to content

Commit 179e566

Browse files
authored
Merge pull request #1702 from Northeastern-Electric-Racing/wp-form-view-wrong-blockedby
#1623 - work package showing wrong blockedBy bug
2 parents 040e5ff + 5112cf1 commit 179e566

10 files changed

Lines changed: 40 additions & 17 deletions

File tree

src/backend/src/routes/work-packages.routes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { intMinZero, isDate, isWorkPackageStageOrNone, nonEmptyString } from '..
66
const workPackagesRouter = express.Router();
77

88
workPackagesRouter.get('/', WorkPackagesController.getAllWorkPackages);
9-
workPackagesRouter.get(
9+
workPackagesRouter.post(
1010
'/get-many',
1111
body('wbsNums').isArray(),
1212
intMinZero(body('wbsNums.*.carNumber')),

src/frontend/src/apis/work-packages.api.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,20 @@ export const getAllBlockingWorkPackages = (wbsNum: WbsNumber) => {
9090
});
9191
};
9292

93+
/**
94+
* Gets the work package corresponding with each wbsNum in the submitted array.
95+
* @param wbsNums the WBS Numbers of the work packages being fetched.
96+
*/
97+
export const getManyWorkPackages = (wbsNums: WbsNumber[]) => {
98+
return axios.post<WorkPackage[]>(
99+
apiUrls.workPackagesMany(),
100+
{ wbsNums },
101+
{
102+
transformResponse: (data) => JSON.parse(data).map(workPackageTransformer)
103+
}
104+
);
105+
};
106+
93107
/**
94108
* Slack upcoming deadlines.
95109
*/

src/frontend/src/hooks/work-packages.hooks.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import {
1212
getAllBlockingWorkPackages,
1313
getAllWorkPackages,
1414
getSingleWorkPackage,
15-
slackUpcomingDeadlines
15+
slackUpcomingDeadlines,
16+
getManyWorkPackages
1617
} from '../apis/work-packages.api';
1718

1819
/**
@@ -99,6 +100,16 @@ export const useGetBlockingWorkPackages = (wbsNum: WbsNumber) => {
99100
});
100101
};
101102

103+
/**
104+
* Custom React Hook to get many work packages
105+
*/
106+
export const useGetManyWorkPackages = (wbsNums: WbsNumber[]) => {
107+
return useQuery<WorkPackage[], Error>(['work packages', 'blocking', wbsNums], async () => {
108+
const { data } = await getManyWorkPackages(wbsNums);
109+
return data;
110+
});
111+
};
112+
102113
/**
103114
* Custom React Hook to slack upcoming deadlines.
104115
*/

src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/WorkPackageSummary.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import Grid from '@mui/material/Grid';
1818
import { useTheme } from '@mui/material';
1919
import DetailDisplay from '../../../components/DetailDisplay';
2020
import WorkPackageStageChip from '../../../components/WorkPackageStageChip';
21-
import { useGetBlockingWorkPackages } from '../../../hooks/work-packages.hooks';
21+
import { useGetManyWorkPackages } from '../../../hooks/work-packages.hooks';
2222
import LoadingIndicator from '../../../components/LoadingIndicator';
2323
import ErrorPage from '../../ErrorPage';
2424

@@ -37,7 +37,7 @@ const WorkPackageSummary: React.FC<WorkPackageSummaryProps> = ({ workPackage })
3737
</ul>
3838
);
3939

40-
const { data: dependencies, isError, isLoading, error } = useGetBlockingWorkPackages(workPackage.wbsNum);
40+
const { data: dependencies, isError, isLoading, error } = useGetManyWorkPackages(workPackage.blockedBy);
4141
const theme = useTheme();
4242

4343
if (!dependencies || isLoading) return <LoadingIndicator />;

src/frontend/src/pages/WorkPackageDetailPage/WorkPackageViewContainer/WorkPackageViewContainer.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import KeyboardDoubleArrowUpIcon from '@mui/icons-material/KeyboardDoubleArrowUp
2222
import DoneOutlineIcon from '@mui/icons-material/DoneOutline';
2323
import Delete from '@mui/icons-material/Delete';
2424
import DeleteWorkPackage from '../DeleteWorkPackageModalContainer/DeleteWorkPackage';
25-
import { useGetBlockingWorkPackages } from '../../../hooks/work-packages.hooks';
25+
import { useGetManyWorkPackages } from '../../../hooks/work-packages.hooks';
2626
import PageLayout from '../../../components/PageLayout';
2727
import LoadingIndicator from '../../../components/LoadingIndicator';
2828
import ErrorPage from '../../ErrorPage';
@@ -52,7 +52,7 @@ const WorkPackageViewContainer: React.FC<WorkPackageViewContainerProps> = ({
5252
const [showStageGateModal, setShowStageGateModal] = useState<boolean>(false);
5353
const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);
5454
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
55-
const { data: dependencies, isError, isLoading, error } = useGetBlockingWorkPackages(workPackage.wbsNum);
55+
const { data: dependencies, isError, isLoading, error } = useGetManyWorkPackages(workPackage.blockedBy);
5656
const dropdownOpen = Boolean(anchorEl);
5757
const wbsNum = wbsPipe(workPackage.wbsNum);
5858

src/frontend/src/tests/pages/ProjectDetailPage/ProjectViewContainer.test.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { WorkPackageStage } from 'shared/src/types/work-package-types';
1212
import * as userHooks from '../../../hooks/users.hooks';
1313
import * as authHooks from '../../../hooks/auth.hooks';
1414
import * as wpHooks from '../../../hooks/work-packages.hooks';
15-
import { mockUseGetBlockingWorkPackagesReturnValue, mockUseUsersFavoriteProjects } from '../../test-support/mock-hooks';
15+
import { mockManyWorkPackages, mockUseUsersFavoriteProjects } from '../../test-support/mock-hooks';
1616
import { exampleAllWorkPackages } from '../../test-support/test-data/work-packages.stub';
1717

1818
vi.mock('../../../utils/axios');
@@ -33,9 +33,7 @@ describe('Rendering Project View Container', () => {
3333
vi.spyOn(authHooks, 'useAuth').mockReturnValue(mockAuth(false, exampleAdminUser));
3434
vi.spyOn(userHooks, 'useCurrentUser').mockReturnValue(exampleAdminUser);
3535
vi.spyOn(userHooks, 'useUsersFavoriteProjects').mockReturnValue(mockUseUsersFavoriteProjects());
36-
vi.spyOn(wpHooks, 'useGetBlockingWorkPackages').mockReturnValue(
37-
mockUseGetBlockingWorkPackagesReturnValue(exampleAllWorkPackages)
38-
);
36+
vi.spyOn(wpHooks, 'useGetManyWorkPackages').mockReturnValue(mockManyWorkPackages(exampleAllWorkPackages));
3937
renderComponent();
4038
});
4139

src/frontend/src/tests/pages/WorkPackageDetailPage/WorkPackagePage.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { UseQueryResult } from 'react-query';
77
import { AuthenticatedUser, WorkPackage } from 'shared';
88
import { render, screen, routerWrapperBuilder, act, fireEvent } from '../../test-support/test-utils';
99
import { Auth } from '../../../utils/types';
10-
import { useGetBlockingWorkPackages, useSingleWorkPackage } from '../../../hooks/work-packages.hooks';
10+
import { useGetManyWorkPackages, useSingleWorkPackage } from '../../../hooks/work-packages.hooks';
1111
import { useAuth } from '../../../hooks/auth.hooks';
1212
import { mockAuth, mockUseQueryResult } from '../../test-support/test-data/test-utils.stub';
1313
import { exampleDesignWorkPackage, exampleResearchWorkPackage } from '../../test-support/test-data/work-packages.stub';
@@ -25,7 +25,7 @@ const mockSingleWPHook = (isLoading: boolean, isError: boolean, data?: WorkPacka
2525
mockedUseSingleWorkPackage.mockReturnValue(mockUseQueryResult<WorkPackage>(isLoading, isError, data, error));
2626
};
2727

28-
const mockedGetBlockingWorkPackages = useGetBlockingWorkPackages as jest.Mock<UseQueryResult<WorkPackage[]>>;
28+
const mockedGetBlockingWorkPackages = useGetManyWorkPackages as jest.Mock<UseQueryResult<WorkPackage[]>>;
2929

3030
const mockGetBlockingWorkPackagesHook = (isLoading: boolean, isError: boolean, data?: WorkPackage[], error?: Error) => {
3131
mockedGetBlockingWorkPackages.mockReturnValue(mockUseQueryResult<WorkPackage[]>(isLoading, isError, data, error));

src/frontend/src/tests/pages/WorkPackageDetailPage/WorkPackageViewContainer/WorkPackageViewContainer.test.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import * as wpHooks from '../../../../hooks/work-packages.hooks';
1010
import { exampleAdminUser } from '../../../test-support/test-data/users.stub';
1111
import AppContextUser from '../../../../app/AppContextUser';
1212
import * as userHooks from '../../../../hooks/users.hooks';
13-
import { mockUseGetBlockingWorkPackagesReturnValue } from '../../../test-support/mock-hooks';
13+
import { mockManyWorkPackages } from '../../../test-support/mock-hooks';
1414

1515
// Sets up the component under test with the desired values and renders it.
1616
const renderComponent = (
@@ -42,9 +42,7 @@ const renderComponent = (
4242
describe.skip('work package container view', () => {
4343
beforeEach(() => {
4444
vi.spyOn(userHooks, 'useCurrentUser').mockReturnValue(exampleAdminUser);
45-
vi.spyOn(wpHooks, 'useGetBlockingWorkPackages').mockReturnValue(
46-
mockUseGetBlockingWorkPackagesReturnValue([exampleResearchWorkPackage])
47-
);
45+
vi.spyOn(wpHooks, 'useGetManyWorkPackages').mockReturnValue(mockManyWorkPackages([exampleResearchWorkPackage]));
4846
});
4947

5048
it('renders the project', () => {

src/frontend/src/tests/test-support/mock-hooks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,5 @@ export const mockUseAllWorkPackagesReturnValue = (workPackages: WorkPackage[]) =
8383
export const mockUseAllProjectsReturnValue = (projects: Project[]) =>
8484
mockUseQueryResult<Project[]>(false, false, projects, new Error());
8585

86-
export const mockUseGetBlockingWorkPackagesReturnValue = (workPackages: WorkPackage[]) =>
86+
export const mockManyWorkPackages = (workPackages: WorkPackage[]) =>
8787
mockUseQueryResult<WorkPackage[]>(false, false, workPackages, new Error());

src/frontend/src/utils/urls.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ const workPackagesEdit = () => `${workPackages()}/edit`;
5353
const workPackagesDelete = (wbsNum: string) => `${workPackagesByWbsNum(wbsNum)}/delete`;
5454
const workPackagesBlocking = (wbsNum: string) => `${workPackagesByWbsNum(wbsNum)}/blocking`;
5555
const workPackagesSlackUpcomingDeadlines = () => `${workPackages()}/slack-upcoming-deadlines`;
56+
const workPackagesMany = () => `${workPackages()}/get-many`;
5657

5758
/**************** Change Requests Endpoints ****************/
5859
const changeRequests = () => `${API_URL}/change-requests`;
@@ -142,6 +143,7 @@ export const apiUrls = {
142143
workPackagesDelete,
143144
workPackagesBlocking,
144145
workPackagesSlackUpcomingDeadlines,
146+
workPackagesMany,
145147

146148
changeRequests,
147149
changeRequestsById,

0 commit comments

Comments
 (0)