import { describe, it, expect, beforeEach } from 'vitest'; import { MediaTestContext } from '../MediaTestContext'; import { InMemoryTeamRepository } from '@adapters/racing/persistence/inmemory/InMemoryTeamRepository'; import { InMemoryTeamMembershipRepository } from '@adapters/racing/persistence/inmemory/InMemoryTeamMembershipRepository'; import { Team } from '@core/racing/domain/entities/Team'; import { MediaReference } from '@core/domain/media/MediaReference'; describe('Team Logo Management', () => { let ctx: MediaTestContext; let teamRepository: InMemoryTeamRepository; let membershipRepository: InMemoryTeamMembershipRepository; beforeEach(() => { ctx = MediaTestContext.create(); ctx.reset(); teamRepository = new InMemoryTeamRepository(ctx.logger); membershipRepository = new InMemoryTeamMembershipRepository(ctx.logger); }); it('should upload and set a team logo', async () => { // Given: A team exists const team = Team.create({ id: 'team-1', name: 'Test Team', tag: 'TST', description: 'Test Description', ownerId: 'owner-1', leagues: [], }); await teamRepository.create(team); // When: A logo is uploaded const uploadResult = await ctx.mediaStorage.uploadMedia( Buffer.from('logo content'), { filename: 'logo.png', mimeType: 'image/png' } ); expect(uploadResult.success).toBe(true); const mediaId = 'media-1'; // In real use case, this comes from repository save // And: The team is updated with the new logo reference const updatedTeam = team.update({ logoRef: MediaReference.createUploaded(mediaId) }); await teamRepository.update(updatedTeam); // Then: The team should have the correct logo reference const savedTeam = await teamRepository.findById('team-1'); expect(savedTeam?.logoRef.type).toBe('uploaded'); expect(savedTeam?.logoRef.mediaId).toBe(mediaId); }); it('should retrieve team logos (simulated via repository)', async () => { const team1 = Team.create({ id: 'team-1', name: 'Team 1', tag: 'T1', description: 'Desc 1', ownerId: 'owner-1', leagues: ['league-1'], }); const team2 = Team.create({ id: 'team-2', name: 'Team 2', tag: 'T2', description: 'Desc 2', ownerId: 'owner-2', leagues: ['league-1'], }); await teamRepository.create(team1); await teamRepository.create(team2); const leagueTeams = await teamRepository.findByLeagueId('league-1'); expect(leagueTeams).toHaveLength(2); }); });