Files
hyperframes/packages/cli/src/auth/errors.test.ts
T

44 lines
1.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
AuthError,
ErrApi,
ErrInvalidStore,
ErrNotConfigured,
ErrUnauthenticated,
isAuthError,
} from "./errors.js";
describe("auth/errors", () => {
it("ErrNotConfigured carries the right code + hint", () => {
const err = ErrNotConfigured();
expect(err).toBeInstanceOf(AuthError);
expect(err.code).toBe("NOT_CONFIGURED");
expect(err.hint).toContain("hyperframes auth login");
});
it("ErrInvalidStore wraps the detail", () => {
const err = ErrInvalidStore("malformed at line 3");
expect(err.code).toBe("INVALID_STORE");
expect(err.message).toContain("malformed at line 3");
});
it("ErrUnauthenticated includes detail when provided", () => {
expect(ErrUnauthenticated().code).toBe("UNAUTHENTICATED");
expect(ErrUnauthenticated("invalid token").message).toContain("invalid token");
});
it("ErrApi captures status + detail", () => {
const err = ErrApi(503, "upstream timeout");
expect(err.code).toBe("API_ERROR");
expect(err.message).toContain("503");
expect(err.message).toContain("upstream timeout");
});
it("isAuthError narrows properly", () => {
expect(isAuthError(ErrNotConfigured())).toBe(true);
expect(isAuthError(new Error("plain"))).toBe(false);
expect(isAuthError(null)).toBe(false);
expect(isAuthError("string")).toBe(false);
});
});