website refactor

This commit is contained in:
2026-01-16 12:55:48 +01:00
parent 0208334c59
commit 20a42c52fd
83 changed files with 1610 additions and 1238 deletions

View File

@@ -15,7 +15,7 @@ import { FeatureAvailabilityGuard } from '../policy/FeatureAvailabilityGuard';
describe('Team domain (HTTP, module-wiring)', () => {
const originalEnv = { ...process.env };
let app: any;
let app: import("@nestjs/common").INestApplication;
beforeAll(async () => {
vi.resetModules();
@@ -62,9 +62,9 @@ describe('Team domain (HTTP, module-wiring)', () => {
};
app.useGlobalGuards(
new AuthenticationGuard(sessionPort as any),
new AuthorizationGuard(reflector, authorizationService as any),
new FeatureAvailabilityGuard(reflector, policyService as any),
new AuthenticationGuard(sessionPort as never),
new AuthorizationGuard(reflector, authorizationService as never),
new FeatureAvailabilityGuard(reflector, policyService as never),
);
await app.init();

View File

@@ -61,7 +61,7 @@ describe('TeamController', () => {
const result = { team: { id: teamId, name: 'Team', tag: 'TAG', description: 'Desc', ownerId: 'owner', leagues: [], isRecruiting: false }, membership: null, canManage: false };
service.getDetails.mockResolvedValue(result);
const mockReq = { user: { userId } } as any;
const mockReq = { user: { userId } } as never;
const response = await controller.getDetails(teamId, mockReq);
@@ -103,7 +103,7 @@ describe('TeamController', () => {
const result = { id: 'team-456', success: true };
service.create.mockResolvedValue(result);
const mockReq = { user: { userId } } as any;
const mockReq = { user: { userId } } as never;
const response = await controller.create(input, mockReq);
@@ -120,7 +120,7 @@ describe('TeamController', () => {
const result = { success: true };
service.update.mockResolvedValue(result);
const mockReq = { user: { userId } } as any;
const mockReq = { user: { userId } } as never;
const response = await controller.update(teamId, input, mockReq);
@@ -157,7 +157,7 @@ describe('TeamController', () => {
});
describe('auth guards (HTTP)', () => {
let app: any;
let app: import("@nestjs/common").INestApplication;
const sessionPort: { getCurrentSession: () => Promise<null | { token: string; user: { id: string } }> } = {
getCurrentSession: vi.fn(async () => null),
@@ -196,9 +196,9 @@ describe('TeamController', () => {
const reflector = new Reflector();
app.useGlobalGuards(
new AuthenticationGuard(sessionPort as any),
new AuthorizationGuard(reflector, authorizationService as any),
new FeatureAvailabilityGuard(reflector, policyService as any),
new AuthenticationGuard(sessionPort as never),
new AuthorizationGuard(reflector, authorizationService as never),
new FeatureAvailabilityGuard(reflector, policyService as never),
);
await app.init();

View File

@@ -1,6 +1,24 @@
import { Provider } from '@nestjs/common';
import { IMAGE_SERVICE_TOKEN, LOGGER_TOKEN, MEDIA_REPOSITORY_TOKEN, MEDIA_RESOLVER_TOKEN } from './TeamTokens';
import {
IMAGE_SERVICE_TOKEN,
LOGGER_TOKEN,
MEDIA_REPOSITORY_TOKEN,
MEDIA_RESOLVER_TOKEN,
TEAM_REPOSITORY_TOKEN,
TEAM_MEMBERSHIP_REPOSITORY_TOKEN,
DRIVER_REPOSITORY_TOKEN,
TEAM_STATS_REPOSITORY_TOKEN,
GET_ALL_TEAMS_USE_CASE_TOKEN,
GET_TEAM_DETAILS_USE_CASE_TOKEN,
GET_TEAM_MEMBERS_USE_CASE_TOKEN,
GET_TEAM_JOIN_REQUESTS_USE_CASE_TOKEN,
CREATE_TEAM_USE_CASE_TOKEN,
UPDATE_TEAM_USE_CASE_TOKEN,
GET_DRIVER_TEAM_USE_CASE_TOKEN,
GET_TEAM_MEMBERSHIP_USE_CASE_TOKEN,
JOIN_TEAM_USE_CASE_TOKEN,
} from './TeamTokens';
export {
TEAM_REPOSITORY_TOKEN,
@@ -15,6 +33,10 @@ export {
// Import core interfaces
import type { Logger } from '@core/shared/application/Logger';
import type { MediaResolverPort } from '@core/ports/media/MediaResolverPort';
import type { ITeamRepository } from '@core/racing/domain/repositories/ITeamRepository';
import type { ITeamMembershipRepository } from '@core/racing/domain/repositories/ITeamMembershipRepository';
import type { IDriverRepository } from '@core/racing/domain/repositories/IDriverRepository';
import type { ITeamStatsRepository } from '@core/racing/domain/repositories/ITeamStatsRepository';
// Import concrete implementations
import { InMemoryImageServiceAdapter } from '@adapters/media/ports/InMemoryImageServiceAdapter';
@@ -22,6 +44,17 @@ import { ConsoleLogger } from '@adapters/logging/ConsoleLogger';
import { InMemoryMediaRepository } from '@adapters/racing/persistence/media/InMemoryMediaRepository';
import { MediaResolverAdapter } from '@adapters/media/MediaResolverAdapter';
// Import use cases
import { GetAllTeamsUseCase } from '@core/racing/application/use-cases/GetAllTeamsUseCase';
import { GetTeamDetailsUseCase } from '@core/racing/application/use-cases/GetTeamDetailsUseCase';
import { GetTeamMembersUseCase } from '@core/racing/application/use-cases/GetTeamMembersUseCase';
import { GetTeamJoinRequestsUseCase } from '@core/racing/application/use-cases/GetTeamJoinRequestsUseCase';
import { CreateTeamUseCase } from '@core/racing/application/use-cases/CreateTeamUseCase';
import { UpdateTeamUseCase } from '@core/racing/application/use-cases/UpdateTeamUseCase';
import { GetDriverTeamUseCase } from '@core/racing/application/use-cases/GetDriverTeamUseCase';
import { GetTeamMembershipUseCase } from '@core/racing/application/use-cases/GetTeamMembershipUseCase';
import { JoinTeamUseCase } from '@core/racing/application/use-cases/JoinTeamUseCase';
// Import presenters
import { AllTeamsPresenter } from './presenters/AllTeamsPresenter';
@@ -69,4 +102,59 @@ export const TeamProviders: Provider[] = [
},
inject: [MEDIA_RESOLVER_TOKEN],
},
];
// Use Cases
{
provide: GET_ALL_TEAMS_USE_CASE_TOKEN,
useFactory: (teamRepo: ITeamRepository, membershipRepo: ITeamMembershipRepository, statsRepo: ITeamStatsRepository, logger: Logger) =>
new GetAllTeamsUseCase(teamRepo, membershipRepo, statsRepo, logger),
inject: [TEAM_REPOSITORY_TOKEN, TEAM_MEMBERSHIP_REPOSITORY_TOKEN, TEAM_STATS_REPOSITORY_TOKEN, LOGGER_TOKEN],
},
{
provide: GET_TEAM_DETAILS_USE_CASE_TOKEN,
useFactory: (teamRepo: ITeamRepository, membershipRepo: ITeamMembershipRepository) =>
new GetTeamDetailsUseCase(teamRepo, membershipRepo),
inject: [TEAM_REPOSITORY_TOKEN, TEAM_MEMBERSHIP_REPOSITORY_TOKEN],
},
{
provide: GET_TEAM_MEMBERS_USE_CASE_TOKEN,
useFactory: (membershipRepo: ITeamMembershipRepository, driverRepo: IDriverRepository, teamRepo: ITeamRepository, logger: Logger) =>
new GetTeamMembersUseCase(membershipRepo, driverRepo, teamRepo, logger),
inject: [TEAM_MEMBERSHIP_REPOSITORY_TOKEN, DRIVER_REPOSITORY_TOKEN, TEAM_REPOSITORY_TOKEN, LOGGER_TOKEN],
},
{
provide: GET_TEAM_JOIN_REQUESTS_USE_CASE_TOKEN,
useFactory: (membershipRepo: ITeamMembershipRepository, driverRepo: IDriverRepository, teamRepo: ITeamRepository) =>
new GetTeamJoinRequestsUseCase(membershipRepo, driverRepo, teamRepo),
inject: [TEAM_MEMBERSHIP_REPOSITORY_TOKEN, DRIVER_REPOSITORY_TOKEN, TEAM_REPOSITORY_TOKEN],
},
{
provide: CREATE_TEAM_USE_CASE_TOKEN,
useFactory: (teamRepo: ITeamRepository, membershipRepo: ITeamMembershipRepository, logger: Logger) =>
new CreateTeamUseCase(teamRepo, membershipRepo, logger),
inject: [TEAM_REPOSITORY_TOKEN, TEAM_MEMBERSHIP_REPOSITORY_TOKEN, LOGGER_TOKEN],
},
{
provide: UPDATE_TEAM_USE_CASE_TOKEN,
useFactory: (teamRepo: ITeamRepository, membershipRepo: ITeamMembershipRepository) =>
new UpdateTeamUseCase(teamRepo, membershipRepo),
inject: [TEAM_REPOSITORY_TOKEN, TEAM_MEMBERSHIP_REPOSITORY_TOKEN],
},
{
provide: GET_DRIVER_TEAM_USE_CASE_TOKEN,
useFactory: (teamRepo: ITeamRepository, membershipRepo: ITeamMembershipRepository, logger: Logger) =>
new GetDriverTeamUseCase(teamRepo, membershipRepo, logger),
inject: [TEAM_REPOSITORY_TOKEN, TEAM_MEMBERSHIP_REPOSITORY_TOKEN, LOGGER_TOKEN],
},
{
provide: GET_TEAM_MEMBERSHIP_USE_CASE_TOKEN,
useFactory: (membershipRepo: ITeamMembershipRepository, logger: Logger) =>
new GetTeamMembershipUseCase(membershipRepo, logger),
inject: [TEAM_MEMBERSHIP_REPOSITORY_TOKEN, LOGGER_TOKEN],
},
{
provide: JOIN_TEAM_USE_CASE_TOKEN,
useFactory: (teamRepo: ITeamRepository, membershipRepo: ITeamMembershipRepository, logger: Logger) =>
new JoinTeamUseCase(teamRepo, membershipRepo, logger),
inject: [TEAM_REPOSITORY_TOKEN, TEAM_MEMBERSHIP_REPOSITORY_TOKEN, LOGGER_TOKEN],
},
];

View File

@@ -23,7 +23,7 @@ type TeamEntityStub = {
ownerId: ValueObjectStub;
leagues: ValueObjectStub[];
createdAt: { toDate(): Date };
logoRef: any;
logoRef: unknown;
category: string | undefined;
isRecruiting: boolean;
update: Mock;
@@ -124,13 +124,17 @@ describe('TeamService', () => {
clear: vi.fn(),
};
service = new TeamService(
teamRepository as unknown as never,
membershipRepository as unknown as never,
driverRepository as unknown as never,
logger,
teamStatsRepository as unknown as never
new GetAllTeamsUseCase(teamRepository as never, membershipRepository as never, teamStatsRepository as never, logger),
new GetTeamDetailsUseCase(teamRepository as never, membershipRepository as never),
new GetTeamMembersUseCase(membershipRepository as never, driverRepository as never, teamRepository as never, logger),
new GetTeamJoinRequestsUseCase(membershipRepository as never, driverRepository as never, teamRepository as never),
new CreateTeamUseCase(teamRepository as never, membershipRepository as never, logger),
new UpdateTeamUseCase(teamRepository as never, membershipRepository as never),
new GetDriverTeamUseCase(teamRepository as never, membershipRepository as never, logger),
new GetTeamMembershipUseCase(membershipRepository as never, logger),
{ execute: vi.fn() } as never, // joinTeamUseCase
logger
);
});

View File

@@ -12,9 +12,6 @@ import { GetTeamMembershipOutputDTO } from './dtos/GetTeamMembershipOutputDTO';
// Core imports
import type { Logger } from '@core/shared/application/Logger';
import type { ITeamRepository } from '@core/racing/domain/repositories/ITeamRepository';
import type { ITeamMembershipRepository } from '@core/racing/domain/repositories/ITeamMembershipRepository';
import type { IDriverRepository } from '@core/racing/domain/repositories/IDriverRepository';
// Use cases
import { GetAllTeamsUseCase } from '@core/racing/application/use-cases/GetAllTeamsUseCase';
@@ -28,39 +25,44 @@ import { GetTeamMembershipUseCase } from '@core/racing/application/use-cases/Get
import { JoinTeamUseCase } from '@core/racing/application/use-cases/JoinTeamUseCase';
// Tokens
import { TEAM_REPOSITORY_TOKEN, TEAM_MEMBERSHIP_REPOSITORY_TOKEN, DRIVER_REPOSITORY_TOKEN, LOGGER_TOKEN, TEAM_STATS_REPOSITORY_TOKEN } from './TeamTokens';
import type { ITeamStatsRepository } from '@core/racing/domain/repositories/ITeamStatsRepository';
import {
LOGGER_TOKEN,
GET_ALL_TEAMS_USE_CASE_TOKEN,
GET_TEAM_DETAILS_USE_CASE_TOKEN,
GET_TEAM_MEMBERS_USE_CASE_TOKEN,
GET_TEAM_JOIN_REQUESTS_USE_CASE_TOKEN,
CREATE_TEAM_USE_CASE_TOKEN,
UPDATE_TEAM_USE_CASE_TOKEN,
GET_DRIVER_TEAM_USE_CASE_TOKEN,
GET_TEAM_MEMBERSHIP_USE_CASE_TOKEN,
JOIN_TEAM_USE_CASE_TOKEN,
} from './TeamTokens';
@Injectable()
export class TeamService {
constructor(
@Inject(TEAM_REPOSITORY_TOKEN) private readonly teamRepository: ITeamRepository,
@Inject(TEAM_MEMBERSHIP_REPOSITORY_TOKEN) private readonly membershipRepository: ITeamMembershipRepository,
@Inject(DRIVER_REPOSITORY_TOKEN) private readonly driverRepository: IDriverRepository,
@Inject(GET_ALL_TEAMS_USE_CASE_TOKEN) private readonly getAllTeamsUseCase: GetAllTeamsUseCase,
@Inject(GET_TEAM_DETAILS_USE_CASE_TOKEN) private readonly getTeamDetailsUseCase: GetTeamDetailsUseCase,
@Inject(GET_TEAM_MEMBERS_USE_CASE_TOKEN) private readonly getTeamMembersUseCase: GetTeamMembersUseCase,
@Inject(GET_TEAM_JOIN_REQUESTS_USE_CASE_TOKEN) private readonly getTeamJoinRequestsUseCase: GetTeamJoinRequestsUseCase,
@Inject(CREATE_TEAM_USE_CASE_TOKEN) private readonly createTeamUseCase: CreateTeamUseCase,
@Inject(UPDATE_TEAM_USE_CASE_TOKEN) private readonly updateTeamUseCase: UpdateTeamUseCase,
@Inject(GET_DRIVER_TEAM_USE_CASE_TOKEN) private readonly getDriverTeamUseCase: GetDriverTeamUseCase,
@Inject(GET_TEAM_MEMBERSHIP_USE_CASE_TOKEN) private readonly getTeamMembershipUseCase: GetTeamMembershipUseCase,
@Inject(JOIN_TEAM_USE_CASE_TOKEN) private readonly joinTeamUseCase: JoinTeamUseCase,
@Inject(LOGGER_TOKEN) private readonly logger: Logger,
@Inject(TEAM_STATS_REPOSITORY_TOKEN) private readonly teamStatsRepository: ITeamStatsRepository,
) {}
async getAll(): Promise<GetAllTeamsOutputDTO> {
this.logger.debug('[TeamService] Fetching all teams.');
const useCase = new GetAllTeamsUseCase(
this.teamRepository,
this.membershipRepository,
this.teamStatsRepository,
this.logger
);
const result = await useCase.execute({});
const result = await this.getAllTeamsUseCase.execute({});
if (result.isErr()) {
this.logger.error('Error fetching all teams', new Error(result.error?.details?.message || 'Unknown error'));
return { teams: [], totalCount: 0 };
}
const value = result.value;
if (!value) {
this.logger.error('Error fetching all teams', new Error(result.unwrapErr().details?.message || 'Unknown error'));
return { teams: [], totalCount: 0 };
}
const value = result.unwrap();
return {
teams: value.teams.map(t => ({
id: t.team.id,
@@ -86,18 +88,13 @@ export class TeamService {
async getDetails(teamId: string, userId?: string): Promise<GetTeamDetailsOutputDTO | null> {
this.logger.debug(`[TeamService] Fetching team details for teamId: ${teamId}, userId: ${userId}`);
const useCase = new GetTeamDetailsUseCase(this.teamRepository, this.membershipRepository);
const result = await useCase.execute({ teamId, driverId: userId || '' });
const result = await this.getTeamDetailsUseCase.execute({ teamId, driverId: userId || '' });
if (result.isErr()) {
this.logger.error(`Error fetching team details for teamId: ${teamId}: ${result.error?.details?.message || 'Unknown error'}`);
return null;
}
const value = result.value;
if (!value) {
this.logger.error(`Error fetching team details for teamId: ${teamId}: ${result.unwrapErr().details?.message || 'Unknown error'}`);
return null;
}
const value = result.unwrap();
// Convert to DTO
return {
team: {
@@ -123,21 +120,9 @@ export class TeamService {
async getMembers(teamId: string): Promise<GetTeamMembersOutputDTO> {
this.logger.debug(`[TeamService] Fetching team members for teamId: ${teamId}`);
const useCase = new GetTeamMembersUseCase(this.membershipRepository, this.driverRepository, this.teamRepository, this.logger);
const result = await useCase.execute({ teamId });
const result = await this.getTeamMembersUseCase.execute({ teamId });
if (result.isErr()) {
this.logger.error(`Error fetching team members for teamId: ${teamId}: ${result.error?.details?.message || 'Unknown error'}`);
return {
members: [],
totalCount: 0,
ownerCount: 0,
managerCount: 0,
memberCount: 0,
};
}
const value = result.value;
if (!value) {
this.logger.error(`Error fetching team members for teamId: ${teamId}: ${result.unwrapErr().details?.message || 'Unknown error'}`);
return {
members: [],
totalCount: 0,
@@ -147,6 +132,7 @@ export class TeamService {
};
}
const value = result.unwrap();
return {
members: value.members.map(m => ({
driverId: m.driver?.id || '',
@@ -166,19 +152,9 @@ export class TeamService {
async getJoinRequests(teamId: string): Promise<GetTeamJoinRequestsOutputDTO> {
this.logger.debug(`[TeamService] Fetching team join requests for teamId: ${teamId}`);
const useCase = new GetTeamJoinRequestsUseCase(this.membershipRepository, this.driverRepository, this.teamRepository);
const result = await useCase.execute({ teamId });
const result = await this.getTeamJoinRequestsUseCase.execute({ teamId });
if (result.isErr()) {
this.logger.error(`Error fetching team join requests for teamId: ${teamId}`, new Error(result.error?.details?.message || 'Unknown error'));
return {
requests: [],
pendingCount: 0,
totalCount: 0,
};
}
const value = result.value;
if (!value) {
this.logger.error(`Error fetching team join requests for teamId: ${teamId}`, new Error(result.unwrapErr().details?.message || 'Unknown error'));
return {
requests: [],
pendingCount: 0,
@@ -186,6 +162,7 @@ export class TeamService {
};
}
const value = result.unwrap();
return {
requests: value.joinRequests.map(r => ({
requestId: r.id,
@@ -212,18 +189,13 @@ export class TeamService {
leagues: [],
};
const useCase = new CreateTeamUseCase(this.teamRepository, this.membershipRepository, this.logger);
const result = await useCase.execute(command);
const result = await this.createTeamUseCase.execute(command);
if (result.isErr()) {
this.logger.error(`Error creating team: ${result.error?.details?.message || 'Unknown error'}`);
return { id: '', success: false };
}
const value = result.value;
if (!value) {
this.logger.error(`Error creating team: ${result.unwrapErr().details?.message || 'Unknown error'}`);
return { id: '', success: false };
}
const value = result.unwrap();
return { id: value.team.id, success: true };
}
@@ -240,10 +212,9 @@ export class TeamService {
updatedBy: userId || '',
};
const useCase = new UpdateTeamUseCase(this.teamRepository, this.membershipRepository);
const result = await useCase.execute(command);
const result = await this.updateTeamUseCase.execute(command);
if (result.isErr()) {
this.logger.error(`Error updating team ${teamId}: ${result.error?.details?.message || 'Unknown error'}`);
this.logger.error(`Error updating team ${teamId}: ${result.unwrapErr().details?.message || 'Unknown error'}`);
return { success: false };
}
@@ -253,14 +224,13 @@ export class TeamService {
async getDriverTeam(driverId: string): Promise<GetDriverTeamOutputDTO | null> {
this.logger.debug(`[TeamService] Fetching team for driverId: ${driverId}`);
const useCase = new GetDriverTeamUseCase(this.teamRepository, this.membershipRepository, this.logger);
const result = await useCase.execute({ driverId });
const result = await this.getDriverTeamUseCase.execute({ driverId });
if (result.isErr()) {
this.logger.error(`Error fetching team for driverId: ${driverId}: ${result.error?.details?.message || 'Unknown error'}`);
this.logger.error(`Error fetching team for driverId: ${driverId}: ${result.unwrapErr().details?.message || 'Unknown error'}`);
return null;
}
const value = result.value;
const value = result.unwrap();
if (!value || !value.team) {
return null;
}
@@ -290,18 +260,13 @@ export class TeamService {
async getMembership(teamId: string, driverId: string): Promise<GetTeamMembershipOutputDTO | null> {
this.logger.debug(`[TeamService] Fetching team membership for teamId: ${teamId}, driverId: ${driverId}`);
const useCase = new GetTeamMembershipUseCase(this.membershipRepository, this.logger);
const result = await useCase.execute({ teamId, driverId });
const result = await this.getTeamMembershipUseCase.execute({ teamId, driverId });
if (result.isErr()) {
this.logger.error(`Error fetching team membership for teamId: ${teamId}, driverId: ${driverId}: ${result.error?.details?.message || 'Unknown error'}`);
return null;
}
const value = result.value;
if (!value) {
this.logger.error(`Error fetching team membership for teamId: ${teamId}, driverId: ${driverId}: ${result.unwrapErr().details?.message || 'Unknown error'}`);
return null;
}
const value = result.unwrap();
return value.membership ? {
role: value.membership.role,
joinedAt: value.membership.joinedAt,
@@ -316,10 +281,9 @@ export class TeamService {
throw new Error('User ID is required');
}
const useCase = new JoinTeamUseCase(this.teamRepository, this.membershipRepository, this.logger);
const result = await useCase.execute({ teamId, driverId: userId });
const result = await this.joinTeamUseCase.execute({ teamId, driverId: userId });
if (result.isErr()) {
const error = result.error;
const error = result.unwrapErr();
this.logger.error(`Error joining team ${teamId}: ${error?.details?.message || 'Unknown error'}`);
return { success: false, error: error?.details?.message || 'Unknown error' };
}

View File

@@ -6,4 +6,14 @@ export const LOGGER_TOKEN = 'Logger';
export const TEAM_STATS_REPOSITORY_TOKEN = 'ITeamStatsRepository';
export const MEDIA_REPOSITORY_TOKEN = 'IMediaRepository';
export const MEDIA_RESOLVER_TOKEN = 'MediaResolverPort';
export const RESULT_REPOSITORY_TOKEN = 'IResultRepository';
export const RESULT_REPOSITORY_TOKEN = 'IResultRepository';
export const GET_ALL_TEAMS_USE_CASE_TOKEN = Symbol('GET_ALL_TEAMS_USE_CASE_TOKEN');
export const GET_TEAM_DETAILS_USE_CASE_TOKEN = Symbol('GET_TEAM_DETAILS_USE_CASE_TOKEN');
export const GET_TEAM_MEMBERS_USE_CASE_TOKEN = Symbol('GET_TEAM_MEMBERS_USE_CASE_TOKEN');
export const GET_TEAM_JOIN_REQUESTS_USE_CASE_TOKEN = Symbol('GET_TEAM_JOIN_REQUESTS_USE_CASE_TOKEN');
export const CREATE_TEAM_USE_CASE_TOKEN = Symbol('CREATE_TEAM_USE_CASE_TOKEN');
export const UPDATE_TEAM_USE_CASE_TOKEN = Symbol('UPDATE_TEAM_USE_CASE_TOKEN');
export const GET_DRIVER_TEAM_USE_CASE_TOKEN = Symbol('GET_DRIVER_TEAM_USE_CASE_TOKEN');
export const GET_TEAM_MEMBERSHIP_USE_CASE_TOKEN = Symbol('GET_TEAM_MEMBERSHIP_USE_CASE_TOKEN');
export const JOIN_TEAM_USE_CASE_TOKEN = Symbol('JOIN_TEAM_USE_CASE_TOKEN');

View File

@@ -12,7 +12,7 @@ describe('CreateTeamPresenter', () => {
const result = {
team: {
id: 'team-123',
} as any,
} as never,
};
presenter.present(result);
@@ -27,7 +27,7 @@ describe('CreateTeamPresenter', () => {
const result = {
team: {
id: 'team-456',
} as any,
} as never,
};
presenter.present(result);
@@ -41,7 +41,7 @@ describe('CreateTeamPresenter', () => {
describe('reset', () => {
it('should clear the model', () => {
presenter.present({ team: { id: 'team-123' } } as any);
presenter.present({ team: { id: 'team-123' } } as never);
expect(presenter.responseModel).toBeDefined();
presenter.reset();
@@ -55,7 +55,7 @@ describe('CreateTeamPresenter', () => {
});
it('should return model after present()', () => {
presenter.present({ team: { id: 'team-123' } } as any);
presenter.present({ team: { id: 'team-123' } } as never);
expect(presenter.getResponseModel()).toEqual({
id: 'team-123',
success: true,
@@ -69,7 +69,7 @@ describe('CreateTeamPresenter', () => {
});
it('should return model after present()', () => {
presenter.present({ team: { id: 'team-123' } } as any);
presenter.present({ team: { id: 'team-123' } } as never);
expect(presenter.responseModel).toEqual({
id: 'team-123',
success: true,

View File

@@ -13,19 +13,19 @@ describe('DriverTeamPresenter', () => {
driverId: 'driver-123',
team: {
id: 'team-456',
name: { toString: () => 'Team Alpha' } as any,
tag: { toString: () => 'TA' } as any,
description: { toString: () => 'Best team' } as any,
ownerId: { toString: () => 'driver-123' } as any,
leagues: [{ toString: () => 'league-1' } as any],
name: { toString: () => 'Team Alpha' } as never,
tag: { toString: () => 'TA' } as never,
description: { toString: () => 'Best team' } as never,
ownerId: { toString: () => 'driver-123' } as never,
leagues: [{ toString: () => 'league-1' } as never],
isRecruiting: true,
createdAt: { toDate: () => new Date('2024-01-01') } as any,
} as any,
createdAt: { toDate: () => new Date('2024-01-01') } as never,
} as never,
membership: {
role: 'owner' as const,
joinedAt: new Date('2024-01-01'),
status: 'active' as const,
} as any,
} as never,
};
presenter.present(result);
@@ -57,19 +57,19 @@ describe('DriverTeamPresenter', () => {
driverId: 'driver-456',
team: {
id: 'team-789',
name: { toString: () => 'Team Beta' } as any,
tag: { toString: () => 'TB' } as any,
description: { toString: () => '' } as any,
ownerId: { toString: () => 'driver-123' } as any,
leagues: [] as any[],
name: { toString: () => 'Team Beta' } as never,
tag: { toString: () => 'TB' } as never,
description: { toString: () => '' } as never,
ownerId: { toString: () => 'driver-123' } as never,
leagues: [] as never[],
isRecruiting: false,
createdAt: { toDate: () => new Date('2024-01-02') } as any,
} as any,
createdAt: { toDate: () => new Date('2024-01-02') } as never,
} as never,
membership: {
role: 'manager' as const,
joinedAt: new Date('2024-01-02'),
status: 'active' as const,
} as any,
} as never,
};
presenter.present(result);
@@ -85,19 +85,19 @@ describe('DriverTeamPresenter', () => {
driverId: 'driver-789',
team: {
id: 'team-abc',
name: { toString: () => 'Team Gamma' } as any,
tag: { toString: () => 'TG' } as any,
description: { toString: () => 'Test team' } as any,
ownerId: { toString: () => 'driver-123' } as any,
leagues: [{ toString: () => 'league-2' } as any],
name: { toString: () => 'Team Gamma' } as never,
tag: { toString: () => 'TG' } as never,
description: { toString: () => 'Test team' } as never,
ownerId: { toString: () => 'driver-123' } as never,
leagues: [{ toString: () => 'league-2' } as never],
isRecruiting: false,
createdAt: { toDate: () => new Date('2024-01-03') } as any,
} as any,
createdAt: { toDate: () => new Date('2024-01-03') } as never,
} as never,
membership: {
role: 'driver' as const,
joinedAt: new Date('2024-01-03'),
status: 'active' as const,
} as any,
} as never,
};
presenter.present(result);
@@ -113,19 +113,19 @@ describe('DriverTeamPresenter', () => {
driverId: 'driver-123',
team: {
id: 'team-456',
name: { toString: () => 'Team' } as any,
tag: { toString: () => 'T' } as any,
description: { toString: () => '' } as any,
ownerId: { toString: () => 'driver-123' } as any,
leagues: [] as any[],
name: { toString: () => 'Team' } as never,
tag: { toString: () => 'T' } as never,
description: { toString: () => '' } as never,
ownerId: { toString: () => 'driver-123' } as never,
leagues: [] as never[],
isRecruiting: false,
createdAt: { toDate: () => new Date('2024-01-01') } as any,
} as any,
createdAt: { toDate: () => new Date('2024-01-01') } as never,
} as never,
membership: {
role: 'owner' as const,
joinedAt: new Date('2024-01-01'),
status: 'active' as const,
} as any,
} as never,
};
presenter.present(result);
@@ -139,19 +139,19 @@ describe('DriverTeamPresenter', () => {
driverId: 'driver-123',
team: {
id: 'team-456',
name: { toString: () => 'Team' } as any,
tag: { toString: () => 'T' } as any,
description: { toString: () => 'Test' } as any,
ownerId: { toString: () => 'driver-123' } as any,
leagues: [] as any[],
name: { toString: () => 'Team' } as never,
tag: { toString: () => 'T' } as never,
description: { toString: () => 'Test' } as never,
ownerId: { toString: () => 'driver-123' } as never,
leagues: [] as never[],
isRecruiting: false,
createdAt: { toDate: () => new Date('2024-01-01') } as any,
} as any,
createdAt: { toDate: () => new Date('2024-01-01') } as never,
} as never,
membership: {
role: 'owner' as const,
joinedAt: new Date('2024-01-01'),
status: 'active' as const,
} as any,
} as never,
};
presenter.present(result);
@@ -167,19 +167,19 @@ describe('DriverTeamPresenter', () => {
driverId: 'driver-123',
team: {
id: 'team-456',
name: { toString: () => 'Team' } as any,
tag: { toString: () => 'T' } as any,
description: { toString: () => '' } as any,
ownerId: { toString: () => 'driver-123' } as any,
leagues: [] as any[],
name: { toString: () => 'Team' } as never,
tag: { toString: () => 'T' } as never,
description: { toString: () => '' } as never,
ownerId: { toString: () => 'driver-123' } as never,
leagues: [] as never[],
isRecruiting: false,
createdAt: { toDate: () => new Date('2024-01-01') } as any,
} as any,
createdAt: { toDate: () => new Date('2024-01-01') } as never,
} as never,
membership: {
role: 'owner' as const,
joinedAt: new Date('2024-01-01'),
status: 'active' as const,
} as any,
} as never,
});
expect(presenter.getResponseModel()).toBeDefined();
@@ -198,19 +198,19 @@ describe('DriverTeamPresenter', () => {
driverId: 'driver-123',
team: {
id: 'team-456',
name: { toString: () => 'Team' } as any,
tag: { toString: () => 'T' } as any,
description: { toString: () => '' } as any,
ownerId: { toString: () => 'driver-123' } as any,
leagues: [] as any[],
name: { toString: () => 'Team' } as never,
tag: { toString: () => 'T' } as never,
description: { toString: () => '' } as never,
ownerId: { toString: () => 'driver-123' } as never,
leagues: [] as never[],
isRecruiting: false,
createdAt: { toDate: () => new Date('2024-01-01') } as any,
} as any,
createdAt: { toDate: () => new Date('2024-01-01') } as never,
} as never,
membership: {
role: 'owner' as const,
joinedAt: new Date('2024-01-01'),
status: 'active' as const,
} as any,
} as never,
});
expect(presenter.getResponseModel()).not.toBeNull();
});