import { Test, TestingModule } from '@nestjs/testing' import { datatype } from 'faker' import { factory } from '../../../../test/factories' import { LanguageCountryCode } from '../../../utils/countries' import { MockedModule } from '../../../../test/types' import { Plan } from '../../../models/plan.model' import { PlanRepository } from '../../../repositories/plan.repository' import { Plans } from './plans' describe('Plans', () => { let subject: Plans let planRepository: MockedModule beforeAll(async () => { planRepository = { findEnabledAndVisible: jest.fn(), } const app: TestingModule = await Test.createTestingModule({ controllers: [], providers: [ { provide: PlanRepository, useValue: planRepository, }, Plans, ], }).compile() subject = app.get(Plans) }) afterEach(() => { jest.resetAllMocks() }) describe('#getAvailable', () => { let plans: Plan[] beforeEach(() => { planRepository.findEnabledAndVisible.mockResolvedValue(plans) }) describe('when has N2B plans', () => { beforeAll(async () => { plans = await factory.buildMany('plan:n2b', datatype.number({ min: 1, max: 3 })) }) it('returns the plans', async () => { await expect(subject.getAvailable(LanguageCountryCode.PT_BR, 'N2B')).resolves.toEqual( expect.arrayContaining(plans.map(plan => expect.objectContaining({ id: plan.id }))), ) }) }) describe('when does not have N2B plans', () => { beforeAll(async () => { plans = await factory.buildMany('plan:smartfit', datatype.number({ min: 1, max: 3 })) }) it('returns empty array', async () => { await expect(subject.getAvailable(LanguageCountryCode.PT_BR, 'N2B')).resolves.toHaveLength(0) }) }) }) })