Files
MikrotikManager/shared/api/alerts-targets.test.ts

9 lines
2.5 KiB
TypeScript

import assert from "node:assert/strict"
import {test} from "node:test"
import {getAlertsBgpTargets,getAlertsServerTargets,getAlertsGreTargets} from "./alerts-targets"
test("Alerts target readers preserve known empty collections and unknown optional GRE status",async()=>{const original=globalThis.fetch;try{globalThis.fetch=async()=>Response.json([]);assert.deepEqual(await getAlertsBgpTargets("https://backend.test"),[]);assert.deepEqual(await getAlertsServerTargets("https://backend.test"),[]);globalThis.fetch=async()=>Response.json({tunnels:[]});assert.deepEqual(await getAlertsGreTargets("https://backend.test"),{tunnels:[]});globalThis.fetch=async()=>Response.json({tunnels:[{name:"gre1",serverId:"1"}]});assert.equal((await getAlertsGreTargets("https://backend.test")).tunnels[0].status,undefined)}finally{globalThis.fetch=original}})
test("Alerts malformed secondary catalogs reject instead of fabricating empty/down",async()=>{const original=globalThis.fetch;try{for(const [call,raw] of [[getAlertsBgpTargets,{}],[getAlertsBgpTargets,[{serverName:"",name:"peer"}]],[getAlertsServerTargets,[{id:"1",name:"server"}]],[getAlertsServerTargets,[{id:1.5,name:"server"}]],[getAlertsGreTargets,{}],[getAlertsGreTargets,{tunnels:null}],[getAlertsGreTargets,{tunnels:[{name:"gre",serverId:""}]}]] as const){globalThis.fetch=async()=>Response.json(raw);await assert.rejects(call("https://backend.test"),/не подтверждён/)}}finally{globalThis.fetch=original}})
test("Alerts target readers reject pre-abort before GET and use independent bounded signals",async()=>{const original=globalThis.fetch;let calls=0;try{globalThis.fetch=async()=>{calls++;return Response.json([])};const controller=new AbortController();controller.abort();for(const call of [getAlertsBgpTargets,getAlertsServerTargets,getAlertsGreTargets])await assert.rejects(call("https://backend.test",{signal:controller.signal}));assert.equal(calls,0);globalThis.fetch=async(_url,init)=>{assert.ok(init?.signal);return Response.json([])};await getAlertsBgpTargets("https://backend.test")}finally{globalThis.fetch=original}})
test("Alerts GRE reader preserves partial device failures instead of treating missing tunnels as complete",async()=>{const original=globalThis.fetch;try{const failures=[{serverId:"1",serverName:"Router",error:"unavailable"}];globalThis.fetch=async()=>Response.json({tunnels:[],failures});assert.deepEqual((await getAlertsGreTargets("https://backend.test")).failures,failures)}finally{globalThis.fetch=original}})