From bc7d6757f43b1f15b56c0d115b992592c72aa0b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius?= Date: Sun, 19 May 2024 23:11:34 -0300 Subject: [PATCH 1/5] test: cover getMany and create for partners entity --- src/partners/partners.service.spec.ts | 34 ++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/partners/partners.service.spec.ts b/src/partners/partners.service.spec.ts index f34d51e9..a0154e9e 100644 --- a/src/partners/partners.service.spec.ts +++ b/src/partners/partners.service.spec.ts @@ -1,21 +1,26 @@ import { Test, TestingModule } from '@nestjs/testing'; - import { PartnersService } from './partners.service'; import { PrismaService } from '../prisma/prisma.service'; +jest.mock('../prisma/prisma.service'); // Mock PrismaService + describe('PartnersService', () => { let service: PartnersService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [PartnersService], + providers: [ + PartnersService, + { provide: PrismaService, useClass: PrismaService }, // Provide PrismaService + ], }) - .useMocker((token) => { - if (token === PrismaService) { - return { - supplyCategory: { findMany: jest.fn().mockResolvedValue(0) }, - }; - } + .overrideProvider(PrismaService) + .useValue({ + // Use value for PrismaService + partners: { + findMany: jest.fn().mockResolvedValue([]), // Mock findMany to return an empty array + create: jest.fn().mockResolvedValue({}), // Mock create to return an empty object + }, }) .compile(); @@ -25,4 +30,17 @@ describe('PartnersService', () => { it('should be defined', () => { expect(service).toBeDefined(); }); + + it('should return all partners', async () => { + const partners = await service.index(); + expect(partners).toEqual([]); // Adjusted to check against an empty array + }); + + it('should create a partner', async () => { + await service.store({ + name: 'Partner 1', + link: 'https://partner1.com', + }); + expect(service).toBeDefined(); + }); }); From 683a1880388c2c4b82b39018e8edf47608f2347d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius?= Date: Mon, 20 May 2024 20:31:09 -0300 Subject: [PATCH 2/5] test: cover the whole partner controler use cases --- src/partners/partners.controller.spec.ts | 65 ++++++++++++++++++++---- 1 file changed, 56 insertions(+), 9 deletions(-) diff --git a/src/partners/partners.controller.spec.ts b/src/partners/partners.controller.spec.ts index 3d7226e8..0f1be75a 100644 --- a/src/partners/partners.controller.spec.ts +++ b/src/partners/partners.controller.spec.ts @@ -1,29 +1,76 @@ import { Test, TestingModule } from '@nestjs/testing'; import { PartnersController } from './partners.controller'; import { PartnersService } from './partners.service'; -import { PrismaService } from '../prisma/prisma.service'; +import { ServerResponse } from '../utils'; describe('PartnersController', () => { let controller: PartnersController; + let service: PartnersService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [PartnersController], providers: [PartnersService], }) - .useMocker((token) => { - if (token === PrismaService) { - return { - supplyCategory: { findMany: jest.fn().mockResolvedValue(0) }, - }; - } + .overrideProvider(PartnersService) + .useValue({ + index: jest.fn().mockResolvedValue([ + { + id: 1, + name: 'Partner 1', + link: 'https://partner1.com', + }, + ]), + store: jest.fn().mockResolvedValue({}), }) .compile(); controller = module.get(PartnersController); + service = module.get(PartnersService); }); - it('should be defined', () => { - expect(controller).toBeDefined(); + it('should return all partners', async () => { + const expectedResponse = new ServerResponse( + 200, + 'Successfully get partners', + [ + { + id: 1, + name: 'Partner 1', + link: 'https://partner1.com', + }, + ], + ); + const result = await controller.index(); + expect(result).toEqual(expectedResponse); + }); + + it('should create a partner', async () => { + const expectedResponse = new ServerResponse( + 201, + 'Successfully created partner', + ); + const result = await controller.store({ + name: 'Partner 1', + link: 'https://partner1.com', + }); + expect(result).toEqual(expectedResponse); + }); + + it('should throw an error when store fails', async () => { + const errorMessage = 'Failed to create partner'; + jest.spyOn(service, 'store').mockRejectedValue(new Error(errorMessage)); + await expect( + controller.store({ + name: 'Partner 1', + link: 'https://partner1.com', + }), + ).rejects.toThrow(); + }); + + it('should throw an error when index fails', async () => { + const errorMessage = 'Failed to get partners'; + jest.spyOn(service, 'index').mockRejectedValue(new Error(errorMessage)); + await expect(controller.index()).rejects.toThrow(); }); }); From 1dbd53b8d80e1fd38cf7cb5f2c5cb08426a23772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius?= Date: Mon, 20 May 2024 20:36:40 -0300 Subject: [PATCH 3/5] test: remove comments --- src/partners/partners.service.spec.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/partners/partners.service.spec.ts b/src/partners/partners.service.spec.ts index a0154e9e..d0e47b4e 100644 --- a/src/partners/partners.service.spec.ts +++ b/src/partners/partners.service.spec.ts @@ -2,7 +2,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { PartnersService } from './partners.service'; import { PrismaService } from '../prisma/prisma.service'; -jest.mock('../prisma/prisma.service'); // Mock PrismaService +jest.mock('../prisma/prisma.service'); describe('PartnersService', () => { let service: PartnersService; @@ -11,15 +11,14 @@ describe('PartnersService', () => { const module: TestingModule = await Test.createTestingModule({ providers: [ PartnersService, - { provide: PrismaService, useClass: PrismaService }, // Provide PrismaService + { provide: PrismaService, useClass: PrismaService }, ], }) .overrideProvider(PrismaService) .useValue({ - // Use value for PrismaService partners: { - findMany: jest.fn().mockResolvedValue([]), // Mock findMany to return an empty array - create: jest.fn().mockResolvedValue({}), // Mock create to return an empty object + findMany: jest.fn().mockResolvedValue([]), + create: jest.fn().mockResolvedValue({}), }, }) .compile(); @@ -33,7 +32,7 @@ describe('PartnersService', () => { it('should return all partners', async () => { const partners = await service.index(); - expect(partners).toEqual([]); // Adjusted to check against an empty array + expect(partners).toEqual([]); }); it('should create a partner', async () => { From f8aeb011219d36cb66dcf59dd62db0db39ecd7c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius?= Date: Mon, 20 May 2024 23:35:53 -0300 Subject: [PATCH 4/5] test: fix issues on parners test suite --- src/partners/partners.service.spec.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/partners/partners.service.spec.ts b/src/partners/partners.service.spec.ts index d0e47b4e..95c03f7e 100644 --- a/src/partners/partners.service.spec.ts +++ b/src/partners/partners.service.spec.ts @@ -6,6 +6,7 @@ jest.mock('../prisma/prisma.service'); describe('PartnersService', () => { let service: PartnersService; + let prismaService: PrismaService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -24,12 +25,8 @@ describe('PartnersService', () => { .compile(); service = module.get(PartnersService); + prismaService = module.get(PrismaService); }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); - it('should return all partners', async () => { const partners = await service.index(); expect(partners).toEqual([]); @@ -40,6 +37,13 @@ describe('PartnersService', () => { name: 'Partner 1', link: 'https://partner1.com', }); - expect(service).toBeDefined(); + + expect(prismaService.partners.create).toHaveBeenCalledWith({ + data: { + name: 'Partner 1', + link: 'https://partner1.com', + createdAt: expect.any(String), + }, + }); }); }); From d0d7782dca85240f7c464f77d2d0536849ede401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius?= Date: Mon, 20 May 2024 23:37:29 -0300 Subject: [PATCH 5/5] test: use new Date instead expect to createdAt field --- src/partners/partners.service.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/partners/partners.service.spec.ts b/src/partners/partners.service.spec.ts index 95c03f7e..6c508c49 100644 --- a/src/partners/partners.service.spec.ts +++ b/src/partners/partners.service.spec.ts @@ -42,7 +42,7 @@ describe('PartnersService', () => { data: { name: 'Partner 1', link: 'https://partner1.com', - createdAt: expect.any(String), + createdAt: new Date().toISOString(), }, }); });