New Base func
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import { validateBalance } from '../engine'
|
||||
import type { CreateJournalEntryLineInput } from '@/types'
|
||||
|
||||
describe('validateBalance', () => {
|
||||
it('balanced entry (debit == credit) → valid: true', () => {
|
||||
const lines: CreateJournalEntryLineInput[] = [
|
||||
{ account_number: '1930', debit_amount: 1000, credit_amount: 0 },
|
||||
{ account_number: '3001', debit_amount: 0, credit_amount: 1000 },
|
||||
]
|
||||
|
||||
const result = validateBalance(lines)
|
||||
expect(result.valid).toBe(true)
|
||||
expect(result.totalDebit).toBe(1000)
|
||||
expect(result.totalCredit).toBe(1000)
|
||||
})
|
||||
|
||||
it('unbalanced entry → valid: false', () => {
|
||||
const lines: CreateJournalEntryLineInput[] = [
|
||||
{ account_number: '1930', debit_amount: 1000, credit_amount: 0 },
|
||||
{ account_number: '3001', debit_amount: 0, credit_amount: 500 },
|
||||
]
|
||||
|
||||
const result = validateBalance(lines)
|
||||
expect(result.valid).toBe(false)
|
||||
expect(result.totalDebit).toBe(1000)
|
||||
expect(result.totalCredit).toBe(500)
|
||||
})
|
||||
|
||||
it('zero amounts → valid: false (roundedDebit must be > 0)', () => {
|
||||
const lines: CreateJournalEntryLineInput[] = [
|
||||
{ account_number: '1930', debit_amount: 0, credit_amount: 0 },
|
||||
{ account_number: '3001', debit_amount: 0, credit_amount: 0 },
|
||||
]
|
||||
|
||||
const result = validateBalance(lines)
|
||||
expect(result.valid).toBe(false)
|
||||
expect(result.totalDebit).toBe(0)
|
||||
expect(result.totalCredit).toBe(0)
|
||||
})
|
||||
|
||||
it('floating point edge case (33.33 + 33.33 + 33.34) → valid: true', () => {
|
||||
const lines: CreateJournalEntryLineInput[] = [
|
||||
{ account_number: '1930', debit_amount: 33.33, credit_amount: 0 },
|
||||
{ account_number: '1930', debit_amount: 33.33, credit_amount: 0 },
|
||||
{ account_number: '1930', debit_amount: 33.34, credit_amount: 0 },
|
||||
{ account_number: '3001', debit_amount: 0, credit_amount: 100 },
|
||||
]
|
||||
|
||||
const result = validateBalance(lines)
|
||||
expect(result.valid).toBe(true)
|
||||
expect(result.totalDebit).toBe(100)
|
||||
expect(result.totalCredit).toBe(100)
|
||||
})
|
||||
|
||||
it('single line (only debit, no credit) → valid: false', () => {
|
||||
const lines: CreateJournalEntryLineInput[] = [
|
||||
{ account_number: '1930', debit_amount: 500, credit_amount: 0 },
|
||||
]
|
||||
|
||||
const result = validateBalance(lines)
|
||||
expect(result.valid).toBe(false)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user