import assert from "node:assert/strict" import {test} from "node:test" import {parseDashboardProbes} from "./dashboard-probes" import {buildLatencySeriesByProbeSource} from "./dashboard-latency" const start="2026-10-03T00:00:00Z",end="2026-10-03T01:00:00Z" const base={id:"p1",srcServerId:"1",name:"Проверка",target:"192.0.2.1",filter:"main",rtt:0,loss:0,status:"up",series:[0],enabled:true,showOnDashboard:true} const sampled={sampledAt:"2026-10-03T00:30:00Z",rtt:0,loss:0,status:"up"} const payload=(samples:unknown[])=>({rangeStartAt:start,rangeEndAt:end,probes:[{...base,observations:{samples}}]}) test("ping legacy and empty samples do not prove up, down, loss or historical zero",()=>{ for(const raw of [{probes:[base]},payload([])]){const p=parseDashboardProbes(raw).probes[0];assert.equal(p.status,"unknown");assert.equal(p.rtt,null);assert.equal(p.loss,null);assert.ok(p.series.every(v=>v===null))} assert.deepEqual(parseDashboardProbes({probes:[]}),{probes:[],sampledAt:null}) }) test("ping observed zero and failure retain independent measurement values and sparse time axis",()=>{ const p=parseDashboardProbes(payload([sampled])).probes[0];assert.equal(p.status,"up");assert.equal(p.rtt,0);assert.equal(p.loss,0);assert.equal(p.series[30],0);assert.equal(p.series.filter(v=>v!==null).length,1) const failed=parseDashboardProbes(payload([sampled,{...sampled,sampledAt:"2026-10-03T00:31:00Z",rtt:null,loss:100,status:"down"}])).probes[0];assert.equal(failed.status,"down");assert.equal(failed.loss,100);assert.equal(failed.series[31],null) assert.deepEqual(buildLatencySeriesByProbeSource([p],[]).series["src-1"],p.series) assert.deepEqual(buildLatencySeriesByProbeSource([p,{...p,srcServerId:"1",series:Array(60).fill(null)}],[]).series,{}) }) test("ping invalid time axis, duplicate or out of range samples cannot replace cache",()=>{ for(const raw of [payload([sampled,sampled]),payload([{...sampled,sampledAt:"invalid"}]),payload([{...sampled,sampledAt:"2026-10-02T00:00:00Z"}]),{...payload([sampled]),rangeEndAt:start},{...payload([sampled]),rangeStartAt:undefined},payload([{...sampled,loss:101}])])assert.throws(()=>parseDashboardProbes(raw)) }) test("failed execution is an unknown observation, while measured 100 percent loss remains down",()=>{ const failed={...sampled,sampledAt:"2026-10-03T00:31:00Z",rtt:null,loss:null,status:"unknown",error:"API denied"} const p=parseDashboardProbes(payload([sampled,failed])).probes[0] assert.equal(p.status,"unknown");assert.equal(p.rtt,null);assert.equal(p.loss,null);assert.equal(p.observationError,"API denied");assert.equal(p.series[31],null) assert.throws(()=>parseDashboardProbes(payload([{...failed,loss:100}]))) })