website refactor
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { AnalyticsSnapshot } from '@core/analytics/domain/entities/AnalyticsSnapshot';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { AnalyticsSnapshot } from '@core/analytics/application/repositories/PageViewRepository';
|
||||
import { InMemoryAnalyticsSnapshotRepository } from './InMemoryAnalyticsSnapshotRepository';
|
||||
|
||||
describe('InMemoryAnalyticsSnapshotRepository', () => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { EngagementEvent } from '@core/analytics/domain/entities/EngagementEvent';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { EngagementEvent } from '@core/analytics/application/repositories/PageViewRepository';
|
||||
import { InMemoryEngagementRepository } from './InMemoryEngagementRepository';
|
||||
|
||||
describe('InMemoryEngagementRepository', () => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { PageView } from '@core/analytics/domain/entities/PageView';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { PageView } from '@core/analytics/application/repositories/PageViewRepository';
|
||||
import { InMemoryPageViewRepository } from './InMemoryPageViewRepository';
|
||||
|
||||
describe('InMemoryPageViewRepository', () => {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
|
||||
import { SignupWithEmailUseCase } from '@core/identity/application/use-cases/SignupWithEmailUseCase';
|
||||
import { CreateAchievementUseCase } from '@core/identity/application/use-cases/achievement/CreateAchievementUseCase';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
import {
|
||||
DRIVER_ACHIEVEMENTS,
|
||||
STEWARD_ACHIEVEMENTS,
|
||||
ADMIN_ACHIEVEMENTS,
|
||||
COMMUNITY_ACHIEVEMENTS,
|
||||
ADMIN_ACHIEVEMENTS,
|
||||
COMMUNITY_ACHIEVEMENTS,
|
||||
DRIVER_ACHIEVEMENTS,
|
||||
STEWARD_ACHIEVEMENTS,
|
||||
} from '@core/identity/domain/AchievementConstants';
|
||||
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { Game } from '@core/racing/domain/entities/Game';
|
||||
import { Season } from '@core/racing/domain/entities/season/Season';
|
||||
import type { LeagueScoringConfig } from '@core/racing/domain/entities/LeagueScoringConfig';
|
||||
import { Season } from '@core/racing/domain/entities/season/Season';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import {
|
||||
InMemoryChampionshipStandingRepository,
|
||||
InMemoryGameRepository,
|
||||
InMemoryLeagueScoringConfigRepository,
|
||||
InMemorySeasonRepository,
|
||||
InMemoryChampionshipStandingRepository,
|
||||
InMemoryGameRepository,
|
||||
InMemoryLeagueScoringConfigRepository,
|
||||
InMemorySeasonRepository,
|
||||
} from '../racing/persistence/inmemory/InMemoryScoringRepositories';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { getLeagueScoringPresetById } from './LeagueScoringPresets';
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
|
||||
@@ -1,16 +1,12 @@
|
||||
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { AuthRepository } from '@core/identity/domain/repositories/AuthRepository';
|
||||
import type { PasswordHashingService } from '@core/identity/domain/services/PasswordHashingService';
|
||||
import type { AdminUserRepository } from '@core/admin/domain/repositories/AdminUserRepository';
|
||||
import { User } from '@core/identity/domain/entities/User';
|
||||
import { AdminUser } from '@core/admin/domain/entities/AdminUser';
|
||||
import { EmailAddress } from '@core/identity/domain/value-objects/EmailAddress';
|
||||
import { UserId } from '@core/identity/domain/value-objects/UserId';
|
||||
import { Email } from '@core/admin/domain/value-objects/Email';
|
||||
import { UserRole } from '@core/admin/domain/value-objects/UserRole';
|
||||
import { UserStatus } from '@core/admin/domain/value-objects/UserStatus';
|
||||
import { User } from '@core/identity/domain/entities/User';
|
||||
import { EmailAddress } from '@core/identity/domain/value-objects/EmailAddress';
|
||||
import { PasswordHash } from '@core/identity/domain/value-objects/PasswordHash';
|
||||
import { UserId } from '@core/identity/domain/value-objects/UserId';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
// Import the class we're testing (will be created)
|
||||
import { SeedDemoUsers } from './SeedDemoUsers';
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { AuthRepository } from '@core/identity/domain/repositories/AuthRepository';
|
||||
import type { PasswordHashingService } from '@core/identity/domain/services/PasswordHashingService';
|
||||
import type { AdminUserRepository } from '@core/admin/domain/repositories/AdminUserRepository';
|
||||
import { User } from '@core/identity/domain/entities/User';
|
||||
import { AdminUser } from '@core/admin/domain/entities/AdminUser';
|
||||
import { EmailAddress } from '@core/identity/domain/value-objects/EmailAddress';
|
||||
import { UserId } from '@core/identity/domain/value-objects/UserId';
|
||||
import { Email } from '@core/admin/domain/value-objects/Email';
|
||||
import { User } from '@core/identity/domain/entities/User';
|
||||
import { EmailAddress } from '@core/identity/domain/value-objects/EmailAddress';
|
||||
import { PasswordHash } from '@core/identity/domain/value-objects/PasswordHash';
|
||||
import { UserId } from '@core/identity/domain/value-objects/UserId';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { stableUuidFromSeedKey } from './racing/SeedIdHelper';
|
||||
|
||||
interface DemoUserSpec {
|
||||
@@ -38,7 +35,7 @@ export class SeedDemoUsers {
|
||||
{
|
||||
email: 'demo.sponsor@example.com',
|
||||
password: 'Demo1234!',
|
||||
needsAdminUser: true,
|
||||
needsAdminUser: false,
|
||||
needsPrimaryDriverId: false,
|
||||
roles: ['sponsor'],
|
||||
displayName: 'Jane Sponsor',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
// IMPORTANT: SeedRacingData imports createRacingSeed from ./racing/RacingSeed
|
||||
// We mock it to avoid heavy seed generation and to keep the test focused on
|
||||
@@ -34,7 +34,7 @@ vi.mock('./racing/RacingSeed', () => {
|
||||
};
|
||||
});
|
||||
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { SeedRacingData, type RacingSeedDependencies } from './SeedRacingData';
|
||||
|
||||
describe('SeedRacingData force reseed behavior', () => {
|
||||
|
||||
@@ -1,39 +1,14 @@
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { DriverRepository } from '@core/racing/domain/repositories/DriverRepository';
|
||||
import type { LeagueRepository } from '@core/racing/domain/repositories/LeagueRepository';
|
||||
import type { RaceRepository } from '@core/racing/domain/repositories/RaceRepository';
|
||||
import type { ResultRepository } from '@core/racing/domain/repositories/ResultRepository';
|
||||
import type { StandingRepository } from '@core/racing/domain/repositories/StandingRepository';
|
||||
import type { LeagueMembershipRepository } from '@core/racing/domain/repositories/LeagueMembershipRepository';
|
||||
import type { RaceRegistrationRepository } from '@core/racing/domain/repositories/RaceRegistrationRepository';
|
||||
import type { TeamRepository } from '@core/racing/domain/repositories/TeamRepository';
|
||||
import type { TeamMembershipRepository } from '@core/racing/domain/repositories/TeamMembershipRepository';
|
||||
import type { SponsorRepository } from '@core/racing/domain/repositories/SponsorRepository';
|
||||
import type { SeasonRepository } from '@core/racing/domain/repositories/SeasonRepository';
|
||||
import type { LeagueScoringConfigRepository } from '@core/racing/domain/repositories/LeagueScoringConfigRepository';
|
||||
import type { SeasonSponsorshipRepository } from '@core/racing/domain/repositories/SeasonSponsorshipRepository';
|
||||
import type { SponsorshipRequestRepository } from '@core/racing/domain/repositories/SponsorshipRequestRepository';
|
||||
import type { LeagueWalletRepository } from '@core/racing/domain/repositories/LeagueWalletRepository';
|
||||
import type { TransactionRepository } from '@core/racing/domain/repositories/TransactionRepository';
|
||||
import type { Season } from '@core/racing/domain/entities/season/Season';
|
||||
import { getLeagueScoringPresetById } from './LeagueScoringPresets';
|
||||
import type { ProtestRepository } from '@core/racing/domain/repositories/ProtestRepository';
|
||||
import type { PenaltyRepository } from '@core/racing/domain/repositories/PenaltyRepository';
|
||||
import type { FeedRepository } from '@core/social/domain/repositories/FeedRepository';
|
||||
import type { SocialGraphRepository } from '@core/social/domain/repositories/SocialGraphRepository';
|
||||
import type { DriverStatsRepository } from '@core/racing/domain/repositories/DriverStatsRepository';
|
||||
import type { TeamStatsRepository, TeamStats } from '@core/racing/domain/repositories/TeamStatsRepository';
|
||||
import type { MediaRepository } from '@core/racing/domain/repositories/MediaRepository';
|
||||
import type { AuthRepository } from '@core/identity/domain/repositories/AuthRepository';
|
||||
import type { PasswordHashingService } from '@core/identity/domain/services/PasswordHashingService';
|
||||
import type { AdminUserRepository } from '@core/admin/domain/repositories/AdminUserRepository';
|
||||
import { createRacingSeed } from './racing/RacingSeed';
|
||||
import { seedId } from './racing/SeedIdHelper';
|
||||
import type { DriverStats } from '@core/racing/application/use-cases/DriverStatsUseCase';
|
||||
import { Driver } from '@core/racing/domain/entities/Driver';
|
||||
import { Result } from '@core/racing/domain/entities/result/Result';
|
||||
import type { Season } from '@core/racing/domain/entities/season/Season';
|
||||
import { Standing } from '@core/racing/domain/entities/Standing';
|
||||
import { Team } from '@core/racing/domain/entities/Team';
|
||||
import type { DriverStats } from '@core/racing/application/use-cases/DriverStatsUseCase';
|
||||
import type { TeamStats } from '@core/racing/domain/repositories/TeamStatsRepository';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { getLeagueScoringPresetById } from './LeagueScoringPresets';
|
||||
import { createRacingSeed } from './racing/RacingSeed';
|
||||
import { seedId } from './racing/SeedIdHelper';
|
||||
|
||||
export type RacingSeedDependencies = {
|
||||
driverRepository: IDriverRepository;
|
||||
|
||||
@@ -62,7 +62,7 @@ export class RacingDriverFactory {
|
||||
}
|
||||
|
||||
// Create system-default reference with avatar variant
|
||||
return MediaReference.systemDefault(avatarVariant);
|
||||
return MediaReference.createSystemDefault('avatar', avatarVariant);
|
||||
}
|
||||
|
||||
create(): Driver[] {
|
||||
|
||||
@@ -48,7 +48,7 @@ export class RacingTeamFactory {
|
||||
leagues: teamLeagues,
|
||||
isRecruiting,
|
||||
createdAt: faker.date.past({ years: 2, refDate: this.baseDate }),
|
||||
logoRef: MediaReference.generated('team', teamId),
|
||||
logoRef: MediaReference.createGenerated(`team-${teamId}`),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ module.exports = {
|
||||
fixable: null,
|
||||
schema: [],
|
||||
messages: {
|
||||
invalidNaming: 'Adapter classes should end with "Adapter", "Repository", "Service", or "Entity". Found: {{name}}',
|
||||
invalidNaming: 'Adapter classes should end with "Adapter", "Repository", "Service", "Factory" or "Entity". Found: {{name}}',
|
||||
},
|
||||
},
|
||||
|
||||
@@ -20,7 +20,7 @@ module.exports = {
|
||||
if (!filename.includes('adapters/')) return;
|
||||
|
||||
const name = node.id.name;
|
||||
const isValidName = /(.+)(Adapter|Repository|Service|Entity|Mapper|Schema|Guard|Module|Controller)$/.test(name);
|
||||
const isValidName = /(.+)(Adapter|Factory|Repository|Service|Entity|Mapper|Schema|Guard|Module|Controller)$/.test(name);
|
||||
|
||||
if (!isValidName) {
|
||||
context.report({
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { UserAchievement } from '@core/identity';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryAchievementRepository } from './InMemoryAchievementRepository';
|
||||
|
||||
describe('InMemoryAchievementRepository (identity)', () => {
|
||||
|
||||
@@ -4,12 +4,13 @@
|
||||
* In-memory implementation of IAchievementRepository
|
||||
*/
|
||||
|
||||
import { Achievement, AchievementCategory, IAchievementRepository, UserAchievement } from "@core/identity";
|
||||
import { Achievement } from "@core/identity/domain/entities/Achievement";
|
||||
import { AchievementCategory } from "@core/identity/domain/types/AchievementTypes";
|
||||
import { AchievementRepository } from "@core/identity/domain/repositories/AchievementRepository";
|
||||
import { UserAchievement } from "@core/identity/domain/entities/UserAchievement";
|
||||
import { ADMIN_ACHIEVEMENTS, COMMUNITY_ACHIEVEMENTS, DRIVER_ACHIEVEMENTS, STEWARD_ACHIEVEMENTS } from "@core/identity/domain/AchievementConstants";
|
||||
import { Logger } from "@core/shared/domain";
|
||||
|
||||
|
||||
|
||||
export class InMemoryAchievementRepository implements AchievementRepository {
|
||||
private achievements: Map<string, Achievement> = new Map();
|
||||
private userAchievements: Map<string, UserAchievement> = new Map();
|
||||
@@ -282,4 +283,4 @@ export class InMemoryAchievementRepository implements AchievementRepository {
|
||||
this.userAchievements.clear();
|
||||
this.logger.info('All achievement data cleared.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { UserId } from '@core/identity';
|
||||
import { User } from '@core/identity/domain/entities/User';
|
||||
import { InMemoryUserRepository } from './InMemoryUserRepository';
|
||||
import { InMemoryAuthRepository } from './InMemoryAuthRepository';
|
||||
import { UserId } from '@core/identity/domain/value-objects/UserId';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryPasswordHashingService } from '../../services/InMemoryPasswordHashingService';
|
||||
import { InMemoryAuthRepository } from './InMemoryAuthRepository';
|
||||
import { InMemoryUserRepository } from './InMemoryUserRepository';
|
||||
|
||||
describe('InMemoryAuthRepository', () => {
|
||||
let mockLogger: Logger;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { SponsorAccount } from '@core/identity/domain/entities/SponsorAccount';
|
||||
import { UserId } from '@core/identity/domain/value-objects/UserId';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { UserId, type SponsorAccount } from '@core/identity';
|
||||
import { InMemorySponsorAccountRepository } from './InMemorySponsorAccountRepository';
|
||||
|
||||
describe('InMemorySponsorAccountRepository', () => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { UserRating } from '@core/identity';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryUserRatingRepository } from './InMemoryUserRatingRepository';
|
||||
|
||||
describe('InMemoryUserRatingRepository', () => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { StoredUser } from '@core/identity/domain/repositories/UserRepository';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryUserRepository } from './InMemoryUserRepository';
|
||||
|
||||
describe('InMemoryUserRepository', () => {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { randomUUID } from 'node:crypto';
|
||||
|
||||
import { tryGetHttpRequestContext } from '@adapters/http/RequestContext';
|
||||
import type { AuthenticatedUser } from '@core/identity/application/ports/IdentityProviderPort';
|
||||
import type { AuthSession, IdentitySessionPort } from '@core/identity/application/ports/IdentitySessionPort';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { tryGetHttpRequestContext } from '@adapters/http/RequestContext';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
const COOKIE_NAME = 'gp_session';
|
||||
const SESSION_TTL_MS = 3600 * 1000; // 1 hour
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { AvatarGenerationRequest } from '@core/media/domain/entities/AvatarGenerationRequest';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryAvatarGenerationRepository } from './InMemoryAvatarGenerationRepository';
|
||||
|
||||
describe('InMemoryAvatarGenerationRepository', () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { InMemoryFaceValidationAdapter } from './InMemoryFaceValidationAdapter';
|
||||
|
||||
describe('InMemoryFaceValidationAdapter', () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { FaceValidationPort, FaceValidationResult } from '@core/media/application/ports/FaceValidationPort';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryFaceValidationAdapter implements FaceValidationPort {
|
||||
constructor(private readonly logger: Logger) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { InMemoryImageServiceAdapter } from './InMemoryImageServiceAdapter';
|
||||
|
||||
describe('InMemoryImageServiceAdapter', () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { ImageServicePort } from '@core/racing/application/ports/ImageServicePort';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryImageServiceAdapter implements ImageServicePort {
|
||||
constructor(private readonly logger: Logger) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { NotificationPreference } from '@core/notifications/domain/entities/NotificationPreference';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryNotificationPreferenceRepository } from './InMemoryNotificationPreferenceRepository';
|
||||
|
||||
describe('InMemoryNotificationPreferenceRepository', () => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { Notification } from '@core/notifications/domain/entities/Notification';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryNotificationRepository } from './InMemoryNotificationRepository';
|
||||
|
||||
describe('InMemoryNotificationRepository', () => {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
import { Notification } from '@core/notifications/domain/entities/Notification';
|
||||
import type { NotificationRepository } from '@core/notifications/domain/repositories/NotificationRepository';
|
||||
import type { NotificationType } from '@core/notifications/domain/types/NotificationTypes';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryNotificationRepository implements NotificationRepository {
|
||||
private notifications: Map<string, Notification> = new Map();
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import type { NotificationService, SendNotificationCommand } from '@core/notifications/application/ports/NotificationService';
|
||||
import type { NotificationRepository } from '@core/notifications/domain/repositories/NotificationRepository';
|
||||
import type { NotificationPreferenceRepository } from '@core/notifications/domain/repositories/NotificationPreferenceRepository';
|
||||
import type { NotificationGatewayRegistry } from '@core/notifications/application/ports/NotificationGateway';
|
||||
import type { NotificationService, SendNotificationCommand } from '@core/notifications/application/ports/NotificationService';
|
||||
import { SendNotificationUseCase } from '@core/notifications/application/use-cases/SendNotificationUseCase';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class NotificationServiceAdapter implements NotificationService {
|
||||
private readonly useCase: SendNotificationUseCase;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryCarRepository } from './InMemoryCarRepository';
|
||||
import { Car } from '@core/racing/domain/entities/Car';
|
||||
import { CarClass } from '@core/racing/domain/entities/CarClass';
|
||||
import { CarLicense } from '@core/racing/domain/entities/CarLicense';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryCarRepository } from './InMemoryCarRepository';
|
||||
|
||||
describe('InMemoryCarRepository', () => {
|
||||
let repository: InMemoryCarRepository;
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
* Stores data in Map structure with UUID generation.
|
||||
*/
|
||||
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
import { Car } from '@core/racing/domain/entities/Car';
|
||||
import { CarClass } from '@core/racing/domain/entities/CarClass';
|
||||
import { CarLicense } from '@core/racing/domain/entities/CarLicense';
|
||||
import type { CarRepository } from '@core/racing/domain/repositories/CarRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
export class InMemoryCarRepository implements CarRepository {
|
||||
private cars: Map<string, Car>;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryDriverRepository } from './InMemoryDriverRepository';
|
||||
import { Driver } from '@core/racing/domain/entities/Driver';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { MediaReference } from '@core/domain/media/MediaReference';
|
||||
import { Driver } from '@core/racing/domain/entities/Driver';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryDriverRepository } from './InMemoryDriverRepository';
|
||||
|
||||
describe('InMemoryDriverRepository', () => {
|
||||
let repository: InMemoryDriverRepository;
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
* Stores computed driver statistics for caching and frontend queries.
|
||||
*/
|
||||
|
||||
import type { DriverStatsRepository } from '@core/racing/domain/repositories/DriverStatsRepository';
|
||||
import type { DriverStats } from '@core/racing/application/use-cases/DriverStatsUseCase';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { DriverStatsRepository } from '@core/racing/domain/repositories/DriverStatsRepository';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryDriverStatsRepository implements DriverStatsRepository {
|
||||
private stats = new Map<string, DriverStats>();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryGameRepository } from './InMemoryGameRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
|
||||
describe('InMemoryGameRepository', () => {
|
||||
let repository: InMemoryGameRepository;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { InMemoryLeagueMembershipRepository } from './InMemoryLeagueMembershipRepository';
|
||||
|
||||
describe('InMemoryLeagueMembershipRepository', () => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryLeagueRepository } from './InMemoryLeagueRepository';
|
||||
import { League } from '@core/racing/domain/entities/League';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryLeagueRepository } from './InMemoryLeagueRepository';
|
||||
|
||||
describe('InMemoryLeagueRepository', () => {
|
||||
let repository: InMemoryLeagueRepository;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryLeagueScoringConfigRepository } from './InMemoryLeagueScoringConfigRepository';
|
||||
import { LeagueScoringConfig, type LeagueScoringConfigProps } from '@core/racing/domain/entities/LeagueScoringConfig';
|
||||
import type { ChampionshipConfig } from '@core/racing/domain/types/ChampionshipConfig';
|
||||
import { PointsTable } from '@core/racing/domain/value-objects/PointsTable';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryLeagueScoringConfigRepository } from './InMemoryLeagueScoringConfigRepository';
|
||||
|
||||
const mockPointsTable = new PointsTable({ 1: 25, 2: 18, 3: 15 });
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryLeagueStandingsRepository } from './InMemoryLeagueStandingsRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { RawStanding } from '@core/league/application/ports/LeagueStandingsRepository';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryLeagueStandingsRepository } from './InMemoryLeagueStandingsRepository';
|
||||
|
||||
describe('InMemoryLeagueStandingsRepository', () => {
|
||||
let repository: InMemoryLeagueStandingsRepository;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryLeagueWalletRepository } from './InMemoryLeagueWalletRepository';
|
||||
import { LeagueWallet } from '@core/racing/domain/entities/league-wallet/LeagueWallet';
|
||||
import { Money } from '@core/racing/domain/value-objects/Money';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryLeagueWalletRepository } from './InMemoryLeagueWalletRepository';
|
||||
|
||||
describe('InMemoryLeagueWalletRepository', () => {
|
||||
let repository: InMemoryLeagueWalletRepository;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
import { LeagueWallet } from '@core/racing/domain/entities/league-wallet/LeagueWallet';
|
||||
import type { LeagueWalletRepository } from '@core/racing/domain/repositories/LeagueWalletRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryLeagueWalletRepository implements LeagueWalletRepository {
|
||||
private wallets: Map<string, LeagueWallet> = new Map();
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryLiveryRepository } from './InMemoryLiveryRepository';
|
||||
import { DriverLivery } from '@core/racing/domain/entities/DriverLivery';
|
||||
import { LiveryTemplate } from '@core/racing/domain/entities/LiveryTemplate';
|
||||
import { LiveryDecal } from '@core/racing/domain/value-objects/LiveryDecal';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryLiveryRepository } from './InMemoryLiveryRepository';
|
||||
|
||||
describe('InMemoryLiveryRepository', () => {
|
||||
let repository: InMemoryLiveryRepository;
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
* Mock repository for testing and development
|
||||
*/
|
||||
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import type { DriverLivery } from '../../../../core/racing/domain/entities/DriverLivery';
|
||||
import type { LiveryTemplate } from '../../../../core/racing/domain/entities/LiveryTemplate';
|
||||
import type { LiveryRepository } from '../../../../core/racing/domain/repositories/LiveryRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
|
||||
export class InMemoryLiveryRepository implements LiveryRepository {
|
||||
private driverLiveries: Map<string, DriverLivery> = new Map();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryPenaltyRepository } from './InMemoryPenaltyRepository';
|
||||
import { Penalty } from '@core/racing/domain/entities/penalty/Penalty';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryPenaltyRepository } from './InMemoryPenaltyRepository';
|
||||
|
||||
describe('InMemoryPenaltyRepository', () => {
|
||||
let repository: InMemoryPenaltyRepository;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
import type { Penalty } from '@core/racing/domain/entities/penalty/Penalty';
|
||||
import type { PenaltyRepository } from '@core/racing/domain/repositories/PenaltyRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryPenaltyRepository implements PenaltyRepository {
|
||||
private penalties: Map<string, Penalty> = new Map();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryProtestRepository } from './InMemoryProtestRepository';
|
||||
import { Protest } from '@core/racing/domain/entities/Protest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryProtestRepository } from './InMemoryProtestRepository';
|
||||
|
||||
describe('InMemoryProtestRepository', () => {
|
||||
let repository: InMemoryProtestRepository;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryRaceEventRepository } from './InMemoryRaceEventRepository';
|
||||
import { RaceEvent } from '@core/racing/domain/entities/RaceEvent';
|
||||
import { Session } from '@core/racing/domain/entities/Session';
|
||||
import { SessionType } from '@core/racing/domain/value-objects/SessionType';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryRaceEventRepository } from './InMemoryRaceEventRepository';
|
||||
|
||||
describe('InMemoryRaceEventRepository', () => {
|
||||
let repository: InMemoryRaceEventRepository;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/**
|
||||
* In-memory implementation of IRaceEventRepository for development/testing.
|
||||
*/
|
||||
import type { RaceEventRepository } from '@core/racing/domain/repositories/RaceEventRepository';
|
||||
import type { RaceEvent } from '@core/racing/domain/entities/RaceEvent';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { RaceEventRepository } from '@core/racing/domain/repositories/RaceEventRepository';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryRaceEventRepository implements RaceEventRepository {
|
||||
private raceEvents: Map<string, RaceEvent> = new Map();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryRaceRegistrationRepository } from './InMemoryRaceRegistrationRepository';
|
||||
import { RaceRegistration } from '@core/racing/domain/entities/RaceRegistration';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryRaceRegistrationRepository } from './InMemoryRaceRegistrationRepository';
|
||||
|
||||
describe('InMemoryRaceRegistrationRepository', () => {
|
||||
let repository: InMemoryRaceRegistrationRepository;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryRaceRepository } from './InMemoryRaceRepository';
|
||||
import { Race, type RaceStatusValue } from '@core/racing/domain/entities/Race';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryRaceRepository } from './InMemoryRaceRepository';
|
||||
|
||||
describe('InMemoryRaceRepository', () => {
|
||||
let repository: InMemoryRaceRepository;
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryResultRepository } from './InMemoryResultRepository';
|
||||
import { Result } from '@core/racing/domain/entities/result/Result';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { RaceRepository } from '@core/racing/domain/repositories/RaceRepository';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryResultRepository } from './InMemoryResultRepository';
|
||||
|
||||
describe('InMemoryResultRepository', () => {
|
||||
let repository: InMemoryResultRepository;
|
||||
|
||||
@@ -5,11 +5,10 @@
|
||||
* Stores data in Map structure with UUID generation.
|
||||
*/
|
||||
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
import { Result } from '@core/racing/domain/entities/result/Result';
|
||||
import type { ResultRepository } from '@core/racing/domain/repositories/ResultRepository';
|
||||
import type { RaceRepository } from '@core/racing/domain/repositories/RaceRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
export class InMemoryResultRepository implements ResultRepository {
|
||||
private results: Map<string, Result>;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import {
|
||||
InMemoryGameRepository,
|
||||
InMemorySeasonRepository,
|
||||
InMemoryLeagueScoringConfigRepository,
|
||||
InMemoryChampionshipStandingRepository,
|
||||
} from './InMemoryScoringRepositories';
|
||||
import { Game } from '@core/racing/domain/entities/Game';
|
||||
import { Season } from '@core/racing/domain/entities/season/Season';
|
||||
import { LeagueScoringConfig } from '@core/racing/domain/entities/LeagueScoringConfig';
|
||||
import { ChampionshipStanding } from '@core/racing/domain/entities/championship/ChampionshipStanding';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { Season } from '@core/racing/domain/entities/season/Season';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import {
|
||||
InMemoryChampionshipStandingRepository,
|
||||
InMemoryGameRepository,
|
||||
InMemoryLeagueScoringConfigRepository,
|
||||
InMemorySeasonRepository,
|
||||
} from './InMemoryScoringRepositories';
|
||||
|
||||
describe('InMemoryScoringRepositories', () => {
|
||||
let mockLogger: Logger;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { Game } from '@core/racing/domain/entities/Game';
|
||||
import { Season } from '@core/racing/domain/entities/season/Season';
|
||||
import type { LeagueScoringConfig } from '@core/racing/domain/entities/LeagueScoringConfig';
|
||||
import type { GameRepository } from '@core/racing/domain/repositories/GameRepository';
|
||||
import type { SeasonRepository } from '@core/racing/domain/repositories/SeasonRepository';
|
||||
import type { LeagueScoringConfigRepository } from '@core/racing/domain/repositories/LeagueScoringConfigRepository';
|
||||
import type { ChampionshipStandingRepository } from '@core/racing/domain/repositories/ChampionshipStandingRepository';
|
||||
import { ChampionshipStanding } from '@core/racing/domain/entities/championship/ChampionshipStanding';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { Game } from '@core/racing/domain/entities/Game';
|
||||
import type { LeagueScoringConfig } from '@core/racing/domain/entities/LeagueScoringConfig';
|
||||
import { Season } from '@core/racing/domain/entities/season/Season';
|
||||
import type { ChampionshipStandingRepository } from '@core/racing/domain/repositories/ChampionshipStandingRepository';
|
||||
import type { GameRepository } from '@core/racing/domain/repositories/GameRepository';
|
||||
import type { LeagueScoringConfigRepository } from '@core/racing/domain/repositories/LeagueScoringConfigRepository';
|
||||
import type { SeasonRepository } from '@core/racing/domain/repositories/SeasonRepository';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
|
||||
export class InMemoryGameRepository implements GameRepository {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemorySeasonRepository } from './InMemorySeasonRepository';
|
||||
import { Season } from '@core/racing/domain/entities/season/Season';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemorySeasonRepository } from './InMemorySeasonRepository';
|
||||
|
||||
describe('InMemorySeasonRepository', () => {
|
||||
let repository: InMemorySeasonRepository;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemorySeasonSponsorshipRepository } from './InMemorySeasonSponsorshipRepository';
|
||||
import { SeasonSponsorship, type SponsorshipTier } from '@core/racing/domain/entities/season/SeasonSponsorship';
|
||||
import { Money } from '@core/racing/domain/value-objects/Money';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemorySeasonSponsorshipRepository } from './InMemorySeasonSponsorshipRepository';
|
||||
|
||||
describe('InMemorySeasonSponsorshipRepository', () => {
|
||||
let repository: InMemorySeasonSponsorshipRepository;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
import type { SeasonSponsorship, SponsorshipTier } from '@core/racing/domain/entities/season/SeasonSponsorship';
|
||||
import type { SeasonSponsorshipRepository } from '@core/racing/domain/repositories/SeasonSponsorshipRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemorySeasonSponsorshipRepository implements SeasonSponsorshipRepository {
|
||||
private sponsorships: Map<string, SeasonSponsorship> = new Map();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemorySessionRepository } from './InMemorySessionRepository';
|
||||
import { Session, SessionStatus } from '@core/racing/domain/entities/Session';
|
||||
import { SessionType } from '@core/racing/domain/value-objects/SessionType';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemorySessionRepository } from './InMemorySessionRepository';
|
||||
|
||||
describe('InMemorySessionRepository', () => {
|
||||
let repository: InMemorySessionRepository;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/**
|
||||
* In-memory implementation of ISessionRepository for development/testing.
|
||||
*/
|
||||
import type { SessionRepository } from '@core/racing/domain/repositories/SessionRepository';
|
||||
import type { Session } from '@core/racing/domain/entities/Session';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { SessionRepository } from '@core/racing/domain/repositories/SessionRepository';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemorySessionRepository implements SessionRepository {
|
||||
private sessions: Map<string, Session> = new Map();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemorySponsorRepository } from './InMemorySponsorRepository';
|
||||
import { Sponsor } from '@core/racing/domain/entities/sponsor/Sponsor';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemorySponsorRepository } from './InMemorySponsorRepository';
|
||||
|
||||
describe('InMemorySponsorRepository', () => {
|
||||
let repository: InMemorySponsorRepository;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemorySponsorshipPricingRepository } from './InMemorySponsorshipPricingRepository';
|
||||
import { SponsorshipPricing } from '@core/racing/domain/value-objects/SponsorshipPricing';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemorySponsorshipPricingRepository } from './InMemorySponsorshipPricingRepository';
|
||||
|
||||
describe('InMemorySponsorshipPricingRepository', () => {
|
||||
let repository: InMemorySponsorshipPricingRepository;
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
* InMemory implementation of ISponsorshipPricingRepository
|
||||
*/
|
||||
|
||||
import type { SponsorableEntityType } from '@core/racing/domain/entities/SponsorshipRequest';
|
||||
import type { SponsorshipPricingRepository } from '@core/racing/domain/repositories/SponsorshipPricingRepository';
|
||||
import { SponsorshipPricing } from '@core/racing/domain/value-objects/SponsorshipPricing';
|
||||
import type { SponsorableEntityType } from '@core/racing/domain/entities/SponsorshipRequest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemorySponsorshipPricingRepository implements SponsorshipPricingRepository {
|
||||
private pricings: Map<string, { entityType: SponsorableEntityType; entityId: string; pricing: SponsorshipPricing }> = new Map();
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemorySponsorshipRequestRepository } from './InMemorySponsorshipRequestRepository';
|
||||
import { SponsorshipRequest, SponsorableEntityType, SponsorshipRequestStatus } from '@core/racing/domain/entities/SponsorshipRequest';
|
||||
import { Money } from '@core/racing/domain/value-objects/Money';
|
||||
import { SponsorshipTier } from '@core/racing/domain/entities/season/SeasonSponsorship';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { SponsorableEntityType, SponsorshipRequest, SponsorshipRequestStatus } from '@core/racing/domain/entities/SponsorshipRequest';
|
||||
import { Money } from '@core/racing/domain/value-objects/Money';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemorySponsorshipRequestRepository } from './InMemorySponsorshipRequestRepository';
|
||||
|
||||
describe('InMemorySponsorshipRequestRepository', () => {
|
||||
let repository: InMemorySponsorshipRequestRepository;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryStandingRepository } from './InMemoryStandingRepository';
|
||||
import { Standing } from '@core/racing/domain/entities/Standing';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryStandingRepository } from './InMemoryStandingRepository';
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
|
||||
|
||||
@@ -7,10 +7,7 @@
|
||||
|
||||
import { Standing } from '@core/racing/domain/entities/Standing';
|
||||
import type { StandingRepository } from '@core/racing/domain/repositories/StandingRepository';
|
||||
import type { ResultRepository } from '@core/racing/domain/repositories/ResultRepository';
|
||||
import type { RaceRepository } from '@core/racing/domain/repositories/RaceRepository';
|
||||
import type { LeagueRepository } from '@core/racing/domain/repositories/LeagueRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryStandingRepository implements StandingRepository {
|
||||
private standings: Map<string, Standing>;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import type { TeamJoinRequest, TeamMembership } from '@core/racing/domain/types/TeamMembership';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryTeamMembershipRepository } from './InMemoryTeamMembershipRepository';
|
||||
import type { TeamMembership, TeamJoinRequest } from '@core/racing/domain/types/TeamMembership';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
* Stores memberships and join requests in Map structures.
|
||||
*/
|
||||
|
||||
import type {
|
||||
TeamMembership,
|
||||
TeamJoinRequest,
|
||||
} from '@core/racing/domain/types/TeamMembership';
|
||||
import type { TeamMembershipRepository } from '@core/racing/domain/repositories/TeamMembershipRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type {
|
||||
TeamJoinRequest,
|
||||
TeamMembership,
|
||||
} from '@core/racing/domain/types/TeamMembership';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryTeamMembershipRepository implements TeamMembershipRepository {
|
||||
private membershipsByTeam: Map<string, TeamMembership[]>;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryTeamRepository } from './InMemoryTeamRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { Team } from '@core/racing/domain/entities/Team';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryTeamRepository } from './InMemoryTeamRepository';
|
||||
|
||||
describe('InMemoryTeamRepository', () => {
|
||||
let repository: InMemoryTeamRepository;
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
* Stores data in a Map structure.
|
||||
*/
|
||||
|
||||
import { MediaReference } from '@core/domain/media/MediaReference';
|
||||
import { Team } from '@core/racing/domain/entities/Team';
|
||||
import type { TeamRepository } from '@core/racing/domain/repositories/TeamRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { MediaReference } from '@core/domain/media/MediaReference';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryTeamRepository implements TeamRepository {
|
||||
private teams: Map<string, Team>;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryTrackRepository } from './InMemoryTrackRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { Track } from '@core/racing/domain/entities/Track';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryTrackRepository } from './InMemoryTrackRepository';
|
||||
|
||||
describe('InMemoryTrackRepository', () => {
|
||||
let repository: InMemoryTrackRepository;
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
* Stores data in Map structure with UUID generation.
|
||||
*/
|
||||
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
import { Track, TrackCategory } from '@core/racing/domain/entities/Track';
|
||||
import type { TrackRepository } from '@core/racing/domain/repositories/TrackRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
export class InMemoryTrackRepository implements TrackRepository {
|
||||
private tracks: Map<string, Track>;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { InMemoryTransactionRepository } from './InMemoryTransactionRepository';
|
||||
import { LeagueWalletId } from '@core/racing/domain/entities/league-wallet/LeagueWalletId';
|
||||
import { Transaction, TransactionType } from '@core/racing/domain/entities/league-wallet/Transaction';
|
||||
import { TransactionId } from '@core/racing/domain/entities/league-wallet/TransactionId';
|
||||
import { LeagueWalletId } from '@core/racing/domain/entities/league-wallet/LeagueWalletId';
|
||||
import { Money } from '@core/racing/domain/value-objects/Money';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { InMemoryTransactionRepository } from './InMemoryTransactionRepository';
|
||||
|
||||
describe('InMemoryTransactionRepository', () => {
|
||||
let repository: InMemoryTransactionRepository;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
import type { Transaction, TransactionType } from '@core/racing/domain/entities/league-wallet/Transaction';
|
||||
import type { TransactionRepository } from '@core/racing/domain/repositories/TransactionRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryTransactionRepository implements TransactionRepository {
|
||||
private transactions: Map<string, Transaction> = new Map();
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
import type { MediaRepository } from '@core/racing/domain/repositories/MediaRepository';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
export class InMemoryMediaRepository implements MediaRepository {
|
||||
private driverAvatars = new Map<string, string>();
|
||||
|
||||
@@ -22,9 +22,9 @@ describe('TypeOrmTeamRepository', () => {
|
||||
|
||||
const teamRepo = new TypeOrmTeamRepository(repo as any, mapper as any);
|
||||
|
||||
const team = await teamRepo.findById('team-1');
|
||||
const team = await teamRepo.findById('550e8400-e29b-41d4-a716-446655440000');
|
||||
|
||||
expect(repo.findOne).toHaveBeenCalledWith({ where: { id: 'team-1' } });
|
||||
expect(repo.findOne).toHaveBeenCalledWith({ where: { id: '550e8400-e29b-41d4-a716-446655440000' } });
|
||||
expect(mapper.toDomain).toHaveBeenCalledWith(ormEntity);
|
||||
expect(team).toEqual({ id: 'domain-team' });
|
||||
});
|
||||
|
||||
@@ -33,31 +33,20 @@ describe('TypeOrmDriverRepository', () => {
|
||||
|
||||
const repo = new TypeOrmDriverRepository(dataSource, mapper);
|
||||
|
||||
await expect(repo.findById('driver-1')).resolves.toBeNull();
|
||||
await expect(repo.findById('00000000-0000-0000-0000-000000000001')).resolves.toBeNull();
|
||||
});
|
||||
|
||||
it('persists and retrieves driver with avatarRef (roundtrip test)', async () => {
|
||||
const driverId = '00000000-0000-0000-0000-000000000123';
|
||||
// Create a driver with a specific avatar reference
|
||||
const driver = Driver.create({
|
||||
id: 'driver-123',
|
||||
id: driverId,
|
||||
iracingId: '456789',
|
||||
name: 'Test Driver',
|
||||
country: 'US',
|
||||
avatarRef: MediaReference.createUploaded('media-abc-123'),
|
||||
});
|
||||
|
||||
// Mock entity that would be saved
|
||||
const mockEntity = {
|
||||
id: 'driver-123',
|
||||
iracingId: '456789',
|
||||
name: 'Test Driver',
|
||||
country: 'US',
|
||||
bio: null,
|
||||
joinedAt: driver.joinedAt.toDate(),
|
||||
category: null,
|
||||
avatarRef: { type: 'uploaded', mediaId: 'media-abc-123' },
|
||||
};
|
||||
|
||||
const savedEntities: any[] = [];
|
||||
|
||||
const repo = {
|
||||
@@ -82,32 +71,22 @@ describe('TypeOrmDriverRepository', () => {
|
||||
expect(savedEntities[0].avatarRef).toEqual({ type: 'uploaded', mediaId: 'media-abc-123' });
|
||||
|
||||
// Test load
|
||||
const loaded = await typeOrmRepo.findById('driver-123');
|
||||
const loaded = await typeOrmRepo.findById(driverId);
|
||||
expect(loaded).not.toBeNull();
|
||||
expect(loaded!.avatarRef.type).toBe('uploaded');
|
||||
expect(loaded!.avatarRef.mediaId).toBe('media-abc-123');
|
||||
});
|
||||
|
||||
it('handles system-default avatarRef correctly', async () => {
|
||||
const driverId = '00000000-0000-0000-0000-000000000456';
|
||||
const driver = Driver.create({
|
||||
id: 'driver-456',
|
||||
id: driverId,
|
||||
iracingId: '98765',
|
||||
name: 'Default Driver',
|
||||
country: 'UK',
|
||||
avatarRef: MediaReference.createSystemDefault('avatar'),
|
||||
});
|
||||
|
||||
const mockEntity = {
|
||||
id: 'driver-456',
|
||||
iracingId: '98765',
|
||||
name: 'Default Driver',
|
||||
country: 'UK',
|
||||
bio: null,
|
||||
joinedAt: driver.joinedAt.toDate(),
|
||||
category: null,
|
||||
avatarRef: { type: 'system-default', variant: 'avatar' },
|
||||
};
|
||||
|
||||
const savedEntities: any[] = [];
|
||||
|
||||
const repo = {
|
||||
@@ -129,31 +108,22 @@ describe('TypeOrmDriverRepository', () => {
|
||||
|
||||
expect(savedEntities[0].avatarRef).toEqual({ type: 'system-default', variant: 'avatar' });
|
||||
|
||||
const loaded = await typeOrmRepo.findById('driver-456');
|
||||
const loaded = await typeOrmRepo.findById(driverId);
|
||||
expect(loaded).not.toBeNull();
|
||||
expect(loaded!.avatarRef.type).toBe('system-default');
|
||||
expect(loaded!.avatarRef.variant).toBe('avatar');
|
||||
});
|
||||
|
||||
it('handles generated avatarRef correctly', async () => {
|
||||
const driverId = '00000000-0000-0000-0000-000000000789';
|
||||
const driver = Driver.create({
|
||||
id: 'driver-789',
|
||||
id: driverId,
|
||||
iracingId: '11111',
|
||||
name: 'Generated Driver',
|
||||
country: 'DE',
|
||||
avatarRef: MediaReference.createGenerated('gen-req-xyz'),
|
||||
});
|
||||
|
||||
const mockEntity = {
|
||||
id: 'driver-789',
|
||||
iracingId: '11111',
|
||||
name: 'Generated Driver',
|
||||
country: 'DE',
|
||||
bio: null,
|
||||
joinedAt: driver.joinedAt.toDate(),
|
||||
category: null,
|
||||
avatarRef: { type: 'generated', generationRequestId: 'gen-req-xyz' },
|
||||
};
|
||||
|
||||
const savedEntities: any[] = [];
|
||||
|
||||
const repo = {
|
||||
@@ -175,14 +145,16 @@ describe('TypeOrmDriverRepository', () => {
|
||||
|
||||
expect(savedEntities[0].avatarRef).toEqual({ type: 'generated', generationRequestId: 'gen-req-xyz' });
|
||||
|
||||
const loaded = await typeOrmRepo.findById('driver-789');
|
||||
const loaded = await typeOrmRepo.findById(driverId);
|
||||
expect(loaded).not.toBeNull();
|
||||
expect(loaded!.avatarRef.type).toBe('generated');
|
||||
expect(loaded!.avatarRef.generationRequestId).toBe('gen-req-xyz');
|
||||
});
|
||||
|
||||
it('handles update with changed avatarRef', async () => {
|
||||
const driverId = '00000000-0000-0000-0000-000000000000';
|
||||
const driver = Driver.create({
|
||||
id: 'driver-update',
|
||||
id: driverId,
|
||||
iracingId: '22222',
|
||||
name: 'Update Driver',
|
||||
country: 'FR',
|
||||
@@ -220,8 +192,9 @@ describe('TypeOrmDriverRepository', () => {
|
||||
expect(savedEntities).toHaveLength(2);
|
||||
expect(savedEntities[1].avatarRef).toEqual({ type: 'uploaded', mediaId: 'new-media-id' });
|
||||
|
||||
const loaded = await typeOrmRepo.findById('driver-update');
|
||||
const loaded = await typeOrmRepo.findById(driverId);
|
||||
expect(loaded).not.toBeNull();
|
||||
expect(loaded!.avatarRef.type).toBe('uploaded');
|
||||
expect(loaded!.avatarRef.mediaId).toBe('new-media-id');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { InMemoryDriverExtendedProfileProvider } from './InMemoryDriverExtendedProfileProvider';
|
||||
|
||||
describe('InMemoryDriverExtendedProfileProvider', () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { DriverExtendedProfileProvider } from '@core/racing/application/ports/DriverExtendedProfileProvider';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
// TODO Provider doesnt exist in Clean Architecture
|
||||
// TODO Hardcoded data here must be moved to a better place
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import { InMemoryDriverRatingProvider } from './InMemoryDriverRatingProvider';
|
||||
|
||||
describe('InMemoryDriverRatingProvider', () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { DriverRatingProvider } from '@core/racing/application/ports/DriverRatingProvider';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
// TODO Provider doesnt exist in Clean Architecture
|
||||
// TODO Hardcoded data here must be moved to a better place
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { RacingSeedData } from './InMemorySocialAndFeed';
|
||||
import { InMemoryFeedRepository, InMemorySocialGraphRepository } from './InMemorySocialAndFeed';
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Driver } from '@core/racing/domain/entities/Driver';
|
||||
import type { Logger } from '@core/shared/domain';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
import type { FeedRepository } from '@core/social/domain/repositories/FeedRepository';
|
||||
import type { SocialGraphRepository } from '@core/social/domain/repositories/SocialGraphRepository';
|
||||
import type { FeedItem } from '@core/social/domain/types/FeedItem';
|
||||
|
||||
Reference in New Issue
Block a user