mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-08-14 04:31:21 +00:00
Clean release snapshot
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user