Standardize API response envelopes: use items for collection responses and update tests

This commit is contained in:
2026-04-28 20:48:00 +02:00
parent 1c673d600c
commit b27765928a
23 changed files with 186 additions and 104 deletions

View File

@@ -11,7 +11,7 @@ describe("useJailBannedIps", () => {
const unbanMock = vi.mocked(api.unbanIp);
fetchMock.mockResolvedValue({ items: [{ ip: "1.2.3.4", jail: "sshd", banned_at: "2025-01-01T10:00:00+00:00", expires_at: "2025-01-01T10:10:00+00:00", ban_count: 1, country: "US" }], total: 1, page: 1, page_size: 25 });
unbanMock.mockResolvedValue({ message: "ok", jail: "sshd" });
unbanMock.mockResolvedValue({ message: "ok", jail: "sshd", success: true });
const { result } = renderHook(() => useJailBannedIps("sshd"));
await waitFor(() => {

View File

@@ -12,7 +12,7 @@ describe("useJailConfigs", () => {
it("calls fetchJailConfigs only once on mount", async () => {
vi.mocked(configApi.fetchJailConfigs).mockResolvedValue({
jails: [
items: [
{
name: "sshd",
ban_time: 600,
@@ -49,7 +49,7 @@ describe("useJailConfigs", () => {
it("does not trigger infinite refetch with stable onSuccess", async () => {
vi.mocked(configApi.fetchJailConfigs).mockResolvedValue({
jails: [],
items: [],
total: 0,
});

View File

@@ -10,12 +10,14 @@ vi.mock("../../api/jails");
const mockJail: Jail = {
name: "sshd",
enabled: true,
running: true,
idle: false,
backend: "pyinotify",
log_paths: ["/var/log/auth.log"],
fail_regex: ["^\\[.*\\]\\s.*Failed password"],
fail_regex: ["^\[.*\]\s.*Failed password"],
ignore_regex: [],
ignore_ips: [],
date_pattern: "%b %d %H:%M:%S",
log_encoding: "UTF-8",
actions: [],
@@ -87,13 +89,13 @@ describe("useJailCommands — write operations", () => {
beforeEach(() => {
vi.clearAllMocks();
vi.mocked(jailsApi.startJail).mockResolvedValue({ message: "ok", jail: "sshd" });
vi.mocked(jailsApi.stopJail).mockResolvedValue({ message: "ok", jail: "sshd" });
vi.mocked(jailsApi.reloadJail).mockResolvedValue({ message: "ok", jail: "sshd" });
vi.mocked(jailsApi.setJailIdle).mockResolvedValue({ message: "ok", jail: "sshd" });
vi.mocked(jailsApi.addIgnoreIp).mockResolvedValue({ message: "ok", jail: "sshd" });
vi.mocked(jailsApi.delIgnoreIp).mockResolvedValue({ message: "ok", jail: "sshd" });
vi.mocked(jailsApi.toggleIgnoreSelf).mockResolvedValue({ message: "ok", jail: "sshd" });
vi.mocked(jailsApi.startJail).mockResolvedValue({ message: "ok", jail: "sshd", success: true });
vi.mocked(jailsApi.stopJail).mockResolvedValue({ message: "ok", jail: "sshd", success: true });
vi.mocked(jailsApi.reloadJail).mockResolvedValue({ message: "ok", jail: "sshd", success: true });
vi.mocked(jailsApi.setJailIdle).mockResolvedValue({ message: "ok", jail: "sshd", success: true });
vi.mocked(jailsApi.addIgnoreIp).mockResolvedValue({ message: "ok", jail: "sshd", success: true });
vi.mocked(jailsApi.delIgnoreIp).mockResolvedValue({ message: "ok", jail: "sshd", success: true });
vi.mocked(jailsApi.toggleIgnoreSelf).mockResolvedValue({ message: "ok", jail: "sshd", success: true });
});
it("calls start() API and invokes onSuccess", async () => {