Skip to content

Commit 6fb608a

Browse files
committed
#1610 cant deny if reimbursed
1 parent ae7d323 commit 6fb608a

3 files changed

Lines changed: 59 additions & 9 deletions

File tree

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -723,10 +723,12 @@ export default class ReimbursementRequestService {
723723
throw new DeletedException('Reimbursement Request', reimbursementRequestId);
724724
}
725725

726-
if (
727-
reimbursementRequest.reimbursementStatuses.some((status) => status.type === ReimbursementStatusType.SABO_SUBMITTED)
728-
) {
729-
throw new HttpException(400, 'This reimbursement request has already been approved');
726+
if (reimbursementRequest.reimbursementStatuses.some((status) => status.type === ReimbursementStatusType.DENIED)) {
727+
throw new HttpException(400, 'This reimbursement request has already been denied');
728+
}
729+
730+
if (reimbursementRequest.reimbursementStatuses.some((status) => status.type === ReimbursementStatusType.REIMBURSED)) {
731+
throw new HttpException(400, 'This reimbursement request has already been reimbursed');
730732
}
731733

732734
const reimbursementStatus = await prisma.reimbursement_Status.create({

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import {
1919
prismaGiveMeMyMoney,
2020
prismaGiveMeMyMoney2,
2121
prismaGiveMeMyMoney3,
22+
prismaGiveMeMyMoney4,
23+
prismaGiveMeMyMoney5,
2224
prismaReimbursementStatus,
2325
sharedGiveMeMyMoney
2426
} from './test-data/reimbursement-requests.test-data';
@@ -607,15 +609,23 @@ describe('Reimbursement Requests', () => {
607609
).rejects.toThrow(new DeletedException('Reimbursement Request', GiveMeMyMoney2.reimbursementRequestId));
608610
});
609611

610-
test('Deny Reimbursement Request fails if the request has already been approved', async () => {
612+
test('Deny Reimbursement Request fails if the request has already been denied', async () => {
611613
vi.spyOn(prisma.team, 'findUnique').mockResolvedValue(primsaTeam2);
612-
vi.spyOn(prisma.reimbursement_Request, 'findUnique').mockResolvedValue(prismaGiveMeMyMoney2);
614+
vi.spyOn(prisma.reimbursement_Request, 'findUnique').mockResolvedValue(prismaGiveMeMyMoney4);
613615

614616
await expect(
615-
ReimbursementRequestService.denyReimbursementRequest(prismaGiveMeMyMoney2.reimbursementRequestId, alfred)
616-
).rejects.toThrow(new HttpException(400, 'This reimbursement request has already been approved'));
617+
ReimbursementRequestService.denyReimbursementRequest(prismaGiveMeMyMoney4.reimbursementRequestId, alfred)
618+
).rejects.toThrow(new HttpException(400, 'This reimbursement request has already been denied'));
619+
});
620+
test('Deny Reimbursement Request fails if the request has already been reimbursed', async () => {
621+
vi.spyOn(prisma.team, 'findUnique').mockResolvedValue(primsaTeam2);
622+
vi.spyOn(prisma.reimbursement_Request, 'findUnique').mockResolvedValue(prismaGiveMeMyMoney5);
623+
624+
await expect(
625+
ReimbursementRequestService.denyReimbursementRequest(prismaGiveMeMyMoney5.reimbursementRequestId, alfred)
626+
).rejects.toThrow(new HttpException(400, 'This reimbursement request has already been reimbursed'));
617627
});
618-
test('Deny Reimbursment Request success', async () => {
628+
test('Deny Reimbursement Request success', async () => {
619629
vi.spyOn(prisma.team, 'findUnique').mockResolvedValue(primsaTeam2);
620630
vi.spyOn(prisma.reimbursement_Request, 'findUnique').mockResolvedValue(prismaGiveMeMyMoney3);
621631
vi.spyOn(prisma.reimbursement_Status, 'create').mockResolvedValue(prismaReimbursementStatus);

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,24 @@ export const prismaReimbursementStatus2: PrismaReimbursementStatus & { user: Use
111111
user: alfred
112112
};
113113

114+
export const prismaReimbursementStatus3: PrismaReimbursementStatus & { user: User } = {
115+
reimbursementStatusId: 3,
116+
type: 'DENIED',
117+
userId: 0,
118+
dateCreated: new Date('23/8/2023'),
119+
reimbursementRequestId: GiveMeMyMoney.reimbursementRequestId,
120+
user: alfred
121+
};
122+
123+
export const prismaReimbursementStatus4: PrismaReimbursementStatus & { user: User } = {
124+
reimbursementStatusId: 3,
125+
type: 'REIMBURSED',
126+
userId: 0,
127+
dateCreated: new Date('23/8/2023'),
128+
reimbursementRequestId: GiveMeMyMoney.reimbursementRequestId,
129+
user: alfred
130+
};
131+
114132
export const prismaGiveMeMyMoney2: Prisma.Reimbursement_RequestGetPayload<typeof reimbursementRequestQueryArgs> = {
115133
...GiveMeMyMoney,
116134
receiptPictures: [],
@@ -131,6 +149,26 @@ export const prismaGiveMeMyMoney3: Prisma.Reimbursement_RequestGetPayload<typeof
131149
expenseType: Parts
132150
};
133151

152+
export const prismaGiveMeMyMoney4: Prisma.Reimbursement_RequestGetPayload<typeof reimbursementRequestQueryArgs> = {
153+
...GiveMeMyMoney,
154+
receiptPictures: [],
155+
reimbursementStatuses: [prismaReimbursementStatus3],
156+
recipient: batman,
157+
vendor: PopEyes,
158+
reimbursementProducts: [{ ...GiveMeMoneyProduct, wbsElement: prismaWbsElement1 }],
159+
expenseType: Parts
160+
};
161+
162+
export const prismaGiveMeMyMoney5: Prisma.Reimbursement_RequestGetPayload<typeof reimbursementRequestQueryArgs> = {
163+
...GiveMeMyMoney,
164+
receiptPictures: [],
165+
reimbursementStatuses: [prismaReimbursementStatus4],
166+
recipient: batman,
167+
vendor: PopEyes,
168+
reimbursementProducts: [{ ...GiveMeMoneyProduct, wbsElement: prismaWbsElement1 }],
169+
expenseType: Parts
170+
};
171+
134172
export const prismaGiveMeMyMoney3Approved: Prisma.Reimbursement_RequestGetPayload<typeof reimbursementRequestQueryArgs> = {
135173
...GiveMeMyMoney,
136174
receiptPictures: [],

0 commit comments

Comments
 (0)