code quality
Some checks failed
CI / lint-typecheck (pull_request) Failing after 12s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
Some checks failed
CI / lint-typecheck (pull_request) Failing after 12s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
This commit is contained in:
@@ -1,17 +1,18 @@
|
||||
import { describe, vi } from 'vitest';
|
||||
import { InMemoryMediaRepository } from './InMemoryMediaRepository';
|
||||
import { runMediaRepositoryContract } from '../../../../tests/contracts/media/MediaRepository.contract';
|
||||
import type { Logger } from '@core/shared/domain/Logger';
|
||||
|
||||
describe('InMemoryMediaRepository Contract Compliance', () => {
|
||||
runMediaRepositoryContract(async () => {
|
||||
const logger = {
|
||||
const logger: Logger = {
|
||||
info: vi.fn(),
|
||||
debug: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
error: vi.fn(),
|
||||
};
|
||||
|
||||
const repository = new InMemoryMediaRepository(logger as any);
|
||||
const repository = new InMemoryMediaRepository(logger);
|
||||
|
||||
return {
|
||||
repository,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { AvatarGenerationRequest } from '@core/media/domain/entities/AvatarGenerationRequest';
|
||||
import { AvatarGenerationRequestProps } from '@core/media/domain/types/AvatarGenerationRequest';
|
||||
import { AvatarGenerationRequestOrmEntity } from '../entities/AvatarGenerationRequestOrmEntity';
|
||||
import { TypeOrmMediaSchemaError } from '../errors/TypeOrmMediaSchemaError';
|
||||
import {
|
||||
@@ -37,7 +38,7 @@ export class AvatarGenerationRequestOrmMapper {
|
||||
}
|
||||
|
||||
try {
|
||||
const props: any = {
|
||||
const props: AvatarGenerationRequestProps = {
|
||||
id: entity.id,
|
||||
userId: entity.userId,
|
||||
facePhotoUrl: entity.facePhotoUrl,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Media } from '@core/media/domain/entities/Media';
|
||||
import { Media, MediaProps } from '@core/media/domain/entities/Media';
|
||||
import { MediaOrmEntity } from '../entities/MediaOrmEntity';
|
||||
import { TypeOrmMediaSchemaError } from '../errors/TypeOrmMediaSchemaError';
|
||||
import {
|
||||
@@ -31,7 +31,7 @@ export class MediaOrmMapper {
|
||||
}
|
||||
|
||||
try {
|
||||
const domainProps: any = {
|
||||
const domainProps: MediaProps = {
|
||||
id: entity.id,
|
||||
filename: entity.filename,
|
||||
originalName: entity.originalName,
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import * as fs from 'node:fs';
|
||||
import * as path from 'node:path';
|
||||
import type { DataSource } from 'typeorm';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import type { AvatarGenerationRequest } from '@core/media/domain/entities/AvatarGenerationRequest';
|
||||
import type { AvatarGenerationRequestOrmMapper } from '../mappers/AvatarGenerationRequestOrmMapper';
|
||||
|
||||
import { TypeOrmAvatarGenerationRepository } from './TypeOrmAvatarGenerationRepository';
|
||||
|
||||
@@ -35,7 +38,7 @@ describe('TypeOrmAvatarGenerationRepository', () => {
|
||||
toOrmEntity: vi.fn().mockReturnValue({ id: 'orm-request-1' }),
|
||||
};
|
||||
|
||||
const repo = new TypeOrmAvatarGenerationRepository(dataSource as any, mapper as any);
|
||||
const repo = new TypeOrmAvatarGenerationRepository(dataSource as unknown as DataSource, mapper as unknown as AvatarGenerationRequestOrmMapper);
|
||||
|
||||
// Test findById
|
||||
const request = await repo.findById('request-1');
|
||||
@@ -61,8 +64,8 @@ describe('TypeOrmAvatarGenerationRepository', () => {
|
||||
});
|
||||
|
||||
// Test save
|
||||
const domainRequest = { id: 'new-request', toProps: () => ({ id: 'new-request' }) };
|
||||
await repo.save(domainRequest as any);
|
||||
const domainRequest = { id: 'new-request', toProps: () => ({ id: 'new-request' }) } as unknown as AvatarGenerationRequest;
|
||||
await repo.save(domainRequest);
|
||||
expect(mapper.toOrmEntity).toHaveBeenCalledWith(domainRequest);
|
||||
expect(ormRepo.save).toHaveBeenCalledWith({ id: 'orm-request-1' });
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import * as fs from 'node:fs';
|
||||
import * as path from 'node:path';
|
||||
import type { DataSource } from 'typeorm';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import type { Avatar } from '@core/media/domain/entities/Avatar';
|
||||
import type { AvatarOrmMapper } from '../mappers/AvatarOrmMapper';
|
||||
|
||||
import { TypeOrmAvatarRepository } from './TypeOrmAvatarRepository';
|
||||
|
||||
@@ -35,7 +38,7 @@ describe('TypeOrmAvatarRepository', () => {
|
||||
toOrmEntity: vi.fn().mockReturnValue({ id: 'orm-avatar-1' }),
|
||||
};
|
||||
|
||||
const repo = new TypeOrmAvatarRepository(dataSource as any, mapper as any);
|
||||
const repo = new TypeOrmAvatarRepository(dataSource as unknown as DataSource, mapper as unknown as AvatarOrmMapper);
|
||||
|
||||
// Test findById
|
||||
const avatar = await repo.findById('avatar-1');
|
||||
@@ -61,8 +64,8 @@ describe('TypeOrmAvatarRepository', () => {
|
||||
expect(avatars).toHaveLength(2);
|
||||
|
||||
// Test save
|
||||
const domainAvatar = { id: 'new-avatar', toProps: () => ({ id: 'new-avatar' }) };
|
||||
await repo.save(domainAvatar as any);
|
||||
const domainAvatar = { id: 'new-avatar', toProps: () => ({ id: 'new-avatar' }) } as unknown as Avatar;
|
||||
await repo.save(domainAvatar);
|
||||
expect(mapper.toOrmEntity).toHaveBeenCalledWith(domainAvatar);
|
||||
expect(ormRepo.save).toHaveBeenCalledWith({ id: 'orm-avatar-1' });
|
||||
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
import { describe, vi } from 'vitest';
|
||||
import type { DataSource } from 'typeorm';
|
||||
import { TypeOrmMediaRepository } from './TypeOrmMediaRepository';
|
||||
import { MediaOrmMapper } from '../mappers/MediaOrmMapper';
|
||||
import { runMediaRepositoryContract } from '../../../../../tests/contracts/media/MediaRepository.contract';
|
||||
import type { MediaOrmEntity } from '../entities/MediaOrmEntity';
|
||||
|
||||
describe('TypeOrmMediaRepository Contract Compliance', () => {
|
||||
runMediaRepositoryContract(async () => {
|
||||
// Mocking TypeORM DataSource and Repository for a DB-free contract test
|
||||
// In a real scenario, this might use an in-memory SQLite database
|
||||
const ormEntities = new Map<string, any>();
|
||||
const ormEntities = new Map<string, MediaOrmEntity>();
|
||||
|
||||
const ormRepo = {
|
||||
save: vi.fn().mockImplementation(async (entity) => {
|
||||
@@ -30,7 +32,7 @@ describe('TypeOrmMediaRepository Contract Compliance', () => {
|
||||
};
|
||||
|
||||
const mapper = new MediaOrmMapper();
|
||||
const repository = new TypeOrmMediaRepository(dataSource as any, mapper);
|
||||
const repository = new TypeOrmMediaRepository(dataSource as unknown as DataSource, mapper);
|
||||
|
||||
return {
|
||||
repository,
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import * as fs from 'node:fs';
|
||||
import * as path from 'node:path';
|
||||
import type { DataSource } from 'typeorm';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import type { Media } from '@core/media/domain/entities/Media';
|
||||
import type { MediaOrmMapper } from '../mappers/MediaOrmMapper';
|
||||
|
||||
import { TypeOrmMediaRepository } from './TypeOrmMediaRepository';
|
||||
|
||||
@@ -35,7 +38,7 @@ describe('TypeOrmMediaRepository', () => {
|
||||
toOrmEntity: vi.fn().mockReturnValue({ id: 'orm-media-1' }),
|
||||
};
|
||||
|
||||
const repo = new TypeOrmMediaRepository(dataSource as any, mapper as any);
|
||||
const repo = new TypeOrmMediaRepository(dataSource as unknown as DataSource, mapper as unknown as MediaOrmMapper);
|
||||
|
||||
// Test findById
|
||||
const media = await repo.findById('media-1');
|
||||
|
||||
@@ -86,7 +86,7 @@ export class FileSystemMediaStorageAdapter implements MediaStoragePort {
|
||||
await fs.unlink(filePath);
|
||||
} catch (error) {
|
||||
// Ignore if file doesn't exist
|
||||
if (error instanceof Error && 'code' in error && (error as any).code === 'ENOENT') {
|
||||
if (error instanceof Error && 'code' in error && (error as NodeJS.ErrnoException).code === 'ENOENT') {
|
||||
return;
|
||||
}
|
||||
throw error;
|
||||
|
||||
@@ -34,7 +34,7 @@ export interface GeneratedMediaResolverConfig {
|
||||
* Format: "{type}-{id}" (e.g., "team-123", "league-456")
|
||||
*/
|
||||
export class GeneratedMediaResolverAdapter implements MediaResolverPort {
|
||||
constructor(_config: GeneratedMediaResolverConfig = {}) {
|
||||
constructor() {
|
||||
// basePath is not used since we return path-only URLs
|
||||
// config.basePath is ignored for backward compatibility
|
||||
}
|
||||
@@ -85,8 +85,6 @@ export class GeneratedMediaResolverAdapter implements MediaResolverPort {
|
||||
/**
|
||||
* Factory function for creating GeneratedMediaResolverAdapter instances
|
||||
*/
|
||||
export function createGeneratedMediaResolver(
|
||||
config: GeneratedMediaResolverConfig = {}
|
||||
): GeneratedMediaResolverAdapter {
|
||||
return new GeneratedMediaResolverAdapter(config);
|
||||
export function createGeneratedMediaResolver(): GeneratedMediaResolverAdapter {
|
||||
return new GeneratedMediaResolverAdapter();
|
||||
}
|
||||
Reference in New Issue
Block a user