import { describe, expect, it } from "vitest";
import { readLiarRecords } from "#lib/migration/liar.ts";
import { buildRepoCar } from "#lib/migration/repoCar.ts";
const streamOf = (bytes: Uint8Array) =>
new Blob([bytes as BlobPart]).stream() as ReadableStream<Uint8Array>;
const did = "did:plc:alice";
const star = { $type: "org.tangled.feed.star", createdAt: "2026-01-01T00:00:00.000Z" };
describe("readLiarRecords", () => {
it("keeps org.tangled records and drops everything else", async () => {
const car = await buildRepoCar(did, [
{ collection: "org.tangled.feed.star", rkey: "3aaaaaaaaaaaa", value: star },
{
collection: "org.tangled.actor.profile",
rkey: "self",
value: { $type: "org.tangled.actor.profile", description: "hi" }
},
{
collection: "app.bsky.feed.post",
rkey: "3bbbbbbbbbbbb",
value: { $type: "app.bsky.feed.post", text: "x", createdAt: star.createdAt }
}
]);
const records = await readLiarRecords(streamOf(car));
expect(records.map((r) => `${r.collection}/${r.rkey}`).sort()).toEqual([
"org.tangled.actor.profile/self",
"org.tangled.feed.star/3aaaaaaaaaaaa"
]);
expect(records.find((r) => r.rkey === "self")?.value).toEqual({
$type: "org.tangled.actor.profile",
description: "hi"
});
});
it("reads every record when two of them are identical and share a block", async () => {
const car = await buildRepoCar(
did,
[
{ collection: "org.tangled.feed.star", rkey: "3aaaaaaaaaaaa", value: star },
{ collection: "org.tangled.feed.star", rkey: "3bbbbbbbbbbbb", value: star }
],
{ recordBlocksFirst: true }
);
const records = await readLiarRecords(streamOf(car));
expect(records.map((r) => r.rkey).sort()).toEqual(["3aaaaaaaaaaaa", "3bbbbbbbbbbbb"]);
});
});