Support public class lookup, user provisioning, installment pricing, and admin approval before final enrollment.
47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const {
|
|
calculateEnrollmentPricing,
|
|
calculateClassRequestPricing,
|
|
calculateMidpointDueDate
|
|
} = require('./registrationPricing');
|
|
|
|
test('full payment applies 500k discount', () => {
|
|
const result = calculateEnrollmentPricing(
|
|
{ tuitionFee: 5_000_000, hasDiscount: false },
|
|
{ sectionCount: 16 },
|
|
'full'
|
|
);
|
|
assert.equal(result.totalAmount, 4_500_000);
|
|
assert.equal(result.paymentDiscount, 500_000);
|
|
assert.equal(result.amountDueNow, 4_500_000);
|
|
});
|
|
|
|
test('installments charge full tuition with half due now', () => {
|
|
const result = calculateEnrollmentPricing(
|
|
{ tuitionFee: 4_000_000, hasDiscount: false, startDate: '2026-09-01', days: [2, 4] },
|
|
{ sectionCount: 16 },
|
|
'installments'
|
|
);
|
|
assert.equal(result.totalAmount, 4_000_000);
|
|
assert.equal(result.amountDueNow, 2_000_000);
|
|
assert.equal(result.secondInstallmentAmount, 2_000_000);
|
|
assert.ok(result.secondInstallmentDueDate);
|
|
});
|
|
|
|
test('class request deposit is 10 percent', () => {
|
|
const result = calculateClassRequestPricing({ tuitionFee: 3_000_000, hasDiscount: false });
|
|
assert.equal(result.amountDueNow, 300_000);
|
|
assert.equal(result.paymentPlan, 'deposit');
|
|
});
|
|
|
|
test('midpoint due date is halfway through course duration', () => {
|
|
const due = calculateMidpointDueDate(
|
|
{ startDate: '2026-01-01', days: [2, 4] },
|
|
{ sectionCount: 16 }
|
|
);
|
|
assert.equal(due.toISOString().slice(0, 10), '2026-01-29');
|
|
});
|