import {test} from "node:test" import assert from "node:assert/strict" import {readRecursiveUrl,patchRecursiveUrl} from "./recursive-route-url-state" import {permissionForPath} from "./auth" test("recursive context roundtrip owns only its URL fields",()=>{ const params=new URLSearchParams("keep=x&server=2&q=ether&route=10.0.0.0%2F24&table=main") assert.deepEqual(readRecursiveUrl(params),{serverId:"2",q:"ether",route:"10.0.0.0/24",table:"main",error:null}) const next=patchRecursiveUrl(params,{serverId:"1",q:null,route:null,table:null}) assert.equal(next.get("keep"),"x");assert.equal(next.get("server"),"1");assert.equal(next.has("q"),false) assert.equal(permissionForPath("/recursive-routes"),"mm:network:read") }) test("recursive invalid or ambiguous URL never guesses a device/group",()=>{ for(const q of ["server=0","server=srv1","server=1&server=2","route=10.0.0.0/24","table=main","q=a&q=b","q="+"x".repeat(257)]) assert.ok(readRecursiveUrl(new URLSearchParams(q)).error,q) })