rwadurian/backend/services/admin-service/test/unit/domain/value-objects/version-code.vo.spec.ts

68 lines
2.2 KiB
TypeScript

import { VersionCode } from '../../../../src/domain/value-objects/version-code.vo';
import { DomainException } from '../../../../src/shared/exceptions/domain.exception';
describe('VersionCode Value Object', () => {
describe('create', () => {
it('should create valid version code', () => {
const versionCode = VersionCode.create(100);
expect(versionCode.value).toBe(100);
});
it('should throw error for non-integer', () => {
expect(() => VersionCode.create(1.5)).toThrow(DomainException);
expect(() => VersionCode.create(1.5)).toThrow('VersionCode must be an integer');
});
it('should throw error for zero', () => {
expect(() => VersionCode.create(0)).toThrow(DomainException);
expect(() => VersionCode.create(0)).toThrow('VersionCode must be positive');
});
it('should throw error for negative number', () => {
expect(() => VersionCode.create(-1)).toThrow(DomainException);
expect(() => VersionCode.create(-1)).toThrow('VersionCode must be positive');
});
});
describe('comparison methods', () => {
it('should compare version codes correctly', () => {
const v1 = VersionCode.create(100);
const v2 = VersionCode.create(200);
expect(v2.isNewerThan(v1)).toBe(true);
expect(v1.isNewerThan(v2)).toBe(false);
});
it('should return false for equal versions', () => {
const v1 = VersionCode.create(100);
const v2 = VersionCode.create(100);
expect(v1.isNewerThan(v2)).toBe(false);
expect(v2.isNewerThan(v1)).toBe(false);
});
});
describe('equals', () => {
it('should return true for same values', () => {
const v1 = VersionCode.create(100);
const v2 = VersionCode.create(100);
expect(v1.equals(v2)).toBe(true);
});
it('should return false for different values', () => {
const v1 = VersionCode.create(100);
const v2 = VersionCode.create(200);
expect(v1.equals(v2)).toBe(false);
});
});
describe('toString', () => {
it('should return string representation', () => {
const versionCode = VersionCode.create(100);
expect(versionCode.toString()).toBe('100');
});
});
});