test: move pages tests out of Next.js routes

This commit is contained in:
shamoon
2026-02-04 09:10:42 -08:00
parent 03a88c0f6b
commit bcdd4166a3
34 changed files with 47 additions and 46 deletions

View File

@@ -21,7 +21,7 @@ vi.mock("utils/contexts/tab", () => ({
TabProvider: ({ children }) => <>{children}</>, TabProvider: ({ children }) => <>{children}</>,
})); }));
import App from "./_app.jsx"; import App from "pages/_app.jsx";
describe("pages/_app", () => { describe("pages/_app", () => {
it("renders the active page component with pageProps", () => { it("renders the active page component with pageProps", () => {

View File

@@ -8,7 +8,7 @@ vi.mock("next/document", () => ({
NextScript: () => <script data-testid="nextscript" />, NextScript: () => <script data-testid="nextscript" />,
})); }));
import Document from "./_document.jsx"; import Document from "pages/_document.jsx";
describe("pages/_document", () => { describe("pages/_document", () => {
it("renders the PWA meta + custom css links", () => { it("renders the PWA meta + custom css links", () => {

View File

@@ -10,7 +10,7 @@ vi.mock("utils/config/api-response", () => ({
bookmarksResponse, bookmarksResponse,
})); }));
import handler from "./bookmarks"; import handler from "pages/api/bookmarks";
describe("pages/api/bookmarks", () => { describe("pages/api/bookmarks", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -26,7 +26,7 @@ vi.mock("utils/logger", () => ({
default: () => logger, default: () => logger,
})); }));
import handler from "./[path]"; import handler from "pages/api/config/[path]";
describe("pages/api/config/[path]", () => { describe("pages/api/config/[path]", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -39,7 +39,7 @@ vi.mock("dockerode", () => ({ default: Docker }));
vi.mock("utils/config/docker", () => ({ default: getDockerArguments })); vi.mock("utils/config/docker", () => ({ default: getDockerArguments }));
vi.mock("utils/logger", () => ({ default: () => logger })); vi.mock("utils/logger", () => ({ default: () => logger }));
import handler from "./[...service]"; import handler from "pages/api/docker/stats/[...service]";
describe("pages/api/docker/stats/[...service]", () => { describe("pages/api/docker/stats/[...service]", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -39,7 +39,7 @@ vi.mock("dockerode", () => ({ default: Docker }));
vi.mock("utils/config/docker", () => ({ default: getDockerArguments })); vi.mock("utils/config/docker", () => ({ default: getDockerArguments }));
vi.mock("utils/logger", () => ({ default: () => logger })); vi.mock("utils/logger", () => ({ default: () => logger }));
import handler from "./[...service]"; import handler from "pages/api/docker/status/[...service]";
describe("pages/api/docker/status/[...service]", () => { describe("pages/api/docker/status/[...service]", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -22,7 +22,7 @@ vi.mock("utils/config/config", () => ({
CONF_DIR, CONF_DIR,
})); }));
import handler from "./hash"; import handler from "pages/api/hash";
describe("pages/api/hash", () => { describe("pages/api/hash", () => {
const originalBuildTime = process.env.HOMEPAGE_BUILDTIME; const originalBuildTime = process.env.HOMEPAGE_BUILDTIME;

View File

@@ -2,7 +2,7 @@ import { describe, expect, it } from "vitest";
import createMockRes from "test-utils/create-mock-res"; import createMockRes from "test-utils/create-mock-res";
import handler from "./healthcheck"; import handler from "pages/api/healthcheck";
describe("pages/api/healthcheck", () => { describe("pages/api/healthcheck", () => {
it("returns 'up'", () => { it("returns 'up'", () => {

View File

@@ -24,20 +24,20 @@ vi.mock("@kubernetes/client-node", () => ({
}, },
})); }));
vi.mock("../../../../utils/config/kubernetes", () => ({ vi.mock("utils/config/kubernetes", () => ({
getKubeConfig, getKubeConfig,
})); }));
vi.mock("../../../../utils/kubernetes/utils", () => ({ vi.mock("utils/kubernetes/utils", () => ({
parseCpu, parseCpu,
parseMemory, parseMemory,
})); }));
vi.mock("../../../../utils/logger", () => ({ vi.mock("utils/logger", () => ({
default: () => logger, default: () => logger,
})); }));
import handler from "./[...service]"; import handler from "pages/api/kubernetes/stats/[...service]";
describe("pages/api/kubernetes/stats/[...service]", () => { describe("pages/api/kubernetes/stats/[...service]", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -15,15 +15,15 @@ vi.mock("@kubernetes/client-node", () => ({
CoreV1Api: class CoreV1Api {}, CoreV1Api: class CoreV1Api {},
})); }));
vi.mock("../../../../utils/config/kubernetes", () => ({ vi.mock("utils/config/kubernetes", () => ({
getKubeConfig, getKubeConfig,
})); }));
vi.mock("../../../../utils/logger", () => ({ vi.mock("utils/logger", () => ({
default: () => logger, default: () => logger,
})); }));
import handler from "./[...service]"; import handler from "pages/api/kubernetes/status/[...service]";
describe("pages/api/kubernetes/status/[...service]", () => { describe("pages/api/kubernetes/status/[...service]", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -20,7 +20,7 @@ vi.mock("ping", () => ({
promise: ping, promise: ping,
})); }));
import handler from "./ping"; import handler from "pages/api/ping";
describe("pages/api/ping", () => { describe("pages/api/ping", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -20,7 +20,7 @@ vi.mock("utils/logger", () => ({
default: () => logger, default: () => logger,
})); }));
import handler from "./[...service]"; import handler from "pages/api/proxmox/stats/[...service]";
describe("pages/api/proxmox/stats/[...service]", () => { describe("pages/api/proxmox/stats/[...service]", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -15,7 +15,7 @@ vi.mock("utils/proxy/http", () => ({
cachedRequest, cachedRequest,
})); }));
import handler from "./releases"; import handler from "pages/api/releases";
describe("pages/api/releases", () => { describe("pages/api/releases", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -2,7 +2,7 @@ import { describe, expect, it, vi } from "vitest";
import createMockRes from "test-utils/create-mock-res"; import createMockRes from "test-utils/create-mock-res";
import handler from "./revalidate"; import handler from "pages/api/revalidate";
describe("pages/api/revalidate", () => { describe("pages/api/revalidate", () => {
it("revalidates and returns {revalidated:true}", async () => { it("revalidates and returns {revalidated:true}", async () => {

View File

@@ -33,7 +33,7 @@ vi.mock("utils/proxy/http", () => ({
cachedRequest, cachedRequest,
})); }));
import handler from "./searchSuggestion"; import handler from "pages/api/search/searchSuggestion";
describe("pages/api/search/searchSuggestion", () => { describe("pages/api/search/searchSuggestion", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -10,7 +10,7 @@ vi.mock("utils/config/api-response", () => ({
servicesResponse, servicesResponse,
})); }));
import handler from "./index"; import handler from "pages/api/services/index";
describe("pages/api/services/index", () => { describe("pages/api/services/index", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -26,7 +26,7 @@ vi.mock("widgets/widgets", () => ({
}, },
})); }));
import servicesProxy from "./proxy"; import servicesProxy from "pages/api/services/proxy";
function createMockRes() { function createMockRes() {
const res = { const res = {

View File

@@ -25,7 +25,7 @@ vi.mock("utils/logger", () => ({
default: () => logger, default: () => logger,
})); }));
import handler from "./siteMonitor"; import handler from "pages/api/siteMonitor";
describe("pages/api/siteMonitor", () => { describe("pages/api/siteMonitor", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -12,7 +12,7 @@ vi.mock("utils/config/config", () => ({
getSettings, getSettings,
})); }));
import handler from "./theme"; import handler from "pages/api/theme";
describe("pages/api/theme", () => { describe("pages/api/theme", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -10,7 +10,7 @@ vi.mock("utils/config/config", () => ({
default: checkAndCopyConfig, default: checkAndCopyConfig,
})); }));
import handler from "./validate"; import handler from "pages/api/validate";
describe("pages/api/validate", () => { describe("pages/api/validate", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -20,7 +20,7 @@ vi.mock("utils/logger", () => ({
default: () => logger, default: () => logger,
})); }));
import handler from "./glances"; import handler from "pages/api/widgets/glances";
describe("pages/api/widgets/glances", () => { describe("pages/api/widgets/glances", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -10,7 +10,7 @@ vi.mock("utils/config/api-response", () => ({
widgetsResponse, widgetsResponse,
})); }));
import handler from "./index"; import handler from "pages/api/widgets/index";
describe("pages/api/widgets/index", () => { describe("pages/api/widgets/index", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -30,20 +30,20 @@ vi.mock("@kubernetes/client-node", () => ({
}, },
})); }));
vi.mock("../../../utils/config/kubernetes", () => ({ vi.mock("utils/config/kubernetes", () => ({
getKubeConfig, getKubeConfig,
})); }));
vi.mock("../../../utils/kubernetes/utils", () => ({ vi.mock("utils/kubernetes/utils", () => ({
parseCpu, parseCpu,
parseMemory, parseMemory,
})); }));
vi.mock("../../../utils/logger", () => ({ vi.mock("utils/logger", () => ({
default: () => logger, default: () => logger,
})); }));
import handler from "./kubernetes"; import handler from "pages/api/widgets/kubernetes";
describe("pages/api/widgets/kubernetes", () => { describe("pages/api/widgets/kubernetes", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -8,19 +8,19 @@ const { getSettings, httpProxy, logger } = vi.hoisted(() => ({
logger: { error: vi.fn() }, logger: { error: vi.fn() },
})); }));
vi.mock("../../../utils/config/config", () => ({ vi.mock("utils/config/config", () => ({
getSettings, getSettings,
})); }));
vi.mock("../../../utils/proxy/http", () => ({ vi.mock("utils/proxy/http", () => ({
httpProxy, httpProxy,
})); }));
vi.mock("../../../utils/logger", () => ({ vi.mock("utils/logger", () => ({
default: () => logger, default: () => logger,
})); }));
import handler from "./longhorn"; import handler from "pages/api/widgets/longhorn";
describe("pages/api/widgets/longhorn", () => { describe("pages/api/widgets/longhorn", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -10,7 +10,7 @@ vi.mock("utils/proxy/http", () => ({
cachedRequest, cachedRequest,
})); }));
import handler from "./openmeteo"; import handler from "pages/api/widgets/openmeteo";
describe("pages/api/widgets/openmeteo", () => { describe("pages/api/widgets/openmeteo", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -20,7 +20,7 @@ vi.mock("utils/proxy/http", () => ({
cachedRequest, cachedRequest,
})); }));
import handler from "./openweathermap"; import handler from "pages/api/widgets/openweathermap";
describe("pages/api/widgets/openweathermap", () => { describe("pages/api/widgets/openweathermap", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -24,7 +24,7 @@ vi.mock("utils/logger", () => ({
vi.mock("systeminformation", () => ({ default: si })); vi.mock("systeminformation", () => ({ default: si }));
import handler from "./resources"; import handler from "pages/api/widgets/resources";
describe("pages/api/widgets/resources", () => { describe("pages/api/widgets/resources", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -20,7 +20,7 @@ vi.mock("utils/logger", () => ({
default: () => logger, default: () => logger,
})); }));
import handler from "./stocks"; import handler from "pages/api/widgets/stocks";
describe("pages/api/widgets/stocks", () => { describe("pages/api/widgets/stocks", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -20,7 +20,7 @@ vi.mock("utils/proxy/http", () => ({
cachedRequest, cachedRequest,
})); }));
import handler from "./weather"; import handler from "pages/api/widgets/weather";
describe("pages/api/widgets/weatherapi", () => { describe("pages/api/widgets/weatherapi", () => {
beforeEach(() => { beforeEach(() => {

View File

@@ -10,7 +10,7 @@ vi.mock("utils/config/config", () => ({
getSettings, getSettings,
})); }));
import { getServerSideProps } from "./browserconfig.xml.jsx"; import { getServerSideProps } from "pages/browserconfig.xml.jsx";
function createMockRes() { function createMockRes() {
return { return {

View File

@@ -65,7 +65,7 @@ describe("pages/index getStaticProps", () => {
it("returns initial settings and api fallbacks for swr", async () => { it("returns initial settings and api fallbacks for swr", async () => {
getSettings.mockReturnValueOnce({ providers: { x: 1 }, language: "en", title: "Homepage" }); getSettings.mockReturnValueOnce({ providers: { x: 1 }, language: "en", title: "Homepage" });
const { getStaticProps } = await import("./index.jsx"); const { getStaticProps } = await import("pages/index.jsx");
const result = await getStaticProps(); const result = await getStaticProps();
expect(result.props.initialSettings).toEqual({ language: "en", title: "Homepage" }); expect(result.props.initialSettings).toEqual({ language: "en", title: "Homepage" });
@@ -79,7 +79,7 @@ describe("pages/index getStaticProps", () => {
it("normalizes legacy language codes before requesting translations", async () => { it("normalizes legacy language codes before requesting translations", async () => {
getSettings.mockReturnValueOnce({ providers: {}, language: "zh-CN" }); getSettings.mockReturnValueOnce({ providers: {}, language: "zh-CN" });
const { getStaticProps } = await import("./index.jsx"); const { getStaticProps } = await import("pages/index.jsx");
await getStaticProps(); await getStaticProps();
expect(serverSideTranslations).toHaveBeenCalledWith("zh-Hans"); expect(serverSideTranslations).toHaveBeenCalledWith("zh-Hans");
@@ -89,7 +89,7 @@ describe("pages/index getStaticProps", () => {
getSettings.mockReturnValueOnce({ providers: {}, language: "de" }); getSettings.mockReturnValueOnce({ providers: {}, language: "de" });
state.throwIn = "services"; state.throwIn = "services";
const { getStaticProps } = await import("./index.jsx"); const { getStaticProps } = await import("pages/index.jsx");
const result = await getStaticProps(); const result = await getStaticProps();
expect(result.props.initialSettings).toEqual({}); expect(result.props.initialSettings).toEqual({});

View File

@@ -8,7 +8,7 @@ vi.mock("utils/config/config", () => ({
getSettings, getSettings,
})); }));
import { getServerSideProps } from "./robots.txt.js"; import { getServerSideProps } from "pages/robots.txt.js";
function createMockRes() { function createMockRes() {
return { return {

View File

@@ -12,7 +12,7 @@ vi.mock("utils/config/config", () => ({
getSettings, getSettings,
})); }));
import { getServerSideProps } from "./site.webmanifest.jsx"; import { getServerSideProps } from "pages/site.webmanifest.jsx";
function createMockRes() { function createMockRes() {
return { return {

View File

@@ -11,6 +11,7 @@ export default defineConfig({
resolve: { resolve: {
alias: { alias: {
components: fileURLToPath(new URL("./src/components", import.meta.url)), components: fileURLToPath(new URL("./src/components", import.meta.url)),
pages: fileURLToPath(new URL("./src/pages", import.meta.url)),
styles: fileURLToPath(new URL("./src/styles", import.meta.url)), styles: fileURLToPath(new URL("./src/styles", import.meta.url)),
"test-utils": fileURLToPath(new URL("./src/test-utils", import.meta.url)), "test-utils": fileURLToPath(new URL("./src/test-utils", import.meta.url)),
utils: fileURLToPath(new URL("./src/utils", import.meta.url)), utils: fileURLToPath(new URL("./src/utils", import.meta.url)),