refactor use cases
This commit is contained in:
@@ -7,11 +7,12 @@ describe('MediaService', () => {
|
||||
|
||||
it('requestAvatarGeneration returns presenter response on success', async () => {
|
||||
const requestAvatarGenerationPresenter = {
|
||||
transform: vi.fn((result) => ({ success: true, requestId: result.requestId, avatarUrls: result.avatarUrls, errorMessage: '' })),
|
||||
responseModel: { success: true, requestId: 'r1', avatarUrls: ['u1'], errorMessage: '' },
|
||||
};
|
||||
|
||||
const requestAvatarGenerationUseCase = {
|
||||
execute: vi.fn(async () => Result.ok(undefined)),
|
||||
execute: vi.fn(async () => Result.ok({ requestId: 'r1', status: 'completed', avatarUrls: ['u1'] })),
|
||||
};
|
||||
|
||||
const service = new MediaService(
|
||||
@@ -39,6 +40,7 @@ describe('MediaService', () => {
|
||||
facePhotoData: {} as any,
|
||||
suitColor: 'red',
|
||||
});
|
||||
expect(requestAvatarGenerationPresenter.transform).toHaveBeenCalledWith({ requestId: 'r1', status: 'completed', avatarUrls: ['u1'] });
|
||||
});
|
||||
|
||||
it('requestAvatarGeneration returns failure DTO on error', async () => {
|
||||
@@ -69,8 +71,11 @@ describe('MediaService', () => {
|
||||
});
|
||||
|
||||
it('uploadMedia returns presenter response on success', async () => {
|
||||
const uploadMediaPresenter = { responseModel: { success: true, mediaId: 'm1' } };
|
||||
const uploadMediaUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const uploadMediaPresenter = {
|
||||
transform: vi.fn((result) => ({ success: true, mediaId: result.mediaId })),
|
||||
responseModel: { success: true, mediaId: 'm1' }
|
||||
};
|
||||
const uploadMediaUseCase = { execute: vi.fn(async () => Result.ok({ mediaId: 'm1', url: 'https://example.com/m1.png' })) };
|
||||
|
||||
const service = new MediaService(
|
||||
{ execute: vi.fn() } as any,
|
||||
@@ -100,10 +105,15 @@ describe('MediaService', () => {
|
||||
uploadedBy: 'u1',
|
||||
metadata: { a: 1 },
|
||||
});
|
||||
expect(uploadMediaPresenter.transform).toHaveBeenCalledWith({ mediaId: 'm1', url: 'https://example.com/m1.png' });
|
||||
});
|
||||
|
||||
it('uploadMedia uses empty uploadedBy when userId missing', async () => {
|
||||
const uploadMediaUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const uploadMediaUseCase = { execute: vi.fn(async () => Result.ok({ mediaId: 'm1', url: 'https://example.com/m1.png' })) };
|
||||
const uploadMediaPresenter = {
|
||||
transform: vi.fn((result) => ({ success: true, mediaId: result.mediaId })),
|
||||
responseModel: { success: true, mediaId: 'm1' }
|
||||
};
|
||||
|
||||
const service = new MediaService(
|
||||
{ execute: vi.fn() } as any,
|
||||
@@ -114,7 +124,7 @@ describe('MediaService', () => {
|
||||
{ execute: vi.fn() } as any,
|
||||
logger as any,
|
||||
{ responseModel: {} } as any,
|
||||
{ responseModel: { success: true, mediaId: 'm1' } } as any,
|
||||
uploadMediaPresenter as any,
|
||||
{ responseModel: {} } as any,
|
||||
{ responseModel: {} } as any,
|
||||
{ responseModel: {} } as any,
|
||||
@@ -123,6 +133,7 @@ describe('MediaService', () => {
|
||||
|
||||
await expect(service.uploadMedia({ file: {} as any } as any)).resolves.toEqual({ success: true, mediaId: 'm1' });
|
||||
expect(uploadMediaUseCase.execute).toHaveBeenCalledWith({ file: {} as any, uploadedBy: '', metadata: {} });
|
||||
expect(uploadMediaPresenter.transform).toHaveBeenCalledWith({ mediaId: 'm1', url: 'https://example.com/m1.png' });
|
||||
});
|
||||
|
||||
it('uploadMedia returns failure DTO on error', async () => {
|
||||
@@ -153,8 +164,12 @@ describe('MediaService', () => {
|
||||
});
|
||||
|
||||
it('getMedia returns presenter response on success', async () => {
|
||||
const getMediaUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const getMediaPresenter = { responseModel: { mediaId: 'm1' } };
|
||||
const uploadedAt = new Date();
|
||||
const getMediaUseCase = { execute: vi.fn(async () => Result.ok({ media: { id: 'm1', filename: 'test.png', originalName: 'test.png', mimeType: 'image/png', size: 100, url: 'https://example.com/m1.png', type: 'image', uploadedBy: 'u1', uploadedAt } })) };
|
||||
const getMediaPresenter = {
|
||||
transform: vi.fn((result) => ({ id: result.media.id, url: result.media.url, type: result.media.type, uploadedAt: result.media.uploadedAt, size: result.media.size })),
|
||||
responseModel: { id: 'm1', url: 'https://example.com/m1.png', type: 'image', uploadedAt, size: 100 }
|
||||
};
|
||||
|
||||
const service = new MediaService(
|
||||
{ execute: vi.fn() } as any,
|
||||
@@ -172,8 +187,10 @@ describe('MediaService', () => {
|
||||
{ responseModel: {} } as any,
|
||||
);
|
||||
|
||||
await expect(service.getMedia('m1')).resolves.toEqual({ mediaId: 'm1' });
|
||||
const result = await service.getMedia('m1');
|
||||
expect(result).toEqual({ id: 'm1', url: 'https://example.com/m1.png', type: 'image', uploadedAt, size: 100 });
|
||||
expect(getMediaUseCase.execute).toHaveBeenCalledWith({ mediaId: 'm1' });
|
||||
expect(getMediaPresenter.transform).toHaveBeenCalledWith({ media: { id: 'm1', filename: 'test.png', originalName: 'test.png', mimeType: 'image/png', size: 100, url: 'https://example.com/m1.png', type: 'image', uploadedBy: 'u1', uploadedAt } });
|
||||
});
|
||||
|
||||
it('getMedia returns null on MEDIA_NOT_FOUND', async () => {
|
||||
@@ -217,8 +234,11 @@ describe('MediaService', () => {
|
||||
});
|
||||
|
||||
it('deleteMedia returns presenter response on success', async () => {
|
||||
const deleteMediaUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const deleteMediaPresenter = { responseModel: { success: true } };
|
||||
const deleteMediaUseCase = { execute: vi.fn(async () => Result.ok({ mediaId: 'm1', deleted: true })) };
|
||||
const deleteMediaPresenter = {
|
||||
transform: vi.fn((result) => ({ success: result.deleted })),
|
||||
responseModel: { success: true }
|
||||
};
|
||||
|
||||
const service = new MediaService(
|
||||
{ execute: vi.fn() } as any,
|
||||
@@ -238,6 +258,7 @@ describe('MediaService', () => {
|
||||
|
||||
await expect(service.deleteMedia('m1')).resolves.toEqual({ success: true });
|
||||
expect(deleteMediaUseCase.execute).toHaveBeenCalledWith({ mediaId: 'm1' });
|
||||
expect(deleteMediaPresenter.transform).toHaveBeenCalledWith({ mediaId: 'm1', deleted: true });
|
||||
});
|
||||
|
||||
it('deleteMedia returns failure DTO on error', async () => {
|
||||
@@ -261,8 +282,12 @@ describe('MediaService', () => {
|
||||
});
|
||||
|
||||
it('getAvatar returns presenter response on success', async () => {
|
||||
const getAvatarUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const getAvatarPresenter = { responseModel: { avatarUrl: 'u1' } };
|
||||
const selectedAt = new Date();
|
||||
const getAvatarUseCase = { execute: vi.fn(async () => Result.ok({ avatar: { id: 'a1', driverId: 'd1', mediaUrl: 'https://example.com/avatar.png', selectedAt } })) };
|
||||
const getAvatarPresenter = {
|
||||
transform: vi.fn((result) => ({ avatarUrl: result.avatar.mediaUrl })),
|
||||
responseModel: { avatarUrl: 'https://example.com/avatar.png' }
|
||||
};
|
||||
|
||||
const service = new MediaService(
|
||||
{ execute: vi.fn() } as any,
|
||||
@@ -280,8 +305,9 @@ describe('MediaService', () => {
|
||||
{ responseModel: {} } as any,
|
||||
);
|
||||
|
||||
await expect(service.getAvatar('d1')).resolves.toEqual({ avatarUrl: 'u1' });
|
||||
await expect(service.getAvatar('d1')).resolves.toEqual({ avatarUrl: 'https://example.com/avatar.png' });
|
||||
expect(getAvatarUseCase.execute).toHaveBeenCalledWith({ driverId: 'd1' });
|
||||
expect(getAvatarPresenter.transform).toHaveBeenCalledWith({ avatar: { id: 'a1', driverId: 'd1', mediaUrl: 'https://example.com/avatar.png', selectedAt } });
|
||||
});
|
||||
|
||||
it('getAvatar returns null on AVATAR_NOT_FOUND', async () => {
|
||||
@@ -325,8 +351,11 @@ describe('MediaService', () => {
|
||||
});
|
||||
|
||||
it('updateAvatar returns presenter response on success', async () => {
|
||||
const updateAvatarUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const updateAvatarPresenter = { responseModel: { success: true } };
|
||||
const updateAvatarUseCase = { execute: vi.fn(async () => Result.ok({ avatarId: 'a1', driverId: 'd1' })) };
|
||||
const updateAvatarPresenter = {
|
||||
transform: vi.fn(() => ({ success: true })),
|
||||
responseModel: { success: true }
|
||||
};
|
||||
|
||||
const service = new MediaService(
|
||||
{ execute: vi.fn() } as any,
|
||||
@@ -346,6 +375,7 @@ describe('MediaService', () => {
|
||||
|
||||
await expect(service.updateAvatar('d1', { avatarUrl: 'u1' } as any)).resolves.toEqual({ success: true });
|
||||
expect(updateAvatarUseCase.execute).toHaveBeenCalledWith({ driverId: 'd1', mediaUrl: 'u1' });
|
||||
expect(updateAvatarPresenter.transform).toHaveBeenCalledWith({ avatarId: 'a1', driverId: 'd1' });
|
||||
});
|
||||
|
||||
it('updateAvatar returns failure DTO on error', async () => {
|
||||
@@ -507,4 +537,4 @@ describe('MediaService', () => {
|
||||
error: 'Failed to update avatar',
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user