123 lines
3.3 KiB
TypeScript
123 lines
3.3 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { DeleteMediaViewDataBuilder } from './DeleteMediaViewDataBuilder';
|
|
import type { DeleteMediaOutputDTO } from '@/lib/types/generated/DeleteMediaOutputDTO';
|
|
|
|
describe('DeleteMediaViewDataBuilder', () => {
|
|
describe('happy paths', () => {
|
|
it('should transform successful deletion DTO to ViewData correctly', () => {
|
|
const apiDto: DeleteMediaOutputDTO = {
|
|
success: true,
|
|
};
|
|
|
|
const result = DeleteMediaViewDataBuilder.build(apiDto);
|
|
|
|
expect(result).toEqual({
|
|
success: true,
|
|
error: undefined,
|
|
});
|
|
});
|
|
|
|
it('should handle deletion with error message', () => {
|
|
const apiDto: DeleteMediaOutputDTO = {
|
|
success: false,
|
|
error: 'Failed to delete media',
|
|
};
|
|
|
|
const result = DeleteMediaViewDataBuilder.build(apiDto);
|
|
|
|
expect(result).toEqual({
|
|
success: false,
|
|
error: 'Failed to delete media',
|
|
});
|
|
});
|
|
|
|
it('should handle deletion with only success field', () => {
|
|
const apiDto: DeleteMediaOutputDTO = {
|
|
success: true,
|
|
};
|
|
|
|
const result = DeleteMediaViewDataBuilder.build(apiDto);
|
|
|
|
expect(result).toEqual({
|
|
success: true,
|
|
error: undefined,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('data transformation', () => {
|
|
it('should preserve all DTO fields in the output', () => {
|
|
const apiDto: DeleteMediaOutputDTO = {
|
|
success: false,
|
|
error: 'Something went wrong',
|
|
};
|
|
|
|
const result = DeleteMediaViewDataBuilder.build(apiDto);
|
|
|
|
expect(result.success).toBe(apiDto.success);
|
|
expect(result.error).toBe(apiDto.error);
|
|
});
|
|
|
|
it('should not modify the input DTO', () => {
|
|
const apiDto: DeleteMediaOutputDTO = {
|
|
success: false,
|
|
error: 'Error',
|
|
};
|
|
|
|
const originalDto = { ...apiDto };
|
|
DeleteMediaViewDataBuilder.build(apiDto);
|
|
|
|
expect(apiDto).toEqual(originalDto);
|
|
});
|
|
});
|
|
|
|
describe('edge cases', () => {
|
|
it('should handle false success value', () => {
|
|
const apiDto: DeleteMediaOutputDTO = {
|
|
success: false,
|
|
error: 'Error occurred',
|
|
};
|
|
|
|
const result = DeleteMediaViewDataBuilder.build(apiDto);
|
|
|
|
expect(result.success).toBe(false);
|
|
expect(result.error).toBe('Error occurred');
|
|
});
|
|
|
|
it('should handle empty string error message', () => {
|
|
const apiDto: DeleteMediaOutputDTO = {
|
|
success: false,
|
|
error: '',
|
|
};
|
|
|
|
const result = DeleteMediaViewDataBuilder.build(apiDto);
|
|
|
|
expect(result.success).toBe(false);
|
|
expect(result.error).toBe('');
|
|
});
|
|
|
|
it('should handle very long error message', () => {
|
|
const longError = 'Error: ' + 'a'.repeat(1000);
|
|
const apiDto: DeleteMediaOutputDTO = {
|
|
success: false,
|
|
error: longError,
|
|
};
|
|
|
|
const result = DeleteMediaViewDataBuilder.build(apiDto);
|
|
|
|
expect(result.error).toBe(longError);
|
|
});
|
|
|
|
it('should handle special characters in error message', () => {
|
|
const apiDto: DeleteMediaOutputDTO = {
|
|
success: false,
|
|
error: 'Error: "Failed to delete media" (code: 500)',
|
|
};
|
|
|
|
const result = DeleteMediaViewDataBuilder.build(apiDto);
|
|
|
|
expect(result.error).toBe('Error: "Failed to delete media" (code: 500)');
|
|
});
|
|
});
|
|
});
|