IKHSAN
ENID Baca dalam Bahasa Indonesia

homeio

Public

Forked from doctor-io/homeio

Branch
main
Latest commit
958d74616 October 2026

route.test.ts

Open raw
import { NextRequest, NextResponse } from "next/server";
import { describe, expect, it, vi } from "vitest";

vi.mock("@/lib/server/modules/system/power-schedule", () => ({
  deleteScheduledRebootArtifacts: vi.fn(),
}));

vi.mock("@/lib/server/modules/system/power-service", () => ({
  deleteFactoryResetArtifacts: vi.fn(),
  scheduleFactoryReset: vi.fn(),
}));

import { POST } from "@/app/api/v1/system/power/factory-reset/route";
import { requireApiSession } from "@/lib/server/modules/auth/api";
import { deleteScheduledRebootArtifacts } from "@/lib/server/modules/system/power-schedule";
import {
  deleteFactoryResetArtifacts,
  scheduleFactoryReset,
} from "@/lib/server/modules/system/power-service";

describe("POST /api/v1/system/power/factory-reset", () => {
  it("returns 202 and schedules factory reset for authenticated users", async () => {
    vi.mocked(deleteScheduledRebootArtifacts).mockResolvedValueOnce(undefined);
    vi.mocked(deleteFactoryResetArtifacts).mockResolvedValueOnce(undefined);
    vi.mocked(scheduleFactoryReset).mockResolvedValueOnce(undefined);

    const request = new NextRequest("http://localhost/api/v1/system/power/factory-reset", {
      method: "POST",
      headers: {
        cookie: "homeio_session=session-token",
      },
    });

    const response = await POST(request);
    const json = (await response.json()) as {
      data: { action: string; accepted: boolean };
    };

    expect(response.status).toBe(202);
    expect(json.data).toEqual({ action: "factory-reset", accepted: true });
    expect(deleteScheduledRebootArtifacts).toHaveBeenCalledOnce();
    expect(deleteFactoryResetArtifacts).toHaveBeenCalledOnce();
    expect(scheduleFactoryReset).toHaveBeenCalledOnce();
  });

  it("returns 401 when the session is missing or invalid", async () => {
    vi.mocked(requireApiSession).mockResolvedValueOnce({
      session: null,
      response: NextResponse.json({ error: "Unauthorized" }, { status: 401 }),
    });

    const request = new NextRequest("http://localhost/api/v1/system/power/factory-reset", {
      method: "POST",
    });

    const response = await POST(request);

    expect(response.status).toBe(401);
    expect(scheduleFactoryReset).not.toHaveBeenCalled();
  });

  it("returns 500 when factory reset scheduling fails", async () => {
    vi.mocked(deleteScheduledRebootArtifacts).mockResolvedValueOnce(undefined);
    vi.mocked(deleteFactoryResetArtifacts).mockResolvedValueOnce(undefined);
    vi.mocked(scheduleFactoryReset).mockRejectedValueOnce(new Error("spawn failed"));

    const request = new NextRequest("http://localhost/api/v1/system/power/factory-reset", {
      method: "POST",
      headers: {
        cookie: "homeio_session=session-token",
      },
    });

    const response = await POST(request);
    const json = (await response.json()) as { error: string };

    expect(response.status).toBe(500);
    expect(json.error).toBe("Failed to schedule factory reset");
  });
});
bytes
2,976
lines
81
Type
ts
Latest commit
16 October 2026