rwadurian/backend/services/authorization-service/src/domain/value-objects/month.vo.spec.ts

84 lines
2.5 KiB
TypeScript

import { Month } from './month.vo'
import { DomainError } from '@/shared/exceptions'
describe('Month Value Object', () => {
describe('create', () => {
it('should create a valid month', () => {
const month = Month.create('2024-01')
expect(month.value).toBe('2024-01')
})
it('should throw error for invalid format', () => {
expect(() => Month.create('2024-1')).toThrow(DomainError)
expect(() => Month.create('2024/01')).toThrow(DomainError)
expect(() => Month.create('202401')).toThrow(DomainError)
expect(() => Month.create('invalid')).toThrow(DomainError)
})
})
describe('current', () => {
it('should return current month in YYYY-MM format', () => {
const month = Month.current()
expect(month.value).toMatch(/^\d{4}-\d{2}$/)
})
})
describe('next', () => {
it('should return next month', () => {
const month = Month.create('2024-01')
expect(month.next().value).toBe('2024-02')
})
it('should handle year transition', () => {
const month = Month.create('2024-12')
expect(month.next().value).toBe('2025-01')
})
})
describe('previous', () => {
it('should return previous month', () => {
const month = Month.create('2024-02')
expect(month.previous().value).toBe('2024-01')
})
it('should handle year transition', () => {
const month = Month.create('2024-01')
expect(month.previous().value).toBe('2023-12')
})
})
describe('equals', () => {
it('should return true for equal months', () => {
const month1 = Month.create('2024-01')
const month2 = Month.create('2024-01')
expect(month1.equals(month2)).toBe(true)
})
it('should return false for different months', () => {
const month1 = Month.create('2024-01')
const month2 = Month.create('2024-02')
expect(month1.equals(month2)).toBe(false)
})
})
describe('isAfter/isBefore', () => {
it('should compare months correctly', () => {
const jan = Month.create('2024-01')
const feb = Month.create('2024-02')
expect(feb.isAfter(jan)).toBe(true)
expect(jan.isBefore(feb)).toBe(true)
expect(jan.isAfter(feb)).toBe(false)
expect(feb.isBefore(jan)).toBe(false)
})
})
describe('getYear/getMonth', () => {
it('should extract year and month correctly', () => {
const month = Month.create('2024-06')
expect(month.getYear()).toBe(2024)
expect(month.getMonth()).toBe(6)
})
})
})