const test = require('node:test'); const assert = require('node:assert/strict'); const { detectDistro } = require('../lib/distro.js'); test('detectDistro returns null for null, undefined, or empty input', () => { assert.equal(detectDistro(null), null); assert.equal(detectDistro(undefined), null); assert.equal(detectDistro(''), null); assert.equal(detectDistro('{}'), null); }); test('detectDistro extracts distro from parsed SPDX object with package PURLs', () => { const spdx = { packages: [ { name: 'acl', externalRefs: [ { referenceType: 'purl', referenceLocator: 'pkg:deb/debian/acl@2.3.1-3?os_distro=bookworm&os_name=debian&os_version=12', }, ], }, ], }; assert.equal(detectDistro(spdx), 'debian/12'); }); test('detectDistro extracts distro from JSON string containing escaped unicode \\u0026', () => { const jsonStr = JSON.stringify({ packages: [ { name: 'adduser', externalRefs: [ { referenceType: 'purl', referenceLocator: 'pkg:deb/debian/adduser@3.134?os_distro=bullseye&os_name=debian&os_version=11', }, ], }, ], }).replace(/&/g, '\\u0026'); assert.ok(jsonStr.includes('\\u0026')); assert.equal(detectDistro(jsonStr), 'debian/11'); }); test('detectDistro handles non-debian distributions (e.g. ubuntu, alpine)', () => { const spdx = { packages: [ { externalRefs: [ { referenceType: 'purl', referenceLocator: 'pkg:apk/alpine/alpine-baselayout@3.4.3-r2?os_name=alpine&os_version=3.20', }, ], }, ], }; assert.equal(detectDistro(spdx), 'alpine/3.20'); }); test('detectDistro returns null when PURLs lack os_name or os_version', () => { const spdx = { packages: [ { externalRefs: [ { referenceType: 'purl', referenceLocator: 'pkg:generic/foo@1.0.0', }, ], }, ], }; assert.equal(detectDistro(spdx), null); });