import test from 'node:test'; import assert from 'node:assert/strict'; import vm from 'node:vm'; import { injectMindSpaceRybbit, resolveMindSpaceRybbitConfig, } from './mindspace-rybbit.mjs'; test('rybbit config is disabled unless explicitly enabled and configured', () => { assert.equal(resolveMindSpaceRybbitConfig({ MEMIND_RYBBIT_ENABLED: 'true' }).enabled, false); assert.equal(resolveMindSpaceRybbitConfig({ MEMIND_RYBBIT_ENABLED: 'true', MEMIND_RYBBIT_SITE_ID: '2', }).enabled, false); const config = resolveMindSpaceRybbitConfig({ MEMIND_RYBBIT_ENABLED: 'true', MEMIND_RYBBIT_SITE_ID: '2', MEMIND_RYBBIT_ID_SECRET: 'local-secret', MEMIND_RYBBIT_URL: 'https://rybbit.tkmind.cn', }); assert.equal(config.enabled, true); assert.equal(config.siteId, '2'); assert.equal(config.rybbitUrl, 'https://rybbit.tkmind.cn'); assert.equal(config.hostPath, '/rybbit'); assert.equal(config.scriptPath, '/rybbit/script.js'); }); test('rybbit config can reuse stored analytics secret', () => { const config = resolveMindSpaceRybbitConfig({ MEMIND_RYBBIT_ENABLED: 'true', MEMIND_RYBBIT_SITE_ID: '2', MEMIND_RYBBIT_ID_SECRET: '', MEMIND_ANALYTICS_ID_SECRET: '', }, { idSecret: 'stored-secret', }); assert.equal(config.enabled, true); assert.equal(config.idSecret, 'stored-secret'); }); test('injects one local same-origin rybbit tracker with page dimensions', () => { const html = '