view data fixes
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
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)');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user