mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-07-28 15:42:35 +00:00
65 lines
2.7 KiB
JavaScript
65 lines
2.7 KiB
JavaScript
const { test } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const { loadCapabilities } = require('./capabilities_test_harness');
|
|
|
|
function registerStemsOwner(api, calls) {
|
|
api.registerParticipant('stems', {
|
|
stems: {
|
|
roles: ['owner', 'provider'],
|
|
commands: ['mute', 'restore'],
|
|
runtime: true,
|
|
handlers: {
|
|
mute: (ctx) => {
|
|
calls.push(['mute', ctx.payload]);
|
|
return { outcome: 'handled', payload: { muted: true, restoreSnapshotRef: 'snap-1' } };
|
|
},
|
|
restore: (ctx) => {
|
|
calls.push(['restore', ctx.payload]);
|
|
return { outcome: 'handled', payload: { restored: true } };
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
test('claim dispatch release records lifecycle and removes active claim', async () => {
|
|
const window = loadCapabilities();
|
|
const api = window.slopsmith.capabilities;
|
|
const calls = [];
|
|
registerStemsOwner(api, calls);
|
|
|
|
const cleanup = api.claim({ capability: 'stems', claimId: 'nam.amp-active', requester: 'nam_tone', target: { kind: 'guitar' } });
|
|
let snapshot = api.snapshotDiagnostics();
|
|
assert.equal(snapshot.activeClaims.find(c => c.claimId === 'nam.amp-active').owner, 'stems');
|
|
|
|
const result = await api.dispatch({
|
|
capability: 'stems', command: 'mute', source: 'nam_tone',
|
|
claim: { claimId: 'nam.amp-active' }, args: { target: { kind: 'guitar' } },
|
|
});
|
|
assert.equal(result.status, 'applied');
|
|
assert.equal(calls.length, 1);
|
|
|
|
cleanup();
|
|
snapshot = api.snapshotDiagnostics();
|
|
assert.equal(snapshot.activeClaims.some(c => c.claimId === 'nam.amp-active'), false);
|
|
assert.equal(snapshot.claimLifecycle.some(c => c.claimId === 'nam.amp-active' && c.state === 'released'), true);
|
|
assert.equal(snapshot.claimLifecycle.find(c => c.claimId === 'nam.amp-active').restoreSnapshotRef, null);
|
|
});
|
|
|
|
test('manual override is terminal for matching active claim target', async () => {
|
|
const window = loadCapabilities();
|
|
const api = window.slopsmith.capabilities;
|
|
const calls = [];
|
|
registerStemsOwner(api, calls);
|
|
api.claim({ capability: 'stems', claimId: 'nam.amp-active', requester: 'nam_tone', target: { kind: 'guitar' } });
|
|
api.recordUserOverride({ capability: 'stems', source: 'user', target: { kind: 'guitar' }, reason: 'Player unmuted guitar' });
|
|
|
|
const result = await api.dispatch({
|
|
capability: 'stems', command: 'mute', source: 'nam_tone',
|
|
claim: { claimId: 'nam.amp-active' }, args: { target: { kind: 'guitar' } },
|
|
});
|
|
|
|
assert.equal(result.status, 'overridden');
|
|
assert.equal(calls.length, 0);
|
|
assert.match(result.reason, /user override/i);
|
|
}); |