260320:1131 Refactor Overrall #01
Build and Deploy / deploy (push) Has been cancelled

This commit is contained in:
admin
2026-03-20 11:31:27 +07:00
parent f1b81a7d0d
commit 1d3479770b
147 changed files with 1745 additions and 1567 deletions
@@ -0,0 +1,89 @@
import { BadRequestException } from '@nestjs/common';
import { ParseUuidPipe } from './parse-uuid.pipe';
// Mock uuid module to avoid ESM import issue with uuid@13
jest.mock('uuid', () => ({
validate: (str: string) =>
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
str
),
v7: () => '01912345-6789-7abc-8def-0123456789ab',
}));
describe('ParseUuidPipe', () => {
let pipe: ParseUuidPipe;
beforeEach(() => {
pipe = new ParseUuidPipe();
});
// ==========================================================
// Valid UUIDs
// ==========================================================
describe('valid UUIDs', () => {
it('should accept a valid UUIDv4 and return lowercase', () => {
const uuid = 'a1b2c3d4-e5f6-4789-abcd-ef0123456789';
expect(pipe.transform(uuid)).toBe(uuid);
});
it('should accept a valid UUIDv7 and return lowercase', () => {
const uuid = '01912345-6789-7abc-8def-0123456789ab';
expect(pipe.transform(uuid)).toBe(uuid);
});
it('should accept a valid UUIDv1 (MariaDB DEFAULT)', () => {
const uuid = '550e8400-e29b-11d4-a716-446655440000';
expect(pipe.transform(uuid)).toBe(uuid);
});
it('should normalize uppercase UUID to lowercase', () => {
const uuid = 'A1B2C3D4-E5F6-4789-ABCD-EF0123456789';
expect(pipe.transform(uuid)).toBe(uuid.toLowerCase());
});
it('should normalize mixed case UUID to lowercase', () => {
const uuid = 'a1B2c3D4-e5F6-4789-AbCd-eF0123456789';
expect(pipe.transform(uuid)).toBe(uuid.toLowerCase());
});
});
// ==========================================================
// Invalid inputs
// ==========================================================
describe('invalid inputs', () => {
it('should throw BadRequestException for empty string', () => {
expect(() => pipe.transform('')).toThrow(BadRequestException);
});
it('should throw BadRequestException for random string', () => {
expect(() => pipe.transform('not-a-uuid')).toThrow(BadRequestException);
});
it('should throw BadRequestException for numeric string', () => {
expect(() => pipe.transform('12345')).toThrow(BadRequestException);
});
it('should throw BadRequestException for UUID without hyphens', () => {
expect(() => pipe.transform('a1b2c3d4e5f64789abcdef0123456789')).toThrow(
BadRequestException
);
});
it('should throw BadRequestException for UUID with extra characters', () => {
expect(() =>
pipe.transform('a1b2c3d4-e5f6-4789-abcd-ef0123456789-extra')
).toThrow(BadRequestException);
});
it('should include the invalid value in error message', () => {
try {
pipe.transform('bad-value');
fail('Should have thrown');
} catch (error) {
expect((error as BadRequestException).message).toContain('bad-value');
}
});
});
});