@accounter/server
Version:
Accounter GraphQL server
127 lines • 6.33 kB
JavaScript
import { describe, it, expect } from 'vitest';
import { calculateCurrencyConfidence } from '../helpers/currency-confidence.helper.js';
describe('calculateCurrencyConfidence', () => {
describe('same currency', () => {
it('should return 1.0 for identical USD', () => {
expect(calculateCurrencyConfidence('USD', 'USD')).toBe(1.0);
});
it('should return 1.0 for identical EUR', () => {
expect(calculateCurrencyConfidence('EUR', 'EUR')).toBe(1.0);
});
it('should return 1.0 for identical ILS', () => {
expect(calculateCurrencyConfidence('ILS', 'ILS')).toBe(1.0);
});
it('should return 1.0 for identical GBP', () => {
expect(calculateCurrencyConfidence('GBP', 'GBP')).toBe(1.0);
});
it('should return 1.0 for identical USDC', () => {
expect(calculateCurrencyConfidence('USDC', 'USDC')).toBe(1.0);
});
it('should return 1.0 for identical GRT', () => {
expect(calculateCurrencyConfidence('GRT', 'GRT')).toBe(1.0);
});
it('should return 1.0 for identical ETH', () => {
expect(calculateCurrencyConfidence('ETH', 'ETH')).toBe(1.0);
});
});
describe('different currencies', () => {
it('should return 0.0 for USD vs EUR', () => {
expect(calculateCurrencyConfidence('USD', 'EUR')).toBe(0.0);
});
it('should return 0.0 for ILS vs USD', () => {
expect(calculateCurrencyConfidence('ILS', 'USD')).toBe(0.0);
});
it('should return 0.0 for EUR vs GBP', () => {
expect(calculateCurrencyConfidence('EUR', 'GBP')).toBe(0.0);
});
it('should return 0.0 for GRT vs ETH', () => {
expect(calculateCurrencyConfidence('GRT', 'ETH')).toBe(0.0);
});
it('should return 0.0 for USDC vs USD', () => {
expect(calculateCurrencyConfidence('USDC', 'USD')).toBe(0.0);
});
});
describe('case sensitivity', () => {
it('should be case-insensitive for uppercase vs lowercase', () => {
expect(calculateCurrencyConfidence('USD', 'usd')).toBe(1.0);
});
it('should be case-insensitive for lowercase vs uppercase', () => {
expect(calculateCurrencyConfidence('eur', 'EUR')).toBe(1.0);
});
it('should be case-insensitive for mixed case', () => {
expect(calculateCurrencyConfidence('Usd', 'UsD')).toBe(1.0);
});
it('should be case-insensitive for ILS variations', () => {
expect(calculateCurrencyConfidence('ILS', 'ils')).toBe(1.0);
expect(calculateCurrencyConfidence('ils', 'ILS')).toBe(1.0);
});
});
describe('edge cases with null and undefined', () => {
it('should return 0.2 when transaction currency is null', () => {
expect(calculateCurrencyConfidence(null, 'USD')).toBe(0.2);
});
it('should return 0.2 when document currency is null', () => {
expect(calculateCurrencyConfidence('USD', null)).toBe(0.2);
});
it('should return 0.2 when both currencies are null', () => {
expect(calculateCurrencyConfidence(null, null)).toBe(0.2);
});
it('should return 0.2 when transaction currency is undefined', () => {
expect(calculateCurrencyConfidence(undefined, 'USD')).toBe(0.2);
});
it('should return 0.2 when document currency is undefined', () => {
expect(calculateCurrencyConfidence('USD', undefined)).toBe(0.2);
});
it('should return 0.2 when both currencies are undefined', () => {
expect(calculateCurrencyConfidence(undefined, undefined)).toBe(0.2);
});
it('should return 0.2 when transaction is null and document is undefined', () => {
expect(calculateCurrencyConfidence(null, undefined)).toBe(0.2);
});
it('should return 0.2 when transaction is undefined and document is null', () => {
expect(calculateCurrencyConfidence(undefined, null)).toBe(0.2);
});
});
describe('edge cases with empty strings', () => {
it('should return 0.2 when transaction currency is empty string', () => {
expect(calculateCurrencyConfidence('', 'USD')).toBe(0.2);
});
it('should return 0.2 when document currency is empty string', () => {
expect(calculateCurrencyConfidence('USD', '')).toBe(0.2);
});
it('should return 0.2 when both currencies are empty strings', () => {
expect(calculateCurrencyConfidence('', '')).toBe(0.2);
});
});
describe('symmetry', () => {
it('should return same result regardless of parameter order for same currencies', () => {
expect(calculateCurrencyConfidence('USD', 'EUR')).toBe(calculateCurrencyConfidence('EUR', 'USD'));
});
it('should return same result regardless of parameter order for matching currencies', () => {
expect(calculateCurrencyConfidence('USD', 'USD')).toBe(calculateCurrencyConfidence('USD', 'USD'));
});
});
describe('return value validation', () => {
it('should return exactly 1.0, 0.2, or 0.0 (no other values)', () => {
const result1 = calculateCurrencyConfidence('USD', 'USD');
const result2 = calculateCurrencyConfidence('USD', 'EUR');
const result3 = calculateCurrencyConfidence(null, 'USD');
expect([1.0, 0.2, 0.0]).toContain(result1);
expect([1.0, 0.2, 0.0]).toContain(result2);
expect([1.0, 0.2, 0.0]).toContain(result3);
});
it('should return numbers with correct precision', () => {
const match = calculateCurrencyConfidence('USD', 'USD');
const mismatch = calculateCurrencyConfidence('USD', 'EUR');
const missing = calculateCurrencyConfidence(null, 'USD');
expect(match).toBe(1.0);
expect(mismatch).toBe(0.0);
expect(missing).toBe(0.2);
// Verify exact values
expect(match === 1.0).toBe(true);
expect(mismatch === 0.0).toBe(true);
expect(missing === 0.2).toBe(true);
});
});
});
//# sourceMappingURL=currency-confidence.test.js.map