@@ -24,15 +24,24 @@ import {
2424 prismaReimbursementStatus ,
2525 sharedGiveMeMyMoney
2626} from './test-data/reimbursement-requests.test-data' ;
27- import { alfred , batman , flash , sharedBatman , superman , wonderwoman , theVisitor } from './test-data/users.test-data' ;
27+ import {
28+ alfred ,
29+ batman ,
30+ flash ,
31+ sharedBatman ,
32+ superman ,
33+ wonderwoman ,
34+ theVisitor ,
35+ aquaman ,
36+ greenlantern
37+ } from './test-data/users.test-data' ;
2838import reimbursementRequestQueryArgs from '../src/prisma-query-args/reimbursement-requests.query-args' ;
2939import { Prisma , Reimbursement_Status_Type } from '@prisma/client' ;
3040import {
3141 reimbursementRequestTransformer ,
3242 reimbursementTransformer
3343} from '../src/transformers/reimbursement-requests.transformer' ;
34- import { prismaTeam1 } from './test-data/teams.test-data' ;
35- import { justiceLeague , primsaTeam2 } from './test-data/teams.test-data' ;
44+ import { justiceLeague , prismaTeam1 , primsaTeam2 } from './test-data/teams.test-data' ;
3645
3746describe ( 'Reimbursement Requests' , ( ) => {
3847 beforeEach ( ( ) => { } ) ;
@@ -42,6 +51,12 @@ describe('Reimbursement Requests', () => {
4251 } ) ;
4352
4453 describe ( 'Vendor Tests' , ( ) => {
54+ beforeAll ( ( ) => {
55+ // Circular Dependency Check
56+ expect ( prismaTeam1 . head ) . toBeDefined ( ) ;
57+ expect ( primsaTeam2 . head ) . toBeDefined ( ) ;
58+ } ) ;
59+
4560 test ( 'Get all vendors works' , async ( ) => {
4661 vi . spyOn ( prisma . vendor , 'findMany' ) . mockResolvedValue ( [ ] ) ;
4762
@@ -51,13 +66,39 @@ describe('Reimbursement Requests', () => {
5166 expect ( res ) . toStrictEqual ( [ ] ) ;
5267 } ) ;
5368
54- test ( 'Create Vendor throws error if user is not admin' , async ( ) => {
55- await expect ( ReimbursementRequestService . createVendor ( wonderwoman , 'HOLA BUDDY' ) ) . rejects . toThrow (
56- new AccessDeniedAdminOnlyException ( 'create vendors' )
69+ test ( 'Create Vendor throws error if user is not admin or finance lead' , async ( ) => {
70+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValue ( prismaTeam1 ) ;
71+ await expect ( ReimbursementRequestService . createVendor ( aquaman , 'HOLA BUDDY' ) ) . rejects . toThrow (
72+ new AccessDeniedException ( 'Only admins, finance leads, and finance heads can create vendors.' )
73+ ) ;
74+ } ) ;
75+
76+ test ( 'Create Vendor works for finance leads' , async ( ) => {
77+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValue ( prismaTeam1 ) ;
78+ vi . spyOn ( prisma . vendor , 'create' ) . mockResolvedValue ( PopEyes ) ;
79+ await expect ( ReimbursementRequestService . createVendor ( wonderwoman , 'HOLA BUDDY' ) ) . resolves . not . toThrow (
80+ new AccessDeniedException ( 'Only admins, finance leads, and finance heads can create vendors.' )
81+ ) ;
82+ } ) ;
83+
84+ test ( 'Create Vendor works for finance head' , async ( ) => {
85+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValue ( { ...primsaTeam2 , headId : 5 } ) ;
86+ vi . spyOn ( prisma . vendor , 'create' ) . mockResolvedValue ( PopEyes ) ;
87+ await expect ( ReimbursementRequestService . createVendor ( greenlantern , 'HOLA BUDDY' ) ) . resolves . not . toThrow (
88+ new AccessDeniedException ( 'Only admins, finance leads, and finance heads can create vendors.' )
89+ ) ;
90+ } ) ;
91+
92+ test ( 'Create Vendor works for admin' , async ( ) => {
93+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValue ( primsaTeam2 ) ;
94+ vi . spyOn ( prisma . vendor , 'create' ) . mockResolvedValue ( PopEyes ) ;
95+ await expect ( ReimbursementRequestService . createVendor ( flash , 'HOLA BUDDY' ) ) . resolves . not . toThrow (
96+ new AccessDeniedException ( 'Only admins, finance leads, and finance heads can create vendors.' )
5797 ) ;
5898 } ) ;
5999
60100 test ( 'Create Vendor Successfully returns vendor Id' , async ( ) => {
101+ vi . spyOn ( prisma . team , 'findUnique' ) . mockResolvedValueOnce ( prismaTeam1 ) ;
61102 vi . spyOn ( prisma . vendor , 'create' ) . mockResolvedValue ( PopEyes ) ;
62103
63104 const vendor = await ReimbursementRequestService . createVendor ( batman , 'HOLA BUDDY' ) ;
0 commit comments