// Focused UI checks for zone temperature origin and sensor-safety indicators. // Run from the project root: node scripts/test_temperature_explanation_ui.js 'use strict'; const assert = require('node:assert/strict'); const fs = require('node:fs'); const vm = require('node:vm'); const dict = JSON.parse(fs.readFileSync('lang/pl.json', 'utf8')).translations; const ctx = vm.createContext({ app: { zones: [], devices: [], groups: [] }, tr: (key, vars = {}) => String(dict[key] || key).replace(/\{(\w+)\}/g, (match, name) => vars[name] ?? match), fmtTemp: value => value == null ? '--' : `${Number(value).toFixed(1)}°C`, uiIcon: name => ``, esc: value => String(value ?? '').replace(/[&<>'"]/g, x => ({ '&': '&', '<': '<', '>': '>', "'": ''', '"': '"' })[x]), }); vm.runInContext(fs.readFileSync('web/js-dynamic/entities.js', 'utf8'), ctx); const combined = { sensor_source: 'combined', control_temperature_source: 'combined', device_temperature: 19, external_temperature: 21, external_sensor_weight: 0.8, current_temperature: 20.6, room_sensor_status: 'ok', enabled: true, }; const formula = ctx.zoneTemperatureExplanation(combined); assert.match(formula, /GREE 19\.0°C × 20%/); assert.match(formula, /pokój 21\.0°C × 80% = 20\.6°C/); const help = ctx.zoneTemperatureHelp(combined); assert.match(help, /