Skip to content

Commit 2a060fc

Browse files
committed
#1417 - added tests, replaced get with post
1 parent 2c54bd7 commit 2a060fc

4 files changed

Lines changed: 47 additions & 6 deletions

File tree

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,11 @@ export default class WorkPackagesController {
2929
}
3030
}
3131

32-
// Fetch the work packages for the specified WBS numbers
3332
static async getManyWorkPackages(req: Request, res: Response, next: NextFunction) {
3433
try {
35-
const pastedWbs: string = req.body.wbsNums;
36-
const wbsNums: WbsNumber[] = pastedWbs.split('\n').map((wbsNum) => validateWBS(wbsNum));
34+
const wbsNums: WbsNumber[] = req.body.wbsNums.map((wbsNum: string) => validateWBS(wbsNum));
3735
const workPackages: WorkPackage[] = await WorkPackagesService.getManyWorkPackages(wbsNums);
38-
res.send(200).json(workPackages);
36+
res.status(200).json(workPackages);
3937
} catch (error: unknown) {
4038
next(error);
4139
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const workPackagesRouter = express.Router();
77

88
workPackagesRouter.get('/', WorkPackagesController.getAllWorkPackages);
99
workPackagesRouter.get('/:wbsNum', WorkPackagesController.getSingleWorkPackage);
10-
workPackagesRouter.get('/get-many', WorkPackagesController.getManyWorkPackages);
10+
workPackagesRouter.post('/get-many', WorkPackagesController.getManyWorkPackages);
1111
workPackagesRouter.post(
1212
'/create',
1313
intMinZero(body('crId')),

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ export default class WorkPackagesService {
140140
...workPackageQueryArgs
141141
});
142142

143-
if (!workPackages) {
143+
if (!workPackages || workPackages.length !== wbsNums.length) {
144144
throw new NotFoundException('Work Package', wbsNums.map((wbsNum) => wbsPipe(wbsNum)).join(', '));
145145
}
146146

src/backend/tests/work-packages.test.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,49 @@ describe('Work Packages', () => {
292292
});
293293
});
294294

295+
describe('getManyWorkPackages', () => {
296+
test('should retrieve work packages for valid WBS numbers', async () => {
297+
const wbsNums = [
298+
{ carNumber: 1, projectNumber: 1, workPackageNumber: 1 },
299+
{ carNumber: 1, projectNumber: 1, workPackageNumber: 1 }
300+
];
301+
302+
vi.spyOn(prisma.work_Package, 'findMany').mockResolvedValue([prismaWorkPackage1, prismaWorkPackage1]);
303+
304+
const result = await WorkPackageService.getManyWorkPackages(wbsNums);
305+
306+
expect(result).toStrictEqual([sharedWorkPackage, sharedWorkPackage]);
307+
});
308+
309+
test('should throw an error for a project WBS number', async () => {
310+
const wbsNums = [{ carNumber: 1, projectNumber: 1, workPackageNumber: 0 }];
311+
312+
await expect(async () => await WorkPackageService.getManyWorkPackages(wbsNums)).rejects.toThrow(
313+
new HttpException(404, 'WBS Number 1.1.0 is a project WBS#, not a Work Package WBS#')
314+
);
315+
});
316+
317+
test('should throw an error for non-existent WBS numbers', async () => {
318+
const wbsNums = [{ carNumber: 9, projectNumber: 9, workPackageNumber: 9 }];
319+
320+
vi.spyOn(prisma.work_Package, 'findMany').mockResolvedValue([]);
321+
322+
await expect(async () => await WorkPackageService.getManyWorkPackages(wbsNums)).rejects.toThrow(
323+
new NotFoundException('Work Package', '9.9.9')
324+
);
325+
});
326+
327+
test('should retrieve an empty array for an empty WBS numbers array', async () => {
328+
const wbsNums: WbsNumber[] = [];
329+
330+
vi.spyOn(prisma.work_Package, 'findMany').mockResolvedValue([]);
331+
332+
const result = await WorkPackageService.getManyWorkPackages(wbsNums);
333+
334+
expect(result).toStrictEqual([]);
335+
});
336+
});
337+
295338
describe('slackMessageUpcomingDeadlines', () => {
296339
beforeEach(() => {
297340
vi.spyOn(slackUtils, 'sendSlackUpcomingDeadlineNotification').mockImplementation(async () => {});

0 commit comments

Comments
 (0)