import { describe, it, expect, beforeEach } from 'vitest'; import { ProfileTestContext } from '../ProfileTestContext'; import { GetPendingSponsorshipRequestsUseCase } from '../../../../core/racing/application/use-cases/GetPendingSponsorshipRequestsUseCase'; import { Sponsor } from '../../../../core/racing/domain/entities/sponsor/Sponsor'; import { SponsorshipRequest } from '../../../../core/racing/domain/entities/SponsorshipRequest'; import { Money } from '../../../../core/racing/domain/value-objects/Money'; describe('GetPendingSponsorshipRequestsUseCase', () => { let context: ProfileTestContext; let useCase: GetPendingSponsorshipRequestsUseCase; beforeEach(async () => { context = new ProfileTestContext(); useCase = new GetPendingSponsorshipRequestsUseCase( context.sponsorshipRequestRepository, context.sponsorRepository ); await context.clear(); }); it('should retrieve pending sponsorship requests for a driver', async () => { // Given: A driver has pending sponsorship requests const driverId = 'd5'; const sponsorId = 's1'; const sponsor = Sponsor.create({ id: sponsorId, name: 'Sponsor 1', contactEmail: 'sponsor@example.com' }); await context.sponsorRepository.create(sponsor); const request = SponsorshipRequest.create({ id: 'sr1', sponsorId, entityType: 'driver', entityId: driverId, tier: 'main', offeredAmount: Money.create(1000, 'USD') }); await context.sponsorshipRequestRepository.create(request); // When: GetPendingSponsorshipRequestsUseCase.execute() is called const result = await useCase.execute({ entityType: 'driver', entityId: driverId }); // Then: It should return the pending requests expect(result.isOk()).toBe(true); const data = result.unwrap(); expect(data.requests).toHaveLength(1); expect(data.requests[0].request.id).toBe('sr1'); expect(data.requests[0].sponsor?.id.toString()).toBe(sponsorId); }); });