import { describe, expect, it, vi } from 'vitest'; import * as knot from './knot'; import { ClientResponseError, createBobbinClient, type BobbinContext } from './client'; const jsonResponse = (body: unknown, init: ResponseInit = {}): Response => new Response(JSON.stringify(body), { status: 200, headers: { 'content-type': 'application/json' }, ...init }); const makeCtx = (fetchMock: typeof globalThis.fetch): BobbinContext => createBobbinClient({ serviceUrl: 'https://bobbin.test', fetch: fetchMock }); describe('knot.archive (binary passthrough)', () => { it('throws ClientResponseError on a non-2xx archive response', async () => { const fetchMock = vi .fn() .mockResolvedValue(jsonResponse({ error: 'UpstreamGone' }, { status: 502 })); const err = await knot .archive(makeCtx(fetchMock), { repo: 'did:plc:x/r', ref: 'main' }) .catch((e: unknown) => e); expect(err).toBeInstanceOf(ClientResponseError); expect((err as ClientResponseError).status).toBe(502); }); });