52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { compareInventories } from "../../src/package/compare";
|
|
import type { ArchiveEntryRecord } from "../../src/archive/types";
|
|
import type { PackageDocument } from "../../src/package/types";
|
|
|
|
const entry = (
|
|
path: string,
|
|
size: number,
|
|
crc32: string,
|
|
): ArchiveEntryRecord => ({
|
|
id: path,
|
|
sourceIndex: 0,
|
|
rawPath: path,
|
|
path,
|
|
collisionKey: path.toLowerCase(),
|
|
kind: "file",
|
|
size,
|
|
compressedSize: size,
|
|
crc32,
|
|
extractable: true,
|
|
issues: [],
|
|
});
|
|
|
|
function document(entries: ArchiveEntryRecord[]): PackageDocument {
|
|
return { entries } as PackageDocument;
|
|
}
|
|
|
|
describe("inventory comparison", () => {
|
|
it("separates unchanged, changed and one-sided entries", () => {
|
|
const result = compareInventories(
|
|
document([
|
|
entry("same", 1, "a"),
|
|
entry("changed", 2, "b"),
|
|
entry("left", 1, "c"),
|
|
]),
|
|
document([
|
|
entry("same", 1, "a"),
|
|
entry("changed", 3, "d"),
|
|
entry("right", 1, "e"),
|
|
]),
|
|
);
|
|
expect(
|
|
Object.fromEntries(result.map((item) => [item.path, item.status])),
|
|
).toEqual({
|
|
changed: "changed",
|
|
left: "only-left",
|
|
right: "only-right",
|
|
same: "same",
|
|
});
|
|
});
|
|
});
|