mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-30 09:22:24 +00:00
47 lines
2.8 KiB
JavaScript
47 lines
2.8 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { tombstoneFixture, videoEvent, ids } from './test-helpers/storage-tombstone-fixture.mjs';
|
|
|
|
// Scenarios and deterministic IO boundaries: docs/testing/storage-cors-3-integrity.md.
|
|
for (const order of ['newer-first', 'delete-first', 'same-batch']) {
|
|
test(`buffer preserves strictly newer active content: ${order}`, async t => {
|
|
const f = tombstoneFixture(t); await f.load();
|
|
const newer = videoEvent('newer', 300);
|
|
const deletion = videoEvent('deletion', 200, { deleted: true });
|
|
if (order === 'same-batch') await f.ingest(newer, deletion);
|
|
else if (order === 'newer-first') { await f.ingest(newer); await f.ingest(deletion); }
|
|
else { await f.ingest(deletion); await f.ingest(newer); }
|
|
await f.ingest(videoEvent('unrelated', 100, { root: 'other', pubkey: 'b'.repeat(64) }));
|
|
assert.deepEqual(ids(f.client.getActiveVideos()), ['newer', 'unrelated']);
|
|
assert.equal(f.client.allEvents.get('newer').deleted, false);
|
|
assert.equal(f.client.tombstones.get('ROOT:target'), 200);
|
|
// Replayed markers must not erase a newer version either.
|
|
await f.ingest(deletion);
|
|
assert.deepEqual(ids(f.client.getActiveVideos()), ['newer', 'unrelated']);
|
|
});
|
|
}
|
|
|
|
test('newer/equal tombstone removes older versions, late zombies stay absent, newer content may return', async t => {
|
|
const f = tombstoneFixture(t); await f.load();
|
|
await f.ingest(videoEvent('first', 100), videoEvent('edit', 150), videoEvent('other', 100, { root: 'other' }));
|
|
await f.ingest(videoEvent('delete', 150, { deleted: true }));
|
|
assert.deepEqual(ids(f.client.getActiveVideos()), ['other']);
|
|
assert.equal(f.client.allEvents.get('first').deleted, true);
|
|
assert.equal(f.client.allEvents.get('edit').deleted, true);
|
|
await f.ingest(videoEvent('late', 120));
|
|
assert.equal(f.client.allEvents.get('late').deleted, true);
|
|
assert.deepEqual(ids(f.client.getActiveVideos()), ['other']);
|
|
await f.ingest(videoEvent('fresh', 151));
|
|
assert.deepEqual(ids(f.client.getActiveVideos()), ['fresh', 'other']);
|
|
});
|
|
|
|
test('legacy d-tag tombstones retain authoritative author scoping', async t => {
|
|
const f = tombstoneFixture(t); await f.load();
|
|
await f.ingest(videoEvent('target-legacy', 100, { root: `LEGACY:${'a'.repeat(64)}:same`, dTag: 'same' }), videoEvent('other-author', 100, { root: `LEGACY:${'b'.repeat(64)}:same`, dTag: 'same', pubkey: 'b'.repeat(64) }));
|
|
await f.ingest(videoEvent('delete-legacy', 200, { root: `LEGACY:${'a'.repeat(64)}:same`, dTag: 'same', deleted: true }));
|
|
assert.deepEqual(ids(f.client.getActiveVideos()), ['other-author']);
|
|
await f.ingest(videoEvent('target-late', 90, { root: `LEGACY:${'a'.repeat(64)}:same`, dTag: 'same' }));
|
|
assert.deepEqual(ids(f.client.getActiveVideos()), ['other-author']);
|
|
assert.equal(f.client.allEvents.get('target-late').deleted, true);
|
|
});
|