Files
investor-flow/app/server/src/services/__tests__/captureEvidence.test.ts
T

56 lines
2.1 KiB
TypeScript
Raw Normal View History

import { test } from 'node:test';
import { strict as assert } from 'node:assert';
import { DatabaseSync } from 'node:sqlite';
import {
annotateCaptureEvidence,
evidencePostId,
isTweetGoneMessage,
} from '../captureEvidence.ts';
test('evidencePostId extracts status id from x.com URL', () => {
assert.equal(
evidencePostId('https://x.com/mikealfred/status/2082901502113575384'),
'2082901502113575384',
);
assert.equal(evidencePostId('sec|0002096493-26-000003'), null);
});
test('isTweetGoneMessage matches bird / X not-found errors', () => {
assert.equal(isTweetGoneMessage('Failed to read tweet: Tweet not found in response'), true);
assert.equal(isTweetGoneMessage('HTTP 429 rate limit'), false);
});
test('annotateCaptureEvidence uses cache and only looks up misses', async () => {
const db = new DatabaseSync(':memory:');
db.exec(`CREATE TABLE kv_cache (key TEXT PRIMARY KEY, value TEXT NOT NULL, observed_at TEXT NOT NULL)`);
const now = Date.parse('2026-08-14T20:00:00.000Z');
db.prepare('INSERT INTO kv_cache (key,value,observed_at) VALUES (?,?,?)').run(
'x:post-status:111', 'ok', new Date(now).toISOString(),
);
const looked: string[] = [];
const rows = [
{ evidence_url: 'https://x.com/mikealfred/status/111' },
{ evidence_url: 'https://x.com/mikealfred/status/2082901502113575384' },
];
await annotateCaptureEvidence(db, rows, async (id) => {
looked.push(id);
return 'deleted';
}, now);
assert.deepEqual(looked, ['2082901502113575384']);
assert.equal(rows[0].evidence_status, 'ok');
assert.equal(rows[1].evidence_status, 'deleted');
});
test('annotateCaptureEvidence live:false never calls lookup', async () => {
const db = new DatabaseSync(':memory:');
db.exec(`CREATE TABLE kv_cache (key TEXT PRIMARY KEY, value TEXT NOT NULL, observed_at TEXT NOT NULL)`);
const looked: string[] = [];
const rows = [{ evidence_url: 'https://x.com/mikealfred/status/2082901502113575384' }];
await annotateCaptureEvidence(db, rows, async (id) => {
looked.push(id);
return 'ok';
}, Date.now(), { live: false });
assert.deepEqual(looked, []);
assert.equal(rows[0].evidence_status, 'unknown');
});