From 41f404c581c4a68c9651febe69f18499c546cbad Mon Sep 17 00:00:00 2001 From: denshooter Date: Thu, 8 Jan 2026 11:40:42 +0100 Subject: [PATCH] full upgrade to dev --- app/__tests__/api/sitemap.test.tsx | 59 ++++++++++++++++++++++-------- app/api/fetchAllProjects/route.tsx | 7 +--- app/api/sitemap/route.tsx | 7 ++-- jest.setup.ts | 3 -- 4 files changed, 48 insertions(+), 28 deletions(-) diff --git a/app/__tests__/api/sitemap.test.tsx b/app/__tests__/api/sitemap.test.tsx index c1b5343..0a17e68 100644 --- a/app/__tests__/api/sitemap.test.tsx +++ b/app/__tests__/api/sitemap.test.tsx @@ -1,12 +1,38 @@ -jest.mock("next/server", () => ({ - NextResponse: jest.fn().mockImplementation(function (body, init) { - // Use function and assign to `this` so `new NextResponse(...)` returns an instance with properties +jest.mock("next/server", () => { + const mockNextResponse = function ( + body: string | object, + init?: { headers?: Record }, + ) { + // Return an object that mimics NextResponse + const mockResponse = { + body, + init, + text: async () => { + if (typeof body === "string") { + return body; + } else if (body && typeof body === "object") { + return JSON.stringify(body); + } + return ""; + }, + json: async () => { + if (typeof body === "object") { + return body; + } + try { + return JSON.parse(body as string); + } catch { + return {}; + } + }, + }; + return mockResponse; + }; - this.body = body; - - this.init = init; - }), -})); + return { + NextResponse: mockNextResponse, + }; +}); import { GET } from "@/app/api/sitemap/route"; @@ -81,18 +107,19 @@ describe("GET /api/sitemap", () => { it("should return a sitemap", async () => { const response = await GET(); - expect(response.body).toContain( + // Get the body text from the NextResponse + const body = await response.text(); + + expect(body).toContain( '', ); - expect(response.body).toContain("https://dki.one/"); - expect(response.body).toContain("https://dki.one/legal-notice"); - expect(response.body).toContain( - "https://dki.one/privacy-policy", - ); - expect(response.body).toContain( + expect(body).toContain("https://dki.one/"); + expect(body).toContain("https://dki.one/legal-notice"); + expect(body).toContain("https://dki.one/privacy-policy"); + expect(body).toContain( "https://dki.one/projects/just-doing-some-testing", ); - expect(response.body).toContain( + expect(body).toContain( "https://dki.one/projects/blockchain-based-voting-system", ); // Note: Headers are not available in test environment diff --git a/app/api/fetchAllProjects/route.tsx b/app/api/fetchAllProjects/route.tsx index 8ee99dc..a698325 100644 --- a/app/api/fetchAllProjects/route.tsx +++ b/app/api/fetchAllProjects/route.tsx @@ -1,5 +1,4 @@ import { NextResponse } from "next/server"; -import http from "http"; import NodeCache from "node-cache"; // Use a dynamic import for node-fetch so tests that mock it (via jest.mock) are respected @@ -9,7 +8,7 @@ async function getFetch() { // support both CJS and ESM interop return (mod as { default: unknown }).default ?? mod; } catch (_err) { - return (globalThis as unknown as { fetch: unknown }).fetch; + return globalThis.fetch; } } @@ -45,11 +44,9 @@ export async function GET() { } try { - const agent = new http.Agent({ keepAlive: true }); const fetchFn = await getFetch(); - const response = await fetchFn( + const response = await (fetchFn as unknown as typeof fetch)( `${GHOST_API_URL}/ghost/api/content/posts/?key=${GHOST_API_KEY}&limit=all`, - { agent: agent as unknown as undefined }, ); const posts: GhostPostsResponse = (await response.json()) as GhostPostsResponse; diff --git a/app/api/sitemap/route.tsx b/app/api/sitemap/route.tsx index 4d45150..b8c56f3 100644 --- a/app/api/sitemap/route.tsx +++ b/app/api/sitemap/route.tsx @@ -81,10 +81,9 @@ export async function GET() { // For tests return a plain object so tests can inspect `.body` easily if (process.env.NODE_ENV === "test") { - return { - body: xml, + return new NextResponse(xml, { headers: { "Content-Type": "application/xml" }, - }; + }); } return new NextResponse(xml, { @@ -115,7 +114,7 @@ export async function GET() { try { const mod = await import("node-fetch"); const nodeFetch = mod.default ?? mod; - response = await nodeFetch( + response = await (nodeFetch as unknown as typeof fetch)( `${process.env.GHOST_API_URL}/ghost/api/content/posts/?key=${process.env.GHOST_API_KEY}&limit=all`, ); } catch (err) { diff --git a/jest.setup.ts b/jest.setup.ts index e78a60e..f9c6ae8 100644 --- a/jest.setup.ts +++ b/jest.setup.ts @@ -4,9 +4,6 @@ import React from "react"; import { render } from "@testing-library/react"; import { ToastProvider } from "@/components/Toast"; -// Set test environment -process.env.NODE_ENV = "test"; - // Mock Next.js router jest.mock("next/navigation", () => ({ useRouter() {