From bc100dd093cde1caa13d947a156bc9e399253c3b Mon Sep 17 00:00:00 2001 From: Bert <29619309+BertBR@users.noreply.github.com> Date: Thu, 23 May 2024 16:19:25 -0300 Subject: [PATCH] test: cover getMany and create for partners entity (#154) - Melhora a cobertura de testes para a entidade `Partner` --- src/partners/partners.controller.spec.ts | 65 ++++++++++++++++++++---- src/partners/partners.service.spec.ts | 41 +++++++++++---- 2 files changed, 87 insertions(+), 19 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(); }); }); diff --git a/src/partners/partners.service.spec.ts b/src/partners/partners.service.spec.ts index f34d51e9..6c508c49 100644 --- a/src/partners/partners.service.spec.ts +++ b/src/partners/partners.service.spec.ts @@ -1,28 +1,49 @@ import { Test, TestingModule } from '@nestjs/testing'; - import { PartnersService } from './partners.service'; import { PrismaService } from '../prisma/prisma.service'; +jest.mock('../prisma/prisma.service'); + describe('PartnersService', () => { let service: PartnersService; + let prismaService: PrismaService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [PartnersService], + providers: [ + PartnersService, + { provide: PrismaService, useClass: PrismaService }, + ], }) - .useMocker((token) => { - if (token === PrismaService) { - return { - supplyCategory: { findMany: jest.fn().mockResolvedValue(0) }, - }; - } + .overrideProvider(PrismaService) + .useValue({ + partners: { + findMany: jest.fn().mockResolvedValue([]), + create: jest.fn().mockResolvedValue({}), + }, }) .compile(); service = module.get(PartnersService); + prismaService = module.get(PrismaService); }); + it('should return all partners', async () => { + const partners = await service.index(); + expect(partners).toEqual([]); + }); + + it('should create a partner', async () => { + await service.store({ + name: 'Partner 1', + link: 'https://partner1.com', + }); - it('should be defined', () => { - expect(service).toBeDefined(); + expect(prismaService.partners.create).toHaveBeenCalledWith({ + data: { + name: 'Partner 1', + link: 'https://partner1.com', + createdAt: new Date().toISOString(), + }, + }); }); });