40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
// tests/hash.test.js
|
|
|
|
const { hashEvent, hashChain, sha256Async } = require('../lib/hash.js');
|
|
|
|
describe('Hash', () => {
|
|
test('hashEvent returns consistent hash', () => {
|
|
const event = { id: 'e1', type: 'tool_use' };
|
|
const h1 = hashEvent(event);
|
|
const h2 = hashEvent(event);
|
|
expect(h1).toBe(h2);
|
|
expect(h1.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
test('hashEvent returns different hash for different events', () => {
|
|
const h1 = hashEvent({ id: 'e1', type: 'tool_use' });
|
|
const h2 = hashEvent({ id: 'e2', type: 'api_call' });
|
|
expect(h1).not.toBe(h2);
|
|
});
|
|
|
|
test('hashChain returns empty for empty array', () => {
|
|
expect(hashChain([])).toBe('');
|
|
});
|
|
|
|
test('hashChain returns hash for events', () => {
|
|
const chain = hashChain([{ id: 'e1' }, { id: 'e2' }]);
|
|
expect(chain.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
test('hashChain is order-sensitive', () => {
|
|
const chain1 = hashChain([{ id: 'e1' }, { id: 'e2' }]);
|
|
const chain2 = hashChain([{ id: 'e2' }, { id: 'e1' }]);
|
|
expect(chain1).not.toBe(chain2);
|
|
});
|
|
|
|
test('sha256Async returns hex string', async () => {
|
|
const hash = await sha256Async('hello');
|
|
expect(hash).toMatch(/^[a-f0-9]{64}$/);
|
|
});
|
|
});
|