Files
gridpilot.gg/apps/website/lib/builders/view-data/DeleteMediaViewDataBuilder.test.ts
Marc Mintel d97f50ed72
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 6m4s
Contract Testing / contract-snapshot (pull_request) Has been skipped
view data fixes
2026-01-23 11:59:49 +01:00

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)');
});
});
});