// @vitest-environment node import { test, expect } from 'vitest'; import { resolveIqPath } from './iqbible.js'; test('only listed IQ Bible routes are reachable', () => { expect(resolveIqPath('commentaries/gill/JHN/3/16')?.key).toBe('/commentaries/gill/JHN/3/16'); expect(resolveIqPath('/geo/JHN/3')?.cache).toBe(true); expect(resolveIqPath('/me')).toBeNull(); expect(resolveIqPath('/licensing')).toBeNull(); expect(resolveIqPath('/commentaries/gill/../me')).toBeNull(); expect(resolveIqPath('/lexicon/greek/strongs/G26')).not.toBeNull(); }); test('lexicon sources and audio routes', () => { expect(resolveIqPath('/lexicon/greek/lsj/G0026')).not.toBeNull(); expect(resolveIqPath('/lexicon/hebrew/bdb/BDB1005')).not.toBeNull(); expect(resolveIqPath('/audio/eng_kjv/JHN/3')?.cache).toBe(false); expect(resolveIqPath('/ai/context', { ref: 'JHN.3.16' })?.heavy).toBe(true); }); test('the browser cannot send its own key and the query is normalised', () => { const r = resolveIqPath('/bibles/eng_kjv/reading-plan', { days: '30', apikey: 'x', 'bad key': '1', format: 'ical' }); expect(r.key).toBe('/bibles/eng_kjv/reading-plan?days=30&format=ical'); }); test('only verse and chapter text counts as cacheable text', async () => { const { isTextPath } = await import('./iqbible.js'); expect(isTextPath('/bibles/eng_kjv/JHN/3')).toBe(true); expect(isTextPath('/bibles/eng_kjv/JHN/3/16')).toBe(true); expect(isTextPath('/bibles/eng_kjv/random/verse')).toBe(false); expect(isTextPath('/bibles/eng_kjv/verse-of-the-day')).toBe(false); expect(isTextPath('/commentaries/gill/JHN/3')).toBe(false); expect(resolveIqPath('/bibles/parallel', { v: 'eng_kjv,spa_rv' })).not.toBeNull(); });