@@ -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' ;
@@ -574,6 +576,69 @@ describe('Reimbursement Requests', () => {
574576 } ) ;
575577 } ) ;
576578
579+ describe ( 'Deny Reimbursement Request Tests' , ( ) => {
580+ test ( 'Deny Reimbursement Request fails if Submitter not on Finance Team' , async ( ) => {
581+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValue ( { ...primsaTeam2 , headId : 1 } ) ;
582+ await expect (
583+ ReimbursementRequestService . denyReimbursementRequest ( GiveMeMyMoney . reimbursementRequestId , alfred )
584+ ) . rejects . toThrow ( new AccessDeniedException ( `You are not a member of the finance team!` ) ) ;
585+ } ) ;
586+
587+ test ( 'Deny Reimbursement Request fails if Finance Team does not exist' , async ( ) => {
588+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValue ( null ) ;
589+ await expect (
590+ ReimbursementRequestService . denyReimbursementRequest ( GiveMeMyMoney . reimbursementRequestId , alfred )
591+ ) . rejects . toThrow ( new HttpException ( 500 , 'Finance team does not exist!' ) ) ;
592+ } ) ;
593+
594+ test ( 'Deny Reimbursement Request fails if the Request does not exist' , async ( ) => {
595+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValue ( primsaTeam2 ) ;
596+ vi . spyOn ( prisma . reimbursement_Request , 'findUnique' ) . mockResolvedValue ( null ) ;
597+
598+ await expect (
599+ ReimbursementRequestService . denyReimbursementRequest ( GiveMeMyMoney . reimbursementRequestId , alfred )
600+ ) . rejects . toThrow ( new NotFoundException ( 'Reimbursement Request' , GiveMeMyMoney . reimbursementRequestId ) ) ;
601+ } ) ;
602+
603+ test ( 'Deny Reimbursement Request fails if the Request has been deleted' , async ( ) => {
604+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValue ( primsaTeam2 ) ;
605+ vi . spyOn ( prisma . reimbursement_Request , 'findUnique' ) . mockResolvedValue ( GiveMeMyMoney2 ) ;
606+
607+ await expect (
608+ ReimbursementRequestService . denyReimbursementRequest ( GiveMeMyMoney2 . reimbursementRequestId , alfred )
609+ ) . rejects . toThrow ( new DeletedException ( 'Reimbursement Request' , GiveMeMyMoney2 . reimbursementRequestId ) ) ;
610+ } ) ;
611+
612+ test ( 'Deny Reimbursement Request fails if the request has already been denied' , async ( ) => {
613+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValue ( primsaTeam2 ) ;
614+ vi . spyOn ( prisma . reimbursement_Request , 'findUnique' ) . mockResolvedValue ( prismaGiveMeMyMoney4 ) ;
615+
616+ await expect (
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' ) ) ;
627+ } ) ;
628+ test ( 'Deny Reimbursement Request success' , async ( ) => {
629+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValue ( primsaTeam2 ) ;
630+ vi . spyOn ( prisma . reimbursement_Request , 'findUnique' ) . mockResolvedValue ( prismaGiveMeMyMoney3 ) ;
631+ vi . spyOn ( prisma . reimbursement_Status , 'create' ) . mockResolvedValue ( prismaReimbursementStatus ) ;
632+
633+ const reimbursementStatus = await ReimbursementRequestService . denyReimbursementRequest (
634+ prismaGiveMeMyMoney3 . reimbursementRequestId ,
635+ alfred
636+ ) ;
637+
638+ expect ( reimbursementStatus . reimbursementStatusId ) . toStrictEqual ( prismaReimbursementStatus . reimbursementStatusId ) ;
639+ } ) ;
640+ } ) ;
641+
577642 describe ( 'Reimbursement User Tests' , ( ) => {
578643 test ( 'Throws an error if user is a guest' , async ( ) => {
579644 await expect ( ReimbursementRequestService . reimburseUser ( 100 , '2023-01-11T11:12:33.409Z' , theVisitor ) ) . rejects . toThrow (
0 commit comments