Skip to content

Commit 579c7c6

Browse files
committed
#1527 - add tests
1 parent ad15acd commit 579c7c6

2 files changed

Lines changed: 40 additions & 2 deletions

File tree

src/backend/src/services/projects.services.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,7 +1045,7 @@ export default class ProjectsService {
10451045
* @returns the deleted material
10461046
* @throws if the user does not have permission, or materidal already deleted
10471047
*/
1048-
static async deleteMaterial(currentUser: User, materialId: string): Promise<string> {
1048+
static async deleteMaterial(currentUser: User, materialId: string): Promise<Material> {
10491049
if (!isLeadership(currentUser.role)) {
10501050
throw new AccessDeniedException('Only Leadership can delete materials');
10511051
}
@@ -1061,7 +1061,7 @@ export default class ProjectsService {
10611061
data: { dateDeleted: new Date(), userDeletedId: currentUser.userId }
10621062
});
10631063

1064-
return deletedMaterial.materialId;
1064+
return deletedMaterial;
10651065
}
10661066

10671067
/**

src/backend/tests/projects.test.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,7 @@ describe('Projects', () => {
683683
new DeletedException('Manufacturer', prismaManufacturer2.name)
684684
);
685685
});
686+
686687
test('Get all Manufacturer works', async () => {
687688
vi.spyOn(prisma.manufacturer, 'findMany').mockResolvedValue([]);
688689

@@ -1014,5 +1015,42 @@ describe('Projects', () => {
10141015
expect(updatedMaterial.name).toBe('name2');
10151016
expect(prisma.material.update).toBeCalledTimes(1);
10161017
});
1018+
1019+
test('deleteMaterial works', async () => {
1020+
vi.spyOn(prisma.material, 'findUnique').mockResolvedValue(prismaMaterial);
1021+
const deletedMaterial = { ...prismaMaterial, dateDeleted: new Date() };
1022+
vi.spyOn(prisma.material, 'update').mockResolvedValue(deletedMaterial);
1023+
1024+
const material = await ProjectsService.deleteMaterial(batman, prismaMaterial.materialId);
1025+
1026+
expect(material).toStrictEqual(deletedMaterial);
1027+
});
1028+
1029+
test('deleteMaterial fails when user is not at least Lead', async () => {
1030+
vi.spyOn(prisma.material, 'findUnique').mockResolvedValue(prismaMaterial);
1031+
vi.spyOn(prisma.material, 'update').mockResolvedValue(prismaMaterial);
1032+
1033+
await expect(async () => await ProjectsService.deleteMaterial(wonderwoman, prismaMaterial.materialId)).rejects.toThrow(
1034+
new AccessDeniedException('Only Leadership can delete materials')
1035+
);
1036+
});
1037+
1038+
test('deleteMaterial fails when material is not found', async () => {
1039+
vi.spyOn(prisma.material, 'findUnique').mockResolvedValue(null);
1040+
vi.spyOn(prisma.material, 'update').mockResolvedValue(prismaMaterial);
1041+
1042+
await expect(async () => await ProjectsService.deleteMaterial(batman, prismaMaterial.materialId)).rejects.toThrow(
1043+
new NotFoundException('Material', prismaMaterial.materialId)
1044+
);
1045+
});
1046+
1047+
test('deleteMaterial fails when material has been deleted', async () => {
1048+
vi.spyOn(prisma.material, 'findUnique').mockResolvedValue({ ...prismaMaterial, dateDeleted: new Date() });
1049+
vi.spyOn(prisma.material, 'update').mockResolvedValue(prismaMaterial);
1050+
1051+
await expect(async () => await ProjectsService.deleteMaterial(batman, prismaMaterial.materialId)).rejects.toThrow(
1052+
new DeletedException('Material', prismaMaterial.materialId)
1053+
);
1054+
});
10171055
});
10181056
});

0 commit comments

Comments
 (0)