84 lines
2.5 KiB
TypeScript
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)
|
|
})
|
|
})
|
|
})
|