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

63 lines
2.2 KiB
TypeScript

import { VersionName } from '../../../../src/domain/value-objects/version-name.vo';
import { DomainException } from '../../../../src/shared/exceptions/domain.exception';
describe('VersionName Value Object', () => {
describe('create', () => {
it('should create valid semantic version', () => {
const versionName = VersionName.create('1.2.3');
expect(versionName.value).toBe('1.2.3');
expect(versionName.major).toBe(1);
expect(versionName.minor).toBe(2);
expect(versionName.patch).toBe(3);
});
it('should create version with zeros', () => {
const versionName = VersionName.create('0.0.1');
expect(versionName.value).toBe('0.0.1');
expect(versionName.major).toBe(0);
expect(versionName.minor).toBe(0);
expect(versionName.patch).toBe(1);
});
it('should throw error for empty string', () => {
expect(() => VersionName.create('')).toThrow(DomainException);
expect(() => VersionName.create(' ')).toThrow(DomainException);
});
it('should throw error for invalid format', () => {
expect(() => VersionName.create('1.2')).toThrow(DomainException);
expect(() => VersionName.create('1.2.3.4')).toThrow(DomainException);
expect(() => VersionName.create('v1.2.3')).toThrow(DomainException);
expect(() => VersionName.create('1.2.x')).toThrow(DomainException);
});
it('should trim whitespace', () => {
const versionName = VersionName.create(' 1.2.3 ');
expect(versionName.value).toBe('1.2.3');
});
});
describe('equals', () => {
it('should return true for same versions', () => {
const v1 = VersionName.create('1.2.3');
const v2 = VersionName.create('1.2.3');
expect(v1.equals(v2)).toBe(true);
});
it('should return false for different versions', () => {
const v1 = VersionName.create('1.2.3');
const v2 = VersionName.create('1.2.4');
expect(v1.equals(v2)).toBe(false);
});
});
describe('toString', () => {
it('should return string representation', () => {
const versionName = VersionName.create('1.2.3');
expect(versionName.toString()).toBe('1.2.3');
});
});
});