Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566import { describe, expect, it, vi } from "vitest";import type { Did } from "@atcute/lexicons/syntax";import { createBobbinClient } from "$lib/api/client";import { NO_ACCESS, resolveRepoAccess } from "$lib/api/access";
const owner = "did:plc:owner" as Did;const repoDid = "did:plc:repo" as Did;
const bobbin = (items: { subject: string }[]) => { const fetch = vi.fn<typeof globalThis.fetch>( async () => new Response(JSON.stringify({ items }), { status: 200, headers: { "content-type": "application/json" } }) ); return { ctx: createBobbinClient({ serviceUrl: "https://bobbin.test", fetch }), fetch };};
describe("resolveRepoAccess", () => { it("gives the owner everything without asking the knot", async () => { const { ctx, fetch } = bobbin([]);
await expect(resolveRepoAccess(ctx, { ownerDid: owner, repoDid }, owner)).resolves.toEqual({ role: "owner", canPush: true, canAdminister: true }); expect(fetch).not.toHaveBeenCalled(); });
it("gives an accepted collaborator push but not administration", async () => { const { ctx } = bobbin([{ subject: "did:plc:friend" }]);
await expect( resolveRepoAccess(ctx, { ownerDid: owner, repoDid }, "did:plc:friend") ).resolves.toEqual({ role: "collaborator", canPush: true, canAdminister: false }); });
it("gives a stranger nothing", async () => { const { ctx } = bobbin([{ subject: "did:plc:friend" }]);
await expect( resolveRepoAccess(ctx, { ownerDid: owner, repoDid }, "did:plc:stranger") ).resolves.toEqual(NO_ACCESS); });
it("gives a signed-out viewer nothing", async () => { const { ctx, fetch } = bobbin([]);
await expect( resolveRepoAccess(ctx, { ownerDid: owner, repoDid }, undefined) ).resolves.toEqual(NO_ACCESS); expect(fetch).not.toHaveBeenCalled(); });
it("has no collaborators to check on a repo without a DID", async () => { const { ctx, fetch } = bobbin([{ subject: "did:plc:friend" }]);
await expect( resolveRepoAccess(ctx, { ownerDid: owner }, "did:plc:friend") ).resolves.toEqual(NO_ACCESS); expect(fetch).not.toHaveBeenCalled(); });});