IKHSAN
EN Read in EnglishID

homeio

Publik

Fork dari doctor-io/homeio

Branch
main
Commit terakhir
958d74616 Oktober 2026

useNetworkShares.test.tsx

Buka raw
/* @vitest-environment jsdom */

import { act, renderHook, waitFor } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import {
  useCreateNetworkShare,
  useDiscoverNetworkServers,
  useNetworkShares,
} from "@/modules/files/hooks/useNetworkShares";
import { queryKeys } from "@/lib/shared/query-keys";
import { createTestQueryClient, createWrapper } from "@/test/query-client-wrapper";

describe("useNetworkShares", () => {
  it("loads configured network shares", async () => {
    const fetchMock = vi.fn().mockResolvedValueOnce({
      ok: true,
      json: async () => ({
        data: [
          {
            id: "share-1",
            host: "nas.local",
            share: "Media",
            username: "user",
            mountPath: "Network/nas.local/Media",
            isMounted: true,
          },
        ],
        meta: { count: 1 },
      }),
    });

    vi.stubGlobal("fetch", fetchMock);

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

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

    expect(fetchMock).toHaveBeenCalledWith("/api/v1/files/network/shares", {
      cache: "no-store",
    });
  });

  it("creates share and invalidates network queries", async () => {
    const fetchMock = vi.fn().mockResolvedValueOnce({
      ok: true,
      json: async () => ({
        data: {
          id: "share-1",
          host: "nas.local",
          share: "Media",
          username: "user",
          mountPath: "Network/nas.local/Media",
          isMounted: true,
        },
      }),
    });

    vi.stubGlobal("fetch", fetchMock);

    const client = createTestQueryClient();
    const invalidateSpy = vi.spyOn(client, "invalidateQueries");

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

    await act(async () => {
      await result.current.mutateAsync({
        host: "nas.local",
        share: "Media",
        username: "user",
        password: "secret",
      });
    });

    expect(invalidateSpy).toHaveBeenCalledWith({
      queryKey: queryKeys.networkShares,
    });
    expect(invalidateSpy).toHaveBeenCalledWith({
      queryKey: queryKeys.filesList("Network"),
    });
  });

  it("discovers smb servers", async () => {
    const fetchMock = vi.fn().mockResolvedValueOnce({
      ok: true,
      json: async () => ({
        data: {
          servers: ["nas.local"],
        },
      }),
    });

    vi.stubGlobal("fetch", fetchMock);

    const client = createTestQueryClient();

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

    await act(async () => {
      const response = await result.current.mutateAsync();
      expect(response.servers).toEqual(["nas.local"]);
    });
  });
});
byte
2.944
baris
113
Jenis
tsx
Commit terakhir
16 Oktober 2026