IKHSAN
ENID Baca dalam Bahasa Indonesia

homeio

Public

Forked from doctor-io/homeio

Branch
main
Latest commit
958d74616 October 2026

useSystemMetrics.test.tsx

Open raw
/* @vitest-environment jsdom */

import { renderHook, waitFor } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { useSystemMetrics } from "@/modules/system/hooks/useSystemMetrics";
import { createTestQueryClient, createWrapper } from "@/test/query-client-wrapper";

describe("useSystemMetrics", () => {
  it("loads metrics snapshot", async () => {
    vi.stubGlobal(
      "fetch",
      vi.fn().mockResolvedValue({
        ok: true,
        json: async () => ({
          data: {
            timestamp: "2026-02-22T12:00:00.000Z",
            hostname: "pi",
            platform: "linux",
            uptimeSeconds: 100,
            cpu: {
              oneMinute: 0.2,
              fiveMinute: 0.1,
              fifteenMinute: 0.1,
              normalizedPercent: 20,
            },
            memory: {
              totalBytes: 1000,
              freeBytes: 500,
              usedBytes: 500,
              usedPercent: 50,
            },
            temperature: {
              mainCelsius: 49.2,
              maxCelsius: 51.1,
              coresCelsius: [48.5, 51.1],
            },
            battery: {
              hasBattery: true,
              isCharging: false,
              percent: 74,
              timeRemainingMinutes: 90,
              acConnected: false,
              manufacturer: "SONY",
              cycleCount: 248,
              designedCapacityWh: 50,
              maxCapacityWh: 45,
              designToMaxCapacityPercent: 111.1,
            },
            wifi: {
              connected: true,
              iface: "wlan0",
              ssid: "HomeNet",
              bssid: "11:22:33",
              signalPercent: 66,
              txRateMbps: 130,
              downloadMbps: 24.8,
              uploadMbps: 8.3,
              ipv4: "192.168.1.22",
              ipv6: "fe80::1234",
              availableNetworks: [],
            },
            process: {
              pid: 123,
              uptimeSeconds: 10,
              nodeVersion: "v22",
            },
          },
        }),
      }),
    );

    const client = createTestQueryClient();
    const { result } = renderHook(() => useSystemMetrics(), {
      wrapper: createWrapper(client),
    });

    await waitFor(() => {
      expect(result.current.isSuccess).toBe(true);
    });

    expect(result.current.data?.hostname).toBe("pi");
    expect(fetch).toHaveBeenCalledWith("/api/v1/system/metrics", {
      cache: "no-store",
    });
  });
});
bytes
2,501
lines
87
Type
tsx
Latest commit
16 October 2026