/** * @copyright nhcarrigan * @license Naomi's Public License * @author Naomi Carrigan */ /* eslint-disable new-cap */ import { NextResponse } from "next/server"; import { describe, it, expect, vi } from "vitest"; import { GET } from "../../../../src/app/api/activity/route"; import { getCodebergActivty } from "../../../../src/lib/codeberg"; import { getGithubData } from "../../../../src/lib/github"; vi.mock("../../../../src/lib/codeberg"); vi.mock("../../../../src/lib/github"); describe("gET /api/activity", () => { it("should return a sorted and limited list of activities", async() => { expect.assertions(2); const mockCodebergData = [ { created: "2023-01-01T00:00:00Z", op_type: "push", repo: { full_name: "repo1", html_url: "https://codeberg.org/repo1" }, }, ]; const mockGithubData = [ { created_at: "2023-01-02T00:00:00Z", repo: { name: "repo2", url: "https://api.github.com/repos/repo2", }, type: "pull_request", }, ]; vi.mocked(getCodebergActivty).mockResolvedValue(mockCodebergData); vi.mocked(getGithubData).mockResolvedValue(mockGithubData); const response = await GET(); const json = await response.json(); expect(response, "did not respond with Next").toBeInstanceOf(NextResponse); expect(json, "incorrect payload").toStrictEqual([ { date: "2023-01-02T00:00:00.000Z", repo: "https://github.com/repo2", repoName: "repo2", type: "pull_request", }, { date: "2023-01-01T00:00:00.000Z", repo: "https://codeberg.org/repo1", repoName: "repo1", type: "push", }, ]); }); it("should handle empty data from both sources", async() => { expect.assertions(2); vi.mocked(getCodebergActivty).mockResolvedValue([]); vi.mocked(getGithubData).mockResolvedValue([]); const response = await GET(); const json = await response.json(); expect(response, "did not use Next to respond"). toBeInstanceOf(NextResponse); expect(json, "was not empty array").toStrictEqual([]); }); it("should limit the results to 100 entries", async() => { expect.assertions(2); const mockCodebergData = Array.from({ length: 60 }, (_, index) => { return { created: `2023-01-${index + 1}T00:00:00Z`, op_type: "push", repo: { full_name: `repo${index + 1}`, html_url: `https://codeberg.org/repo${index + 1}` }, }; }); const mockGithubData = Array.from({ length: 60 }, (_, index) => { return { created_at: `2023-02-${index + 1}T00:00:00Z`, repo: { name: `repo${index + 61}`, url: `https://api.github.com/repos/repo${index + 61}` }, type: "pull_request", }; }); vi.mocked(getCodebergActivty).mockResolvedValue(mockCodebergData); vi.mocked(getGithubData).mockResolvedValue(mockGithubData); const response = await GET(); const json = await response.json(); expect(response, "did not use Next to respond"). toBeInstanceOf(NextResponse); expect(json, "did not limit to 100 entries").toHaveLength(100); }); });