Files
aniplay-api/src/services/auth/anilist/getUser.spec.ts

55 lines
1.5 KiB
TypeScript

import { env } from "cloudflare:workers";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { getUser } from "./getUser";
describe("getUser service", () => {
const mockStub = {
getUserProfile: vi.fn(),
};
beforeEach(() => {
vi.clearAllMocks();
// @ts-expect-error - Partial mock
env.ANILIST_DO = {
idFromName: vi.fn().mockReturnValue("global-id"),
get: vi.fn().mockReturnValue(mockStub),
};
});
it("should fetch user profile from Durable Object", async () => {
const mockUser = { id: 1, name: "User", statistics: { anime: {} } };
mockStub.getUserProfile.mockResolvedValue(mockUser);
const result = await getUser("token");
expect(result).toEqual({
...mockUser,
statistics: mockUser.statistics.anime,
});
expect(mockStub.getUserProfile).toHaveBeenCalledWith("token");
});
it("should return null if DO throws 401 error", async () => {
mockStub.getUserProfile.mockRejectedValue(new Error("401 Unauthorized"));
const result = await getUser("token");
expect(result).toBeNull();
});
it("should rethrow other DO errors", async () => {
mockStub.getUserProfile.mockRejectedValue(new Error("Other Error"));
await expect(getUser("token")).rejects.toThrow("Other Error");
});
it("should return null if DO returns null", async () => {
mockStub.getUserProfile.mockResolvedValue(null);
const result = await getUser("token");
expect(result).toBeNull();
});
});