Skip to content

Commit 2041654

Browse files
committed
Merge branch '#1448-BenjaminZhu-AddAbilityToEditVendors' of https://github.com/Northeastern-Electric-Racing/FinishLine into #1448-BenjaminZhu-AddAbilityToEditVendors
2 parents d3ed739 + 62d732b commit 2041654

5 files changed

Lines changed: 73 additions & 1 deletion

File tree

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,4 +290,16 @@ export default class ReimbursementRequestsController {
290290
next(error);
291291
}
292292
}
293+
294+
static async editVendor(req: Request, res: Response, next: NextFunction) {
295+
try {
296+
const { vendorId } = req.params;
297+
const { name } = req.body;
298+
const submitter = await getCurrentUser(res);
299+
const editVendors = await ReimbursementRequestService.editVendors(name, vendorId, submitter);
300+
res.status(200).json(editVendors);
301+
} catch (error: unknown) {
302+
next(error);
303+
}
304+
}
293305
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ reimbursementRequestsRouter.get('/reimbursements/current-user', ReimbursementReq
2424

2525
reimbursementRequestsRouter.get('/reimbursements', ReimbursementRequestController.getAllReimbursements);
2626

27+
reimbursementRequestsRouter.post('/edit-vendors', nonEmptyString(body('name')), ReimbursementRequestController.editVendor);
28+
2729
reimbursementRequestsRouter.post(
2830
'/create',
2931
isDate(body('dateOfExpense')),

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,4 +715,31 @@ export default class ReimbursementRequestService {
715715
if (!fileData) throw new NotFoundException('Image File', fileId);
716716
return fileData;
717717
}
718+
719+
/**
720+
* Edits the vendor name
721+
*
722+
* @param name name to change of the vendor
723+
* @param vendorId id of the vedor used to edit the name
724+
* @param submitter the user who is downloading the receipt image
725+
* @returns new vendor with a edited name
726+
*/
727+
static async editVendors(name: string, vendorId: string, submitter: User) {
728+
if (!isAdmin(submitter.role)) throw new AccessDeniedAdminOnlyException('only Admins can edit vendors');
729+
730+
const vendorExists = await prisma.vendor.findUnique({
731+
where: { name }
732+
});
733+
734+
console.log(vendorExists);
735+
736+
if (!!vendorExists) throw new HttpException(400, 'vendor name already exists');
737+
738+
const vendor = await prisma.vendor.update({
739+
where: { vendorId },
740+
data: { name }
741+
});
742+
743+
return vendor;
744+
}
718745
}

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import {
2020
prismaGiveMeMyMoney2,
2121
prismaGiveMeMyMoney3,
2222
prismaReimbursementStatus,
23-
sharedGiveMeMyMoney
23+
sharedGiveMeMyMoney,
24+
KFC
2425
} from './test-data/reimbursement-requests.test-data';
2526
import { alfred, batman, flash, sharedBatman, superman, wonderwoman, theVisitor } from './test-data/users.test-data';
2627
import reimbursementRequestQueryArgs from '../src/prisma-query-args/reimbursement-requests.query-args';
@@ -631,4 +632,28 @@ describe('Reimbursement Requests', () => {
631632
expect(newReimbursement).toStrictEqual(reimbursementTransformer(reimbursementMock));
632633
});
633634
});
635+
636+
describe('Edit Vendor Tests', () => {
637+
test('Throws error if user isnt an admin', async () => {
638+
await expect(
639+
ReimbursementRequestService.editVendors('I Love Benny', GiveMeMyMoney.vendorId, wonderwoman)
640+
).rejects.toThrow(new AccessDeniedAdminOnlyException('only Admins can edit vendors'));
641+
});
642+
643+
test('Vendor Name already exists', async () => {
644+
vi.spyOn(prisma.vendor, 'findUnique').mockResolvedValue(PopEyes);
645+
await expect(ReimbursementRequestService.editVendors('CHICKEN', GiveMeMyMoney.vendorId, batman)).rejects.toThrow(
646+
new HttpException(400, 'vendor name already exists')
647+
);
648+
});
649+
650+
test('Successfuly changes Vendors name', async () => {
651+
vi.spyOn(prisma.vendor, 'update').mockResolvedValue(KFC);
652+
vi.spyOn(prisma.vendor, 'findUnique').mockResolvedValue(null);
653+
654+
const vendor = await ReimbursementRequestService.editVendors('kfc', PopEyes.vendorId, batman);
655+
656+
expect(vendor.name).toBe('kfc');
657+
});
658+
});
634659
});

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ export const PopEyes: PrismaVendor = {
2222
name: 'Pop Eyes'
2323
};
2424

25+
export const KFC: PrismaVendor = {
26+
vendorId: 'CHICKEN',
27+
dateCreated: new Date('12/22/203'),
28+
name: 'kfc'
29+
};
30+
2531
export const Parts: PrismaExpenseType = {
2632
expenseTypeId: 'PARTS',
2733
name: 'hammer',

0 commit comments

Comments
 (0)