56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
const { describe, it } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const {
|
|
normalizePersonName,
|
|
namesMatch,
|
|
normalizePhone,
|
|
mapAttendanceStatus,
|
|
projectSessionDates
|
|
} = require('./importHelpers');
|
|
|
|
describe('importHelpers', () => {
|
|
it('normalizes honorifics so spreadsheet names match database users', () => {
|
|
assert.equal(normalizePersonName('مریم خ پناهیان'), 'مریم پناهیان');
|
|
assert.equal(normalizePersonName('سرکار فاطمه'), 'فاطمه');
|
|
assert.equal(normalizePersonName('سرکار خانم جاذبی'), 'جاذبی');
|
|
assert.ok(namesMatch('آقای رضایی', 'آقای رضایی'));
|
|
assert.equal(normalizePhone(9168942141), '09168942141');
|
|
assert.equal(normalizePhone('93568933888'), '09356893388');
|
|
assert.equal(normalizePhone('09161117529'), '09161117529');
|
|
});
|
|
|
|
it('maps spreadsheet attendance marks', () => {
|
|
assert.equal(mapAttendanceStatus('*'), 'present');
|
|
assert.equal(mapAttendanceStatus('غ'), 'absent');
|
|
assert.equal(mapAttendanceStatus(''), null);
|
|
});
|
|
|
|
it('projects remaining Teksa sessions from Sunday/Tuesday pattern', () => {
|
|
const firstNine = [
|
|
'2026-07-14',
|
|
'2026-07-19',
|
|
'2026-07-21',
|
|
'2026-07-26',
|
|
'2026-07-28',
|
|
'2026-08-02',
|
|
'2026-08-04',
|
|
'2026-08-09',
|
|
'2026-08-11'
|
|
];
|
|
const all = projectSessionDates(firstNine, 16);
|
|
assert.equal(all.length, 16);
|
|
assert.deepEqual(all.slice(0, 9), firstNine);
|
|
assert.deepEqual(all.slice(9), [
|
|
'2026-08-16',
|
|
'2026-08-18',
|
|
'2026-08-23',
|
|
'2026-08-25',
|
|
'2026-08-30',
|
|
'2026-09-01',
|
|
'2026-09-06'
|
|
]);
|
|
});
|
|
});
|