Allow voice transcription results to complete for messages with negative IDs while preserving existing message identities and account isolation. Report unmatched transcription results accurately and document the signed message ID contract. Fixes #554
54 lines
2.1 KiB
TypeScript
54 lines
2.1 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { hashMessageIdInt32, GROUP_MESSAGE_EVENT, PRIVATE_MESSAGE_EVENT } from '../src/message-id';
|
|
|
|
describe('hashMessageIdInt32', () => {
|
|
it('returns consistent hash for same inputs', () => {
|
|
const id1 = hashMessageIdInt32(100, 12345, GROUP_MESSAGE_EVENT);
|
|
const id2 = hashMessageIdInt32(100, 12345, GROUP_MESSAGE_EVENT);
|
|
expect(id1).toBe(id2);
|
|
});
|
|
|
|
it('preserves negative hashes as valid message IDs', () => {
|
|
expect(hashMessageIdInt32(1, 12345, PRIVATE_MESSAGE_EVENT)).toBe(-585543322);
|
|
});
|
|
|
|
it('returns non-zero', () => {
|
|
// The function ensures id !== 0 by setting it to 1
|
|
const id = hashMessageIdInt32(0, 0, '');
|
|
expect(id).not.toBe(0);
|
|
});
|
|
|
|
it('returns different values for different sequences', () => {
|
|
const id1 = hashMessageIdInt32(1, 12345, GROUP_MESSAGE_EVENT);
|
|
const id2 = hashMessageIdInt32(2, 12345, GROUP_MESSAGE_EVENT);
|
|
expect(id1).not.toBe(id2);
|
|
});
|
|
|
|
it('returns different values for different sessions', () => {
|
|
const id1 = hashMessageIdInt32(100, 11111, GROUP_MESSAGE_EVENT);
|
|
const id2 = hashMessageIdInt32(100, 22222, GROUP_MESSAGE_EVENT);
|
|
expect(id1).not.toBe(id2);
|
|
});
|
|
|
|
it('returns different values for different event names', () => {
|
|
const id1 = hashMessageIdInt32(100, 12345, GROUP_MESSAGE_EVENT);
|
|
const id2 = hashMessageIdInt32(100, 12345, PRIVATE_MESSAGE_EVENT);
|
|
expect(id1).not.toBe(id2);
|
|
});
|
|
|
|
it('returns 32-bit integer', () => {
|
|
const id = hashMessageIdInt32(999999, 123456789, GROUP_MESSAGE_EVENT);
|
|
expect(id).toBeGreaterThanOrEqual(-2147483648);
|
|
expect(id).toBeLessThanOrEqual(2147483647);
|
|
});
|
|
|
|
it('handles non-finite inputs gracefully', () => {
|
|
const id1 = hashMessageIdInt32(NaN, 0, 'test');
|
|
const id2 = hashMessageIdInt32(Infinity, 0, 'test');
|
|
expect(typeof id1).toBe('number');
|
|
expect(typeof id2).toBe('number');
|
|
// Both should map to sequence=0
|
|
expect(id1).toBe(id2);
|
|
});
|
|
});
|