Files
gridpilot.gg/core/racing/application/use-cases/GetSponsorshipPricingUseCase.test.ts
2025-12-21 00:43:42 +01:00

61 lines
2.1 KiB
TypeScript

import { describe, it, expect, beforeEach, vi } from 'vitest';
import {
GetSponsorshipPricingUseCase,
GetSponsorshipPricingResult,
GetSponsorshipPricingInput,
GetSponsorshipPricingErrorCode,
} from './GetSponsorshipPricingUseCase';
import type { UseCaseOutputPort } from '@core/shared/application';
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
describe('GetSponsorshipPricingUseCase', () => {
let useCase: GetSponsorshipPricingUseCase;
let output: UseCaseOutputPort<GetSponsorshipPricingResult> & { present: ReturnType<typeof vi.fn> };
beforeEach(() => {
output = { present: vi.fn() } as unknown as UseCaseOutputPort<
GetSponsorshipPricingResult
> & { present: ReturnType<typeof vi.fn> };
useCase = new GetSponsorshipPricingUseCase(output);
});
it('should present sponsorship pricing tiers', async () => {
const input: GetSponsorshipPricingInput = {};
const result = await useCase.execute(input);
expect(result.isOk()).toBe(true);
expect(result.unwrap()).toBeUndefined();
expect(output.present).toHaveBeenCalledTimes(1);
expect(output.present).toHaveBeenCalledWith({
entityType: 'season',
entityId: '',
pricing: [
{ id: 'tier-bronze', level: 'Bronze', price: 100, currency: 'USD' },
{ id: 'tier-silver', level: 'Silver', price: 250, currency: 'USD' },
{ id: 'tier-gold', level: 'Gold', price: 500, currency: 'USD' },
],
});
});
it('should return repository error when execution fails', async () => {
const error = new Error('Something went wrong');
const failingUseCase = new GetSponsorshipPricingUseCase({
present: () => {
throw error;
},
} as unknown as UseCaseOutputPort<GetSponsorshipPricingResult>);
const input: GetSponsorshipPricingInput = {};
const result = await failingUseCase.execute(input);
expect(result.isErr()).toBe(true);
const err = result.unwrapErr() as ApplicationErrorCode<
GetSponsorshipPricingErrorCode,
{ message: string }
>;
expect(err.code).toBe('REPOSITORY_ERROR');
expect(err.details.message).toBe('Something went wrong');
});
});