55 lines
1.8 KiB
JavaScript
55 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const {
|
|
billingCycleForCycleType,
|
|
cycleTypeFromBillingCycle,
|
|
validateBillData,
|
|
} = require('../services/billsService');
|
|
|
|
test('billing schedule helpers map canonical cycle_type to legacy billing_cycle', () => {
|
|
assert.equal(billingCycleForCycleType('monthly'), 'monthly');
|
|
assert.equal(billingCycleForCycleType('quarterly'), 'quarterly');
|
|
assert.equal(billingCycleForCycleType('annual'), 'annually');
|
|
assert.equal(billingCycleForCycleType('weekly'), 'irregular');
|
|
assert.equal(billingCycleForCycleType('biweekly'), 'irregular');
|
|
});
|
|
|
|
test('billing schedule helpers recover legacy billing_cycle values', () => {
|
|
assert.equal(cycleTypeFromBillingCycle('monthly'), 'monthly');
|
|
assert.equal(cycleTypeFromBillingCycle('quarterly'), 'quarterly');
|
|
assert.equal(cycleTypeFromBillingCycle('annually'), 'annual');
|
|
assert.equal(cycleTypeFromBillingCycle('irregular'), 'monthly');
|
|
});
|
|
|
|
test('validateBillData derives billing_cycle from cycle_type', () => {
|
|
const { errors, normalized } = validateBillData({
|
|
name: 'Gym',
|
|
due_day: 12,
|
|
expected_amount: 25,
|
|
billing_cycle: 'monthly',
|
|
cycle_type: 'biweekly',
|
|
cycle_day: 'friday',
|
|
});
|
|
|
|
assert.deepEqual(errors, []);
|
|
assert.equal(normalized.cycle_type, 'biweekly');
|
|
assert.equal(normalized.cycle_day, 'friday');
|
|
assert.equal(normalized.billing_cycle, 'irregular');
|
|
});
|
|
|
|
test('validateBillData uses legacy billing_cycle when cycle_type is absent', () => {
|
|
const { errors, normalized } = validateBillData({
|
|
name: 'Insurance',
|
|
due_day: 20,
|
|
expected_amount: 100,
|
|
billing_cycle: 'annually',
|
|
});
|
|
|
|
assert.deepEqual(errors, []);
|
|
assert.equal(normalized.cycle_type, 'annual');
|
|
assert.equal(normalized.billing_cycle, 'annually');
|
|
});
|