feat(comments) : add newest and oldest sorting to admin inbox
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
const mocks = vi.hoisted(() => ({ list: vi.fn(), viewer: vi.fn(), admin: vi.fn() }));
|
||||
vi.mock("@/lib/comments/repository", () => ({ listComments: mocks.list, requireCommentViewer: mocks.viewer, requireCommentAdmin: mocks.admin }));
|
||||
import { GET } from "./route";
|
||||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
mocks.viewer.mockResolvedValue({ id: "admin", admin: true });
|
||||
mocks.list.mockResolvedValue({ items: [], nextCursor: null, viewer: { id: "admin", admin: true } });
|
||||
});
|
||||
|
||||
describe("admin inbox sort selection", () => {
|
||||
it.each([undefined, "newest", "oldest", "invalid"])("normalizes sort %s while forwarding filters and pagination", async (sort) => {
|
||||
const query = new URLSearchParams({ grouped: "true", target: "guide:test", status: "hidden", unanswered: "true", cursor: "cursor" });
|
||||
if (sort) query.set("sort", sort);
|
||||
const response = await GET(new Request(`https://guide.example.test/api/admin/comments?${query}`));
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.headers.get("Cache-Control")).toBe("private, no-store");
|
||||
expect(mocks.admin).toHaveBeenCalledWith({ id: "admin", admin: true });
|
||||
expect(mocks.list).toHaveBeenCalledWith(expect.objectContaining({ sort: sort === "oldest" ? "oldest" : "newest",
|
||||
target: "guide:test", status: "hidden", unanswered: true, grouped: true, cursor: "cursor" }));
|
||||
});
|
||||
});
|
||||
@@ -7,7 +7,7 @@ export async function GET(request: Request) {
|
||||
requireCommentAdmin(viewer);
|
||||
const query = new URL(request.url).searchParams;
|
||||
return Response.json(await listComments({ viewer, inbox: true, grouped: query.get("grouped") === "true", target: query.get("target") || undefined,
|
||||
status: query.get("status") || undefined, unanswered: query.get("unanswered") === "true", cursor: query.get("cursor") }),
|
||||
status: query.get("status") || undefined, sort: query.get("sort") === "oldest" ? "oldest" : "newest", unanswered: query.get("unanswered") === "true", cursor: query.get("cursor") }),
|
||||
{ headers: { "Cache-Control": "private, no-store" } });
|
||||
} catch (cause) { return errorResponse(cause); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user