import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import vm from 'node:vm'; import test from 'node:test'; const source = readFileSync(new URL('../../templates/files/js/Snake.js', import.meta.url), 'utf8'); const SnakeUtils = vm.runInNewContext(`${source}\nSnakeUtils`); test('empty or missing head/tail uses the default SVG', () => { for (const kind of ['heads', 'tails']) { for (const value of [undefined, null, '', ' ']) { assert.equal(SnakeUtils.buildCustomizationIconUrl(kind, value), `/dashboard/customizations/${kind}/default.svg`); } } }); test('explicit customizations and invalid-name validation are preserved', () => { assert.equal(SnakeUtils.buildCustomizationIconUrl('tails', 'ghost'), '/dashboard/customizations/tails/ghost.svg'); assert.equal(SnakeUtils.buildCustomizationIconUrl('heads', 'crystal-power'), '/dashboard/customizations/heads/crystal-power.svg'); assert.equal(SnakeUtils.buildCustomizationIconUrl('tails', '../ghost'), null); });