import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import { toGregorian } from '../src/common/jalali'; import { BIRTHDAY_SMS_DEFAULT, fillBirthdaySmsText, selectMonthBirthdays, } from '../src/contacts/birthday-month'; function birth(jy: number, jm: number, jd: number) { const g = toGregorian(jy, jm, jd); return new Date(Date.UTC(g.gy, g.gm - 1, g.gd, 12, 0, 0)); } const now = new Date('2026-10-08T08:00:00Z'); describe('تولدهای ماه شمسی', () => { it('فقط متولدین همین ماه را می‌آورد و روزهای مانده را جلوتر می‌گذارد', () => { const result = selectMonthBirthdays( [ { id: 'soon', firstName: 'آیدا', lastName: 'کریمی', mobile: '09120000000', birthDate: birth(1370, 7, 20) }, { id: 'past', firstName: 'رضا', lastName: 'بهرامی', mobile: null, birthDate: birth(1360, 7, 2) }, { id: 'other', firstName: 'پریسا', lastName: 'قاسمی', mobile: '09121111111', birthDate: birth(1369, 6, 30) }, { id: 'today', firstName: 'سارا', lastName: 'محمدی', mobile: '09123333333', birthDate: birth(1375, 7, 16) }, ], now, 2, ); assert.equal(result.month, 7); assert.equal(result.monthName, 'مهر'); assert.equal(result.today, 16); assert.equal(result.total, 3); assert.deepEqual( result.preview.map((row) => row.id), ['today', 'soon'], ); assert.deepEqual( result.items.map((row) => row.id), ['today', 'soon', 'past'], ); assert.equal(result.items.find((row) => row.id === 'past')?.mobile, null); }); it('نام را در متن پیامک می‌گذارد', () => { assert.equal( fillBirthdaySmsText(BIRTHDAY_SMS_DEFAULT, 'آیدا', 'کریمی'), 'آیدا کریمی عزیز، تولدتان مبارک.', ); assert.equal(fillBirthdaySmsText(' سلام {نام} ', 'آیدا', ''), 'سلام آیدا'); }); });