/** * CJS test suite for moon-cycle v2. * Verifies CommonJS compatibility of the built package. */ 'use strict'; const { describe, it } = require('node:test'); const assert = require('node:assert/strict'); const { cycleMonth, cycleYear, imageFolder, cdnUrl, SYNODIC_MONTH, MONTH_IMAGES, YEAR_IMAGES, MONTH_ANCHOR, YEAR_ANCHOR, } = require('./dist/index.cjs'); describe('CJS exports', () => { it('all exports are available via require()', () => { assert.strictEqual(typeof cycleMonth, 'function'); assert.strictEqual(typeof cycleYear, 'function'); assert.strictEqual(typeof imageFolder, 'function'); assert.strictEqual(typeof cdnUrl, 'function'); assert.strictEqual(typeof SYNODIC_MONTH, 'number'); assert.strictEqual(typeof MONTH_IMAGES, 'number'); assert.strictEqual(typeof YEAR_IMAGES, 'number'); assert(MONTH_ANCHOR instanceof Date); assert(YEAR_ANCHOR instanceof Date); }); it('cycleMonth at anchor returns 001.webp', () => { assert.strictEqual(cycleMonth(MONTH_ANCHOR), '001.webp'); }); it('cycleYear at anchor returns 0001.webp', () => { assert.strictEqual(cycleYear(YEAR_ANCHOR), '0001.webp'); }); it('cycleMonth result format is correct', () => { assert.match(cycleMonth(), /^\d{3}\.webp$/); }); it('cycleYear result format is correct', () => { assert.match(cycleYear(), /^\d{4}\.webp$/); }); it('imageFolder constructs correct path', () => { assert.strictEqual(imageFolder('mm', 256, 75), 'mm-256-75'); }); it('cdnUrl returns expected jsDelivr URL', () => { assert.strictEqual( cdnUrl('001.webp', 'mm', 256, 75), 'https://cdn.jsdelivr.net/gh/acamarata/moon-cycle@main/mm-256-75/001.webp', ); }); it('cycleMonth throws TypeError for invalid Date', () => { assert.throws(() => cycleMonth(new Date('invalid')), { name: 'TypeError', message: 'date must be a valid Date instance', }); }); it('cycleYear throws TypeError for invalid Date', () => { assert.throws(() => cycleYear(new Date('invalid')), { name: 'TypeError', message: 'date must be a valid Date instance', }); }); });