Files
gridpilot.gg/tests/integration/sponsor/campaigns/sponsor-campaigns.test.ts
Marc Mintel 6df38a462a
Some checks failed
CI / lint-typecheck (pull_request) Failing after 4m50s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
integration tests
2026-01-23 11:44:59 +01:00

132 lines
4.8 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import { GetSponsorSponsorshipsUseCase } from '../../../../core/racing/application/use-cases/GetSponsorSponsorshipsUseCase';
import { Sponsor } from '../../../../core/racing/domain/entities/sponsor/Sponsor';
import { SeasonSponsorship } from '../../../../core/racing/domain/entities/season/SeasonSponsorship';
import { Season } from '../../../../core/racing/domain/entities/season/Season';
import { League } from '../../../../core/racing/domain/entities/League';
import { LeagueMembership } from '../../../../core/racing/domain/entities/LeagueMembership';
import { Race } from '../../../../core/racing/domain/entities/Race';
import { Money } from '../../../../core/racing/domain/value-objects/Money';
import { SponsorTestContext } from '../SponsorTestContext';
describe('Sponsor Campaigns Use Case Orchestration', () => {
let context: SponsorTestContext;
let getSponsorSponsorshipsUseCase: GetSponsorSponsorshipsUseCase;
beforeEach(() => {
context = new SponsorTestContext();
getSponsorSponsorshipsUseCase = new GetSponsorSponsorshipsUseCase(
context.sponsorRepository,
context.seasonSponsorshipRepository,
context.seasonRepository,
context.leagueRepository,
context.leagueMembershipRepository,
context.raceRepository,
);
});
describe('GetSponsorSponsorshipsUseCase - Success Path', () => {
it('should retrieve all sponsorships for a sponsor', async () => {
const sponsor = Sponsor.create({
id: 'sponsor-123',
name: 'Test Company',
contactEmail: 'test@example.com',
});
await context.sponsorRepository.create(sponsor);
const league1 = League.create({
id: 'league-1',
name: 'League 1',
description: 'Description 1',
ownerId: 'owner-1',
});
await context.leagueRepository.create(league1);
const season1 = Season.create({
id: 'season-1',
leagueId: 'league-1',
gameId: 'game-1',
name: 'Season 1',
startDate: new Date('2025-01-01'),
endDate: new Date('2025-12-31'),
});
await context.seasonRepository.create(season1);
const sponsorship1 = SeasonSponsorship.create({
id: 'sponsorship-1',
sponsorId: 'sponsor-123',
seasonId: 'season-1',
tier: 'main',
pricing: Money.create(1000, 'USD'),
status: 'active',
});
await context.seasonSponsorshipRepository.create(sponsorship1);
for (let i = 1; i <= 10; i++) {
const membership = LeagueMembership.create({
id: `membership-1-${i}`,
leagueId: 'league-1',
driverId: `driver-1-${i}`,
role: 'member',
status: 'active',
});
await context.leagueMembershipRepository.saveMembership(membership);
}
for (let i = 1; i <= 5; i++) {
const race = Race.create({
id: `race-1-${i}`,
leagueId: 'league-1',
track: 'Track 1',
car: 'GT3',
scheduledAt: new Date(`2025-0${i}-01`),
status: 'completed',
});
await context.raceRepository.create(race);
}
const result = await getSponsorSponsorshipsUseCase.execute({ sponsorId: 'sponsor-123' });
expect(result.isOk()).toBe(true);
const sponsorships = result.unwrap();
expect(sponsorships.sponsor.name.toString()).toBe('Test Company');
expect(sponsorships.sponsorships).toHaveLength(1);
expect(sponsorships.summary.totalSponsorships).toBe(1);
expect(sponsorships.summary.activeSponsorships).toBe(1);
expect(sponsorships.summary.totalInvestment.amount).toBe(1000);
const s1 = sponsorships.sponsorships[0];
expect(s1.metrics.drivers).toBe(10);
expect(s1.metrics.races).toBe(5);
expect(s1.metrics.impressions).toBe(5000);
});
it('should retrieve sponsorships with empty result when no sponsorships exist', async () => {
const sponsor = Sponsor.create({
id: 'sponsor-123',
name: 'Test Company',
contactEmail: 'test@example.com',
});
await context.sponsorRepository.create(sponsor);
const result = await getSponsorSponsorshipsUseCase.execute({ sponsorId: 'sponsor-123' });
expect(result.isOk()).toBe(true);
const sponsorships = result.unwrap();
expect(sponsorships.sponsorships).toHaveLength(0);
expect(sponsorships.summary.totalSponsorships).toBe(0);
});
});
describe('GetSponsorSponsorshipsUseCase - Error Handling', () => {
it('should return error when sponsor does not exist', async () => {
const result = await getSponsorSponsorshipsUseCase.execute({ sponsorId: 'non-existent-sponsor' });
expect(result.isErr()).toBe(true);
const error = result.unwrapErr();
expect(error.code).toBe('SPONSOR_NOT_FOUND');
});
});
});