Files
safetynet/tests/agent-bookmark-diagnostics.test.mjs
T

12 lines
1.9 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {createRequire} from 'node:module';
const require=createRequire(import.meta.url),{startAgentControl}=require('../apps/browser/agent-control.cjs'),{requestAgent}=require('../apps/browser/agent-transport-client.cjs');
test('bookmark and management failures produce static diagnostic reasons and retain fail-closed replies',async t=>{
const reports=[];let failure;
const api=await startAgentControl({authorize:async()=>({allowed:true,role:'agent',scopes:['bookmarks:mutate']}),actions:{'bookmarks:mutate':async()=>{throw Error(failure);}},audit:async()=>{},onError:async report=>reports.push(report),maxRequestsPerMinute:60});t.after(()=>api.close());
const reasons=['Management update in progress. Try again.','Managed policy changed during bookmark update','Bookmark update awaits management synchronization','Bookmark update requires a fresh signed policy','Management request refused','Managed application changed','Invalid bookmark details'];
for(const reason of reasons){failure=reason;const response=await requestAgent(api,{action:'bookmarks:mutate',args:{action:'add',expectedRevision:0,policyVersion:1,bookmark:{id:'fixture',title:'Fixture',url:'https://example.com/'}}});assert.equal(response.status,500);const body=await response.json();assert.equal(body.error,'Agent action failed');assert.equal('result' in body,false);assert.equal(reports.at(-1).reason,reason);assert.equal(reports.at(-1).action,'bookmarks:mutate');}
failure='Confidential unexpected error https://internal.example/?password=secret';const response=await requestAgent(api,{action:'bookmarks:mutate',args:{action:'delete',id:'fixture',expectedRevision:0,policyVersion:1}});assert.equal(response.status,500);assert.equal(reports.at(-1).reason,'unclassified-action-failure');assert.equal(JSON.stringify(reports).includes('password=secret'),false);
});