73 lines
2.3 KiB
TypeScript
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);
|
|
});
|
|
});
|