'use strict'; const test = require('node:test'); const assert = require('node:assert/strict'); const DashboardApi = require('../../src/specificClass.js'); test('rotatingMachine template panels declare meta.emittedFields', () => { const api = new DashboardApi({}); const dash = api.loadTemplate('machine'); assert.ok(dash, 'template loaded'); const withFields = dash.panels.filter((p) => p?.meta?.emittedFields); // 13 non-row panels in machine.json get annotated; row panels are skipped. assert.ok(withFields.length >= 10, `expected ≥10 annotated panels, got ${withFields.length}`); }); test('collectEmittedFields aggregates fields across panels', () => { const api = new DashboardApi({}); const dash = api.loadTemplate('machine'); const fields = api.collectEmittedFields(dash); assert.ok(fields.has('ctrl'), 'ctrl field declared by Ctrl % panel'); assert.ok(fields.has('flow'), 'flow field declared by Flow panel'); assert.ok(fields.has('efficiency'), 'efficiency field declared by Efficiency panel'); assert.ok(fields.has('relDistFromPeak'), 'relDistFromPeak declared by Distance from Peak panel'); }); test('collectEmittedFields returns empty Set for template without meta', () => { const api = new DashboardApi({}); // measurement.json has no emittedFields metadata yet — its panels predate the annotation. const dash = api.loadTemplate('measurement'); const fields = api.collectEmittedFields(dash); assert.equal(fields.size, 0); }); test('collectEmittedFields handles null/empty dashboard input gracefully', () => { const api = new DashboardApi({}); assert.equal(api.collectEmittedFields(null).size, 0); assert.equal(api.collectEmittedFields({}).size, 0); assert.equal(api.collectEmittedFields({ panels: [] }).size, 0); });