agent-ecosystem/test/main/services/team/BootstrapProofValidation.test.ts
2026-05-06 17:34:01 +03:00

73 lines
2.3 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import {
parseBootstrapRuntimeProofDetail,
validateBootstrapRuntimeProofEnvelope,
validateBootstrapRuntimeProofEnvelopeDetailed,
} from '../../../../src/main/services/team/bootstrap/BootstrapProofValidation';
describe('BootstrapProofValidation', () => {
const expected = {
teamName: 'native-proof-team',
boundaryMs: Date.parse('2026-05-01T10:00:00.000Z'),
proofToken: 'proof-token',
proofMode: 'native_app_managed_context',
runId: 'run-native-proof',
contextHash: 'a'.repeat(64),
briefingHash: 'b'.repeat(64),
};
it('accepts native app-managed proof only when team, token, run and hashes match', () => {
expect(
validateBootstrapRuntimeProofEnvelope({
event: {
type: 'bootstrap_confirmed',
timestamp: '2026-05-01T10:00:01.000Z',
teamName: expected.teamName,
source: 'native_app_managed_bootstrap_private_turn',
bootstrapProofToken: expected.proofToken,
runId: expected.runId,
contextHash: expected.contextHash,
briefingHash: expected.briefingHash,
},
expected,
})
).toBe(true);
});
it('rejects native app-managed proof without explicit team binding', () => {
const result = validateBootstrapRuntimeProofEnvelopeDetailed({
event: {
type: 'bootstrap_confirmed',
timestamp: '2026-05-01T10:00:01.000Z',
source: 'native_app_managed_bootstrap_private_turn',
bootstrapProofToken: expected.proofToken,
runId: expected.runId,
contextHash: expected.contextHash,
briefingHash: expected.briefingHash,
},
expected,
});
expect(result).toMatchObject({ ok: false, reason: 'missing_team' });
});
it('keeps legacy member_briefing proof compatible with missing teamName', () => {
expect(
validateBootstrapRuntimeProofEnvelope({
event: {
type: 'bootstrap_confirmed',
timestamp: '2026-05-01T10:00:01.000Z',
source: 'member_briefing_tool_success',
bootstrapProofToken: expected.proofToken,
},
detail: parseBootstrapRuntimeProofDetail(''),
expected: {
teamName: expected.teamName,
boundaryMs: expected.boundaryMs,
proofToken: expected.proofToken,
},
})
).toBe(true);
});
});