mirror of
https://github.com/PR0M3TH3AN/TORCH.git
synced 2026-11-01 02:11:54 +00:00
88 lines
5.0 KiB
JavaScript
88 lines
5.0 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { readFileSync } from 'node:fs';
|
|
import { runInNewContext } from 'node:vm';
|
|
import test from 'node:test';
|
|
|
|
const source = readFileSync(new URL('../../site/demo.js', import.meta.url), 'utf8');
|
|
function workspace() {
|
|
const context = { URLSearchParams };
|
|
runInNewContext(source, context);
|
|
assert.equal(context.TorchConsoleDemo, undefined, 'live Console does not acquire demo state');
|
|
return context.TorchDemo.createWorkspace({ clock: () => new Date('2026-09-29T12:00:00Z') });
|
|
}
|
|
const confirm = (demo, path, payload, preview) => demo.request(path, {
|
|
...payload, token: preview.token, planHash: preview.planHash,
|
|
});
|
|
|
|
test('SCN-dashboard-demo: pilot conclusions block unsupported adoption and reverse only after sample confirmation', async () => {
|
|
const demo = workspace();
|
|
const path = '/api/organization-proposals/hierarchy-conclusion/sample-coordination-pilot';
|
|
const blocked = await demo.request(path + '/preview', { action: 'adopt', reason: 'Try adoption.' });
|
|
assert.equal(blocked.plan.canProceed, false);
|
|
assert.equal(blocked.token, null);
|
|
const payload = { action: 'reverse', reason: 'Restore direct reporting.' };
|
|
const preview = await demo.request(path + '/preview', payload);
|
|
assert.equal(demo.snapshot().hierarchyProposals[0].state, 'piloting');
|
|
const before = demo.snapshot();
|
|
await assert.rejects(confirm(demo, path, { ...payload, action: 'adopt' }, preview), /Review/);
|
|
const result = await confirm(demo, path, payload, preview);
|
|
assert.equal(result.proposal.state, 'reversed');
|
|
assert.equal(demo.snapshot().organization.graph.revision, before.organization.graph.revision + 1);
|
|
assert.equal(demo.snapshot().agents.length, before.agents.length);
|
|
assert.equal(JSON.stringify(demo.snapshot().backlog), JSON.stringify(before.backlog));
|
|
assert.equal((await confirm(demo, path, payload, preview)).proposal.state, 'reversed');
|
|
});
|
|
|
|
test('SCN-dashboard-demo: owner actions use isolated sample state with preview and confirmation', async () => {
|
|
const demo = workspace();
|
|
const other = workspace();
|
|
const path = '/api/backlog/tasks/API-08/priority';
|
|
const payload = { priority: 'urgent', reason: 'Needed for the beta', expectedRevision: 1 };
|
|
const preview = await demo.request(path + '/preview', payload);
|
|
assert.equal(demo.snapshot().backlog.find((task) => task.id === 'API-08').priority, 'high');
|
|
await assert.rejects(confirm(demo, path, { ...payload, priority: 'low' }, preview), /Review/);
|
|
const result = await confirm(demo, path, payload, preview);
|
|
assert.equal(result.task.priority, 'urgent');
|
|
assert.equal(result.task.owner, 'services');
|
|
assert.equal(result.task.state, 'in_progress');
|
|
await confirm(demo, path, payload, preview);
|
|
assert.equal(demo.snapshot().backlog.find((task) => task.id === 'API-08').revision, 2);
|
|
assert.equal(other.snapshot().backlog.find((task) => task.id === 'API-08').priority, 'high');
|
|
demo.reset();
|
|
assert.equal(demo.snapshot().backlog.find((task) => task.id === 'API-08').priority, 'high');
|
|
});
|
|
|
|
test('SCN-dashboard-demo: feedback, requests, approvals and profiles update the same sample project', async () => {
|
|
const demo = workspace();
|
|
const feedbackPath = '/api/artifacts/home-wireframe/feedback';
|
|
const payload = { body: 'Give active work more room.' };
|
|
const review = await demo.request(feedbackPath + '/preview', payload);
|
|
assert.equal(review.preview.recipient, 'interface');
|
|
assert.equal(demo.snapshot().artifacts.items[0].feedback.length, 1);
|
|
await confirm(demo, feedbackPath, payload, review);
|
|
assert.equal(demo.snapshot().artifacts.items[0].feedback.length, 2);
|
|
assert.equal(demo.snapshot().messages.recent[0].body, payload.body);
|
|
|
|
const requestPath = '/api/owner-requests';
|
|
const request = { recipient: 'qa', body: 'Review the home layout.', taskId: 'APP-12' };
|
|
const requestPreview = await demo.request(requestPath + '/preview', request);
|
|
await confirm(demo, requestPath, { taskId: request.taskId, recipient: request.recipient, body: request.body }, requestPreview);
|
|
assert.equal(demo.snapshot().messages.recent[0].recipient, 'qa');
|
|
|
|
const approvalPath = '/api/approvals/review-home/decision';
|
|
const decision = { decision: 'approved', note: 'Proceed with the layout.' };
|
|
await confirm(demo, approvalPath, decision, await demo.request(approvalPath + '/preview', decision));
|
|
assert.equal(demo.snapshot().approvalRequests.pendingCount, 0);
|
|
assert.equal(demo.snapshot().approvalRequests.items[0].status, 'approved');
|
|
|
|
const profilePath = '/api/runtime-profiles';
|
|
const profile = { areaId: 'interface', runtime: 'claude', model: '', reasoning: '' };
|
|
await confirm(demo, profilePath, profile, await demo.request(profilePath + '/preview', profile));
|
|
const agent = demo.snapshot().agents.find((item) => item.areaId === 'interface');
|
|
assert.equal(agent.runtime, 'claude');
|
|
assert.equal(agent.model, 'sonnet');
|
|
assert.equal(agent.reasoning, null);
|
|
assert.equal(agent.state, 'waiting');
|
|
await assert.rejects(demo.request('/api/schedule-launcher/preview', { action: 'install' }), /unavailable/);
|
|
});
|