65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import { env } from "cloudflare:workers";
|
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
import { markEpisodeAsWatched } from "./anilist";
|
|
|
|
describe("markEpisodeAsWatched service", () => {
|
|
const mockStub = {
|
|
markTitleAsWatched: vi.fn(),
|
|
markEpisodeAsWatched: 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 call markTitleAsWatched on DO if markTitleAsComplete is true", async () => {
|
|
mockStub.markTitleAsWatched.mockResolvedValue({
|
|
user: { id: 1, statistics: { anime: {} } },
|
|
});
|
|
|
|
const result = await markEpisodeAsWatched("token", 1, 12, true);
|
|
|
|
expect(result).toBeDefined();
|
|
expect(mockStub.markTitleAsWatched).toHaveBeenCalledWith(1, "token");
|
|
expect(mockStub.markEpisodeAsWatched).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("should call markEpisodeAsWatched on DO if markTitleAsComplete is false", async () => {
|
|
mockStub.markEpisodeAsWatched.mockResolvedValue({
|
|
user: { id: 1, statistics: { anime: {} } },
|
|
});
|
|
|
|
const result = await markEpisodeAsWatched("token", 1, 12, false);
|
|
|
|
expect(result).toBeDefined();
|
|
expect(mockStub.markEpisodeAsWatched).toHaveBeenCalledWith(1, 12, "token");
|
|
expect(mockStub.markTitleAsWatched).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("should throw error if DO returns null", async () => {
|
|
mockStub.markEpisodeAsWatched.mockResolvedValue(null);
|
|
|
|
await expect(markEpisodeAsWatched("token", 1, 12, false)).rejects.toThrow(
|
|
"Failed to mark episode as watched",
|
|
);
|
|
});
|
|
|
|
it("should return formatted user data", async () => {
|
|
const mockUser = { id: 1, statistics: { anime: { count: 10 } } };
|
|
mockStub.markEpisodeAsWatched.mockResolvedValue({ user: mockUser });
|
|
|
|
const result = await markEpisodeAsWatched("token", 1, 12, false);
|
|
|
|
expect(result).toEqual({
|
|
...mockUser,
|
|
statistics: { count: 10 },
|
|
});
|
|
});
|
|
});
|