Skip to content

Commit 0ab44a2

Browse files
committed
#1448: merged with the develop branch
2 parents e5fc0d5 + 1b616cd commit 0ab44a2

4 files changed

Lines changed: 24 additions & 13 deletions

File tree

src/backend/src/routes/reimbursement-requests.routes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ reimbursementRequestsRouter.get('/reimbursements/current-user', ReimbursementReq
2525
reimbursementRequestsRouter.get('/reimbursements', ReimbursementRequestController.getAllReimbursements);
2626

2727
reimbursementRequestsRouter.post(
28-
'/edit-vendors',
28+
'/:vendorId/vendors/edit',
2929
nonEmptyString(body('name')),
3030
validateInputs,
3131
ReimbursementRequestController.editVendor

src/backend/src/services/reimbursement-requests.services.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
} from 'shared';
2323
import prisma from '../prisma/prisma';
2424
import {
25+
isUserAdminOrOnFinance,
2526
createReimbursementProducts,
2627
isUserLeadOrHeadOfFinanceTeam,
2728
removeDeletedReceiptPictures,
@@ -771,21 +772,19 @@ export default class ReimbursementRequestService {
771772
/**
772773
* Edits the vendor name
773774
*
774-
* @param name name to change of the vendor
775-
* @param vendorId id of the vedor used to edit the name
776-
* @param submitter the user who is downloading the receipt image
777-
* @returns new vendor with a edited name
775+
* @param name the new vendor name
776+
* @param vendorId the requested vendor to be edited
777+
* @param submitter the user editing the vendor name
778+
* @returns the updated vendor
778779
*/
779780
static async editVendors(name: string, vendorId: string, submitter: User) {
780-
if (!isAdmin(submitter.role)) throw new AccessDeniedAdminOnlyException('only Admins can edit vendors');
781+
await isUserAdminOrOnFinance(submitter);
781782

782-
const vendorExists = await prisma.vendor.findUnique({
783+
const vendorUniqueName = await prisma.vendor.findUnique({
783784
where: { name }
784785
});
785786

786-
console.log(vendorExists);
787-
788-
if (!!vendorExists) throw new HttpException(400, 'vendor name already exists');
787+
if (!!vendorUniqueName) throw new HttpException(400, 'vendor name already exists');
789788

790789
const vendor = await prisma.vendor.update({
791790
where: { vendorId },

src/backend/src/utils/reimbursement-requests.utils.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
ReimbursementProductCreateArgs,
1010
ReimbursementReceiptCreateArgs,
1111
ValidatedWbsReimbursementProductCreateArgs,
12+
isAdmin,
1213
wbsPipe,
1314
WbsReimbursementProductCreateArgs
1415
} from 'shared';
@@ -366,6 +367,16 @@ export const isAuthUserHeadOfFinance = (user: Prisma.UserGetPayload<typeof authU
366367
return user.teamAsHead?.teamId === process.env.FINANCE_TEAM_ID;
367368
};
368369

370+
export const isUserAdminOrOnFinance = async (submitter: User) => {
371+
try {
372+
await validateUserIsPartOfFinanceTeam(submitter);
373+
} catch (error) {
374+
if (!isAdmin(submitter.role)) {
375+
throw new AccessDeniedException('Only Admins, Finance Team Leads, or Heads can edit vendors');
376+
}
377+
}
378+
};
379+
369380
const isTeamIdInList = (teamId: string, teamsList: Team[]) => {
370381
return teamsList.map((team) => team.teamId).includes(teamId);
371382
};

src/backend/tests/reimbursement-requests.test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -761,13 +761,13 @@ describe('Reimbursement Requests', () => {
761761
});
762762

763763
describe('Edit Vendor Tests', () => {
764-
test('Throws error if user isnt an admin', async () => {
764+
test('Throws error if user isnt an admin or lead/head of the finance', async () => {
765765
await expect(
766766
ReimbursementRequestService.editVendors('I Love Benny', GiveMeMyMoney.vendorId, wonderwoman)
767-
).rejects.toThrow(new AccessDeniedAdminOnlyException('only Admins can edit vendors'));
767+
).rejects.toThrow(new AccessDeniedException('Only Admins, Finance Team Leads, or Heads can edit vendors'));
768768
});
769769

770-
test('Vendor Name already exists', async () => {
770+
test('Throws error if the vendor name already exists', async () => {
771771
vi.spyOn(prisma.vendor, 'findUnique').mockResolvedValue(PopEyes);
772772
await expect(ReimbursementRequestService.editVendors('CHICKEN', GiveMeMyMoney.vendorId, batman)).rejects.toThrow(
773773
new HttpException(400, 'vendor name already exists')
@@ -781,6 +781,7 @@ describe('Reimbursement Requests', () => {
781781
const vendor = await ReimbursementRequestService.editVendors('kfc', PopEyes.vendorId, batman);
782782

783783
expect(vendor.name).toBe('kfc');
784+
expect(prisma.vendor.update).toBeCalledTimes(1);
784785
});
785786
});
786787
});

0 commit comments

Comments
 (0)