Skip to content

Commit 1f03ce9

Browse files
committed
Added uniqueness check and tests
1 parent b017460 commit 1f03ce9

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,9 +608,9 @@ export default class ProjectsService {
608608
/**
609609
* Create an assembly
610610
* @param name The name of the assembly to be created
611-
* @param pdmFileName The name of the file holding the assembly
612611
* @param userCreated The user creating the assembly
613612
* @param wbsElementId The
613+
* @param pdmFileName optional - The name of the file holding the assembly
614614
* @returns the project that the user has favorited/unfavorited
615615
* @throws if the project wbs doesn't exist or is not corresponding to a project
616616
*/
@@ -623,6 +623,14 @@ export default class ProjectsService {
623623
if (!isProject(wbsNumber)) throw new HttpException(400, `${wbsPipe(wbsNumber)} is not a valid project WBS #!`);
624624
const { carNumber, projectNumber, workPackageNumber } = wbsNumber;
625625

626+
const checkAssembly = await prisma.assembly.findUnique({
627+
where: {
628+
name
629+
}
630+
});
631+
632+
if (checkAssembly) throw new HttpException(400, `${name} already exists as an assembly!`);
633+
626634
const project = await prisma.project.findFirst({
627635
where: {
628636
wbsElement: {

src/backend/tests/projects.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,12 +318,32 @@ describe('Projects', () => {
318318
).rejects.toThrow(new DeletedException('Project', prismaProject1.projectId));
319319
});
320320

321+
test('createAssembly fails if name is not unique', async () => {
322+
vi.spyOn(prisma.assembly, 'findUnique').mockResolvedValue({ ...prismaAssembly1, name: 'a1' });
323+
324+
// no error, no return value
325+
await expect(
326+
async () =>
327+
await ProjectsService.createAssembly(
328+
'a1',
329+
batman,
330+
{
331+
carNumber: 1,
332+
projectNumber: 1,
333+
workPackageNumber: 0
334+
},
335+
'file.txt'
336+
)
337+
).rejects.toThrow(new HttpException(400, `a1 already exists as an assembly!`));
338+
});
339+
321340
test('createAssembly fails when no permissions', async () => {
322341
vi.spyOn(prisma.project, 'findFirst').mockResolvedValue({
323342
wbsElement: { ...prismaProject1.wbsElement, dateDeleted: '' },
324343
projectId: prismaProject1.projectId,
325344
teams: [{ prismaTeam1, leads: [], members: [] }]
326345
} as any);
346+
vi.spyOn(prisma.assembly, 'findUnique').mockResolvedValue(null);
327347
await expect(
328348
async () =>
329349
await ProjectsService.createAssembly(
@@ -345,6 +365,7 @@ describe('Projects', () => {
345365
projectId: prismaProject1.projectId,
346366
teams: [{ prismaTeam1, leads: [], members: [] }]
347367
} as any);
368+
vi.spyOn(prisma.assembly, 'findUnique').mockResolvedValue(null);
348369
await expect(
349370
async () =>
350371
await ProjectsService.createAssembly(
@@ -366,6 +387,7 @@ describe('Projects', () => {
366387
projectId: prismaProject1.projectId,
367388
teams: [{ prismaTeam1, leads: [], members: [] }]
368389
} as any);
390+
vi.spyOn(prisma.assembly, 'findUnique').mockResolvedValue(null);
369391
vi.spyOn(prisma.assembly, 'create').mockResolvedValue(prismaAssembly1);
370392

371393
// no error, no return value
@@ -385,6 +407,7 @@ describe('Projects', () => {
385407
mockGetHighestProjectNumber.mockResolvedValue(0);
386408
vi.spyOn(prisma.assembly, 'create').mockResolvedValue(prismaAssembly1);
387409
vi.spyOn(prisma.project, 'findFirst').mockResolvedValue(prismaProject1);
410+
vi.spyOn(prisma.assembly, 'findUnique').mockResolvedValue(null);
388411

389412
// no error, no return value
390413
await ProjectsService.createAssembly(

0 commit comments

Comments
 (0)