Files
htmlui/tests/components/SetupRepository.test.jsx
2025-06-07 08:03:18 -07:00

90 lines
3.4 KiB
JavaScript

import { findByTestId, render, waitFor, act } from "@testing-library/react";
import React from "react";
import { SetupRepository } from "../../src/components/SetupRepository";
import { setupAPIMock } from "../testutils/api-mocks";
import { fireEvent } from "@testing-library/react";
// Mockup for the server
let serverMock;
// Initialize the server mock before each test
beforeEach(() => {
serverMock = setupAPIMock();
});
it("can create new repository when not initialized", async () => {
// first attempt to connect says - NOT_INITIALIZED
serverMock
.onPost("/api/v1/repo/exists", {
storage: { type: "filesystem", config: { path: "some-path" } },
})
.reply(400, {
code: "NOT_INITIALIZED",
error: "repository not initialized",
});
// second attempt to create is success.
serverMock
.onPost("/api/v1/repo/create", {
storage: { type: "filesystem", config: { path: "some-path" } },
password: "foo",
options: {
blockFormat: { hash: "h-bar", encryption: "e-baz" },
objectFormat: { splitter: "s-foo" },
},
})
.reply(200, {});
const { getByTestId, container } = await act(() => render(<SetupRepository />));
fireEvent.click(getByTestId("provider-filesystem"));
fireEvent.change(await findByTestId(container, "control-path"), { target: { value: "some-path" } });
await act(() => fireEvent.click(getByTestId("submit-button")));
fireEvent.change(await findByTestId(container, "control-password"), { target: { value: "foo" } });
fireEvent.click(getByTestId("submit-button"));
await waitFor(() => serverMock.history.post.length == 1);
fireEvent.change(await findByTestId(container, "control-encryption"), { target: { value: "e-baz" } });
fireEvent.change(getByTestId("control-splitter"), { target: { value: "s-foo" } });
fireEvent.change(getByTestId("control-hash"), { target: { value: "h-bar" } });
fireEvent.change(getByTestId("control-confirmPassword"), { target: { value: "foo" } });
fireEvent.click(getByTestId("submit-button"));
await waitFor(() => serverMock.history.post.length == 2);
});
it("can connect to existing repository when already initialized", async () => {
// first attempt to connect is immediately successful.
serverMock
.onPost("/api/v1/repo/exists", {
storage: { type: "filesystem", config: { path: "some-path" } },
})
.reply(200, {});
const { getByTestId, container } = await act(() => render(<SetupRepository />));
fireEvent.click(getByTestId("provider-filesystem"));
fireEvent.change(await findByTestId(container, "control-path"), { target: { value: "some-path" } });
await act(() => fireEvent.click(getByTestId("submit-button")));
fireEvent.change(await findByTestId(container, "control-password"), { target: { value: "foo" } });
await act(() => fireEvent.click(getByTestId("submit-button")));
await waitFor(() => serverMock.history.post.length == 1);
});
it("can connect to existing repository using token", async () => {
serverMock
.onPost("/api/v1/repo/connect", {
token: "my-token",
})
.reply(200, {});
const { getByTestId, container } = await act(() => render(<SetupRepository />));
fireEvent.click(getByTestId("provider-_token"));
fireEvent.change(await findByTestId(container, "control-token"), { target: { value: "my-token" } });
await act(() => fireEvent.click(getByTestId("submit-button")));
await waitFor(() => serverMock.history.post.length == 1);
});