1
+ import { createMock , DeepMocked } from '@golevelup/ts-jest' ;
2
+ import { Test , TestingModule } from '@nestjs/testing' ;
3
+ import { getRepositoryToken } from '@nestjs/typeorm' ;
4
+ import { PartnerEntity } from '../entities/partner.entity' ;
5
+ import { PartnerService } from './partner.service' ;
6
+ import { Repository } from 'typeorm' ;
7
+ import { PartnerAccessEntity } from '../entities/partner-access.entity' ;
8
+ import { PartnerAdminEntity } from '../entities/partner-admin.entity' ;
9
+ import { UserEntity } from '../entities/user.entity' ;
10
+ import { mockPartnerRepositoryMethods } from '../../test/utils/mockedServices' ;
11
+ import { mockPartnerEntity } from '../../test/utils/mockData' ;
12
+
13
+ const createPartnerDto = {
14
+ name : mockPartnerEntity . name ,
15
+ } ;
16
+ describe ( 'PartnerService' , ( ) => {
17
+ let service : PartnerService ;
18
+ let mockPartnerRepository : DeepMocked < Repository < PartnerEntity > > ;
19
+ let mockPartnerAccessRepository : DeepMocked < Repository < PartnerAccessEntity > > ;
20
+ let mockPartnerAdminRepository : DeepMocked < Repository < PartnerAdminEntity > > ;
21
+ let mockUserRepository : DeepMocked < Repository < UserEntity > > ;
22
+
23
+ beforeEach ( async ( ) => {
24
+ mockPartnerRepository = createMock < Repository < PartnerEntity > > (
25
+ mockPartnerRepositoryMethods ,
26
+ ) ;
27
+ mockPartnerAccessRepository = createMock < Repository < PartnerAccessEntity > > ( ) ;
28
+ mockPartnerAdminRepository = createMock < Repository < PartnerAdminEntity > > ( ) ;
29
+ mockUserRepository = createMock < Repository < UserEntity > > ( ) ;
30
+
31
+ const module : TestingModule = await Test . createTestingModule ( {
32
+ providers : [
33
+ PartnerService ,
34
+ { provide : getRepositoryToken ( PartnerEntity ) , useValue : mockPartnerRepository } ,
35
+ { provide : getRepositoryToken ( PartnerAccessEntity ) , useValue : mockPartnerAccessRepository } ,
36
+ { provide : getRepositoryToken ( PartnerAdminEntity ) , useValue : mockPartnerAdminRepository } ,
37
+ { provide : getRepositoryToken ( UserEntity ) , useValue : mockUserRepository } ,
38
+ ] ,
39
+ } ) . compile ( ) ;
40
+
41
+ service = module . get < PartnerService > ( PartnerService ) ;
42
+ } ) ;
43
+
44
+ it ( 'should be defined' , ( ) => {
45
+ expect ( service ) . toBeDefined ( ) ;
46
+ } ) ;
47
+
48
+ describe ( 'createPartner' , ( ) => {
49
+ it ( 'when supplied with correct data should return new partner' , async ( ) => {
50
+ const response = await service . createPartner ( createPartnerDto ) ;
51
+ expect ( response ) . toMatchObject ( createPartnerDto ) ;
52
+ } )
53
+ it ( 'when supplied with a name that already exists, it should throw error' , async ( ) => {
54
+ jest
55
+ . spyOn ( mockPartnerRepository , 'create' )
56
+ . mockImplementationOnce ( ( ) => {
57
+ throw ( { code : '23505' } ) ;
58
+ } ) ;
59
+ await expect ( service . createPartner ( createPartnerDto ) ) . rejects . toThrow ( ) ;
60
+ } )
61
+ } ) ;
62
+ } ) ;
0 commit comments