mirror of
https://github.com/morluto/rea.git
synced 2026-11-03 13:26:10 +00:00
82 lines
2.4 KiB
TypeScript
82 lines
2.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { parseLinuxHopperReleases } from "./HopperReleaseFeed.js";
|
|
|
|
const release = {
|
|
version: "99.2.1",
|
|
filename:
|
|
"https://www.hopperapp.com:443/downloader/public/Hopper-99.2.1-Linux-demo.deb",
|
|
file_length: "123",
|
|
file_hash: "a".repeat(40),
|
|
main_exe_hash: "b".repeat(64),
|
|
signature: "AQ==",
|
|
public: "1",
|
|
beta: "0",
|
|
published_at: "preserved vendor field",
|
|
};
|
|
|
|
describe("Linux Hopper release feed boundary", () => {
|
|
it("preserves future release identity and partial platform facts", () => {
|
|
const parsed = parseLinuxHopperReleases({
|
|
"Ubuntu / Mint": release,
|
|
"OS X": { signature: "Sparkle DSA" },
|
|
});
|
|
expect(parsed).toMatchObject({
|
|
ok: true,
|
|
value: {
|
|
deb: { ok: true, value: release },
|
|
rpm: { ok: false },
|
|
arch: { ok: false },
|
|
},
|
|
});
|
|
if (!parsed.ok || !parsed.value.deb.ok) throw new Error("Missing release");
|
|
expect(parsed.value.deb.value.filename).toBe(release.filename);
|
|
});
|
|
|
|
it.each([
|
|
{ signature: undefined },
|
|
{ signature: "AQ==garbage" },
|
|
{ main_exe_hash: "b".repeat(40) },
|
|
{ file_length: "100000001" },
|
|
{ file_length: "NaN" },
|
|
{ public: "0" },
|
|
{ beta: "1" },
|
|
{
|
|
filename:
|
|
"https://other.example/downloader/public/Hopper-99.2.1-Linux-demo.deb",
|
|
},
|
|
{ filename: release.filename + "?token=caller" },
|
|
{ filename: release.filename + "?" },
|
|
{ filename: release.filename + "#" },
|
|
{ filename: release.filename + "?#" },
|
|
{ filename: release.filename + "#selection" },
|
|
{
|
|
filename: release.filename.replace("https://", "https://user:password@"),
|
|
},
|
|
{ filename: release.filename.replace(".deb", ".rpm") },
|
|
{ filename: release.filename.replace("demo.deb", "full.deb") },
|
|
])(
|
|
"rejects metadata outside the selected public package contract: %j",
|
|
(changes) => {
|
|
expect(
|
|
parseLinuxHopperReleases({
|
|
"Ubuntu / Mint": { ...release, ...changes },
|
|
}),
|
|
).toMatchObject({
|
|
ok: true,
|
|
value: { deb: { ok: false, error: { reason: "release_metadata" } } },
|
|
});
|
|
},
|
|
);
|
|
|
|
it.each([null, [], "html error page"])(
|
|
"keeps malformed feed roots unknown",
|
|
(raw) => {
|
|
expect(parseLinuxHopperReleases(raw)).toMatchObject({
|
|
ok: false,
|
|
error: { reason: "release_metadata" },
|
|
});
|
|
},
|
|
);
|
|
});
|