Skip to content

Commit 64649aa

Browse files
committed
#1519: pr comments
1 parent afb454c commit 64649aa

5 files changed

Lines changed: 35 additions & 11 deletions

File tree

src/backend/src/controllers/projects.controllers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ export default class ProjectsController {
141141

142142
static async getAllManufacturers(req: Request, res: Response, next: NextFunction) {
143143
try {
144-
const manufacturers: Manufacturer[] = await ProjectsService.getAllManufacturers();
144+
const user = await getCurrentUser(res);
145+
const manufacturers: Manufacturer[] = await ProjectsService.getAllManufacturers(user);
145146
return res.status(200).json(manufacturers);
146147
} catch (error: unknown) {
147148
next(error);
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
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+
16
import { Prisma } from '@prisma/client';
27

38
const manufacturerQueryArgs = Prisma.validator<Prisma.ManufacturerArgs>()({
@@ -6,4 +11,4 @@ const manufacturerQueryArgs = Prisma.validator<Prisma.ManufacturerArgs>()({
611
}
712
});
813

9-
export default manufacturerQueryArgs;
14+
export default manufacturerQueryArgs;

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Manufacturer, User } from '@prisma/client';
1+
import { Manufacturer, Role, User } from '@prisma/client';
22
import { isAdmin, isGuest, isProject, LinkCreateArgs, LinkType, Project, WbsNumber, wbsPipe } from 'shared';
33
import projectQueryArgs from '../prisma-query-args/projects.query-args';
44
import prisma from '../prisma/prisma';
@@ -634,12 +634,15 @@ export default class ProjectsService {
634634
* Get all the manufacturers in the database.
635635
* @returns all the manufacturers
636636
*/
637-
static async getAllManufacturers(): Promise<Manufacturer[]> {
637+
static async getAllManufacturers(submitter: User): Promise<Manufacturer[]> {
638+
if (submitter.role === Role.GUEST) {
639+
throw new AccessDeniedGuestException('Guests cannot get the manufacturers');
640+
}
641+
638642
return (
639643
await prisma.manufacturer.findMany({
640644
...manufacturerQueryArgs
641645
})
642646
).map(manufacturerTransformer);
643647
}
644-
645648
}
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
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+
16
import { Manufacturer, Prisma } from '@prisma/client';
27
import manufacturerQueryArgs from '../prisma-query-args/manufacturers.query-args';
38

4-
export const manufacturerTransformer = (manufacturer: Prisma.ManufacturerGetPayload<typeof manufacturerQueryArgs>): Manufacturer => {
5-
return {
9+
export const manufacturerTransformer = (
10+
manufacturer: Prisma.ManufacturerGetPayload<typeof manufacturerQueryArgs>
11+
): Manufacturer => {
12+
return {
613
name: manufacturer.name,
714
dateCreated: manufacturer.dateCreated,
815
creatorId: manufacturer.creatorId
9-
}
10-
};
16+
};
17+
};

src/backend/tests/projects.test.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import prisma from '../src/prisma/prisma';
22
import { getHighestProjectNumber } from '../src/utils/projects.utils';
33
import * as changeRequestUtils from '../src/utils/change-requests.utils';
4-
import { aquaman, batman, wonderwoman } from './test-data/users.test-data';
4+
import { aquaman, batman, theVisitor, wonderwoman } from './test-data/users.test-data';
55
import { prismaManufacturer1, prismaProject1, sharedProject1 } from './test-data/projects.test-data';
66
import { prismaChangeRequest1 } from './test-data/change-requests.test-data';
77
import { prismaTeam1 } from './test-data/teams.test-data';
@@ -284,10 +284,18 @@ describe('Projects', () => {
284284
test('Get all Manufacturer works', async () => {
285285
vi.spyOn(prisma.manufacturer, 'findMany').mockResolvedValue([]);
286286

287-
const res = await ProjectsService.getAllManufacturers();
287+
const res = await ProjectsService.getAllManufacturers(batman);
288288

289289
expect(prisma.manufacturer.findMany).toHaveBeenCalledTimes(1);
290290
expect(res).toStrictEqual([]);
291291
});
292+
293+
test('Get all Manufacturer fails from guest', async () => {
294+
vi.spyOn(prisma.manufacturer, 'findMany').mockResolvedValue([]);
295+
296+
await expect(ProjectsService.getAllManufacturers(theVisitor)).rejects.toThrow(
297+
new AccessDeniedGuestException('Guests cannot get the manufacturers')
298+
);
299+
});
292300
});
293301
});

0 commit comments

Comments
 (0)