Allow SuperAdmin to disable SMS, email, and bot from dashboard settings on top of env flags. Add admin password reset with credentials SMS, plus payment discounts, notes, and payable amount handling.
47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const { describe, it } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const {
|
|
getPayableAmount,
|
|
normalizeDiscount,
|
|
sanitizeNotes,
|
|
NOTES_MAX_LENGTH
|
|
} = require('./paymentAmount');
|
|
|
|
describe('payment amount helpers', () => {
|
|
it('returns the original amount when there is no discount', () => {
|
|
assert.equal(getPayableAmount({ amount: 1_000_000 }), 1_000_000);
|
|
assert.equal(getPayableAmount({ amount: 1_000_000, discount: 0 }), 1_000_000);
|
|
});
|
|
|
|
it('subtracts a discount from the total', () => {
|
|
assert.equal(getPayableAmount({ amount: 1_000_000, discount: 150_000 }), 850_000);
|
|
});
|
|
|
|
it('never returns a negative payable amount', () => {
|
|
assert.equal(getPayableAmount({ amount: 100, discount: 250 }), 0);
|
|
});
|
|
|
|
it('treats missing or invalid values as zero', () => {
|
|
assert.equal(getPayableAmount({}), 0);
|
|
assert.equal(getPayableAmount({ amount: 'abc', discount: 'x' }), 0);
|
|
assert.equal(normalizeDiscount(-50, 1000), 0);
|
|
assert.equal(normalizeDiscount('not-a-number', 1000), 0);
|
|
});
|
|
|
|
it('clamps discount so it cannot exceed the total', () => {
|
|
assert.equal(normalizeDiscount(2_000, 1_000), 1_000);
|
|
assert.equal(normalizeDiscount(200, 1_000), 200);
|
|
});
|
|
});
|
|
|
|
describe('sanitizeNotes', () => {
|
|
it('trims notes and caps length', () => {
|
|
assert.equal(sanitizeNotes(' hello '), 'hello');
|
|
assert.equal(sanitizeNotes(null), '');
|
|
assert.equal(sanitizeNotes(undefined), '');
|
|
assert.equal(sanitizeNotes('a'.repeat(NOTES_MAX_LENGTH + 10)).length, NOTES_MAX_LENGTH);
|
|
});
|
|
});
|