integration tests
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
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
This commit is contained in:
127
tests/integration/sponsor/dashboard/sponsor-dashboard.test.ts
Normal file
127
tests/integration/sponsor/dashboard/sponsor-dashboard.test.ts
Normal file
@@ -0,0 +1,127 @@
|
||||
import { describe, it, expect, beforeEach } from 'vitest';
|
||||
import { GetSponsorDashboardUseCase } from '../../../../core/racing/application/use-cases/GetSponsorDashboardUseCase';
|
||||
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 Dashboard Use Case Orchestration', () => {
|
||||
let context: SponsorTestContext;
|
||||
let getSponsorDashboardUseCase: GetSponsorDashboardUseCase;
|
||||
|
||||
beforeEach(() => {
|
||||
context = new SponsorTestContext();
|
||||
getSponsorDashboardUseCase = new GetSponsorDashboardUseCase(
|
||||
context.sponsorRepository,
|
||||
context.seasonSponsorshipRepository,
|
||||
context.seasonRepository,
|
||||
context.leagueRepository,
|
||||
context.leagueMembershipRepository,
|
||||
context.raceRepository,
|
||||
);
|
||||
});
|
||||
|
||||
describe('GetSponsorDashboardUseCase - Success Path', () => {
|
||||
it('should retrieve dashboard metrics for a sponsor with active sponsorships', 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 <= 5; 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 <= 3; 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 getSponsorDashboardUseCase.execute({ sponsorId: 'sponsor-123' });
|
||||
|
||||
expect(result.isOk()).toBe(true);
|
||||
const dashboard = result.unwrap();
|
||||
|
||||
expect(dashboard.sponsorName).toBe('Test Company');
|
||||
expect(dashboard.metrics.races).toBe(3);
|
||||
expect(dashboard.metrics.drivers).toBe(5);
|
||||
expect(dashboard.sponsoredLeagues).toHaveLength(1);
|
||||
expect(dashboard.investment.activeSponsorships).toBe(1);
|
||||
expect(dashboard.investment.totalInvestment.amount).toBe(1000);
|
||||
});
|
||||
|
||||
it('should retrieve dashboard with zero values when sponsor has no sponsorships', async () => {
|
||||
const sponsor = Sponsor.create({
|
||||
id: 'sponsor-123',
|
||||
name: 'Test Company',
|
||||
contactEmail: 'test@example.com',
|
||||
});
|
||||
await context.sponsorRepository.create(sponsor);
|
||||
|
||||
const result = await getSponsorDashboardUseCase.execute({ sponsorId: 'sponsor-123' });
|
||||
|
||||
expect(result.isOk()).toBe(true);
|
||||
const dashboard = result.unwrap();
|
||||
expect(dashboard.metrics.impressions).toBe(0);
|
||||
expect(dashboard.sponsoredLeagues).toHaveLength(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('GetSponsorDashboardUseCase - Error Handling', () => {
|
||||
it('should return error when sponsor does not exist', async () => {
|
||||
const result = await getSponsorDashboardUseCase.execute({ sponsorId: 'non-existent-sponsor' });
|
||||
|
||||
expect(result.isErr()).toBe(true);
|
||||
const error = result.unwrapErr();
|
||||
expect(error.code).toBe('SPONSOR_NOT_FOUND');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user