import { classes } from '@automapper/classes'; import { AutomapperModule } from '@automapper/nestjs'; import { Test, TestingModule } from '@nestjs/testing'; import { OpaDecisionMaker } from '../../adapters/secondaries/opa.decision-maker'; import { Action } from '../../domain/dtos/action.enum'; import { ContextItem } from '../../domain/dtos/context-item'; import { DecisionRequest } from '../../domain/dtos/decision.request'; import { Domain } from '../../domain/dtos/domain.enum'; import { DecisionUseCase } from '../../domain/usecases/decision.usecase'; import { AuthorizationProfile } from '../../mappers/authorization.profile'; import { DecisionQuery } from '../../queries/decision.query'; const mockOpaDecisionMaker = { decide: jest.fn().mockResolvedValue(Promise.resolve(true)), }; describe('DecisionUseCase', () => { let decisionUseCase: DecisionUseCase; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [AutomapperModule.forRoot({ strategyInitializer: classes() })], providers: [ { provide: OpaDecisionMaker, useValue: mockOpaDecisionMaker, }, DecisionUseCase, AuthorizationProfile, ], }).compile(); decisionUseCase = module.get(DecisionUseCase); }); it('should be defined', () => { expect(decisionUseCase).toBeDefined(); }); describe('execute', () => { it('should validate an authorization', async () => { const decisionRequest: DecisionRequest = new DecisionRequest(); decisionRequest.uuid = 'bb281075-1b98-4456-89d6-c643d3044a91'; decisionRequest.domain = Domain.USER; decisionRequest.action = Action.CREATE; decisionRequest.context = [new ContextItem('context1', 'value1')]; expect( decisionUseCase.execute( new DecisionQuery( decisionRequest.uuid, decisionRequest.domain, decisionRequest.action, decisionRequest.context, ), ), ).toBeTruthy(); }); }); });