IKHSAN
ENID Baca dalam Bahasa Indonesia

homeio

Public

Forked from doctor-io/homeio

Branch
main
Latest commit
958d74616 October 2026

helpers.test.ts

Open raw
import { describe, expect, it } from "vitest";
import { formatStorageSize } from "@/modules/settings/components/panel/controls";
import {
  areNotificationThresholdsValid,
  areSecurityNumbersValid,
  isBackupRetentionCountValid,
  isBackupTimeValid,
  isValidHostname,
  normalizeHostnameDraft,
} from "@/modules/settings/components/panel/save-policies";

describe("settings-panel helpers", () => {
  it("formats storage sizes with KB, MB, GB, and TB boundaries", () => {
    expect(formatStorageSize(1024)).toBe("1 KB");
    expect(formatStorageSize(5 * 1024 ** 2)).toBe("5.0 MB");
    expect(formatStorageSize(3.5 * 1024 ** 3)).toBe("3.5 GB");
    expect(formatStorageSize(2 * 1024 ** 4)).toBe("2.0 TB");
    expect(formatStorageSize(null)).toBe("--");
  });

  it("normalizes and validates hostnames", () => {
    expect(normalizeHostnameDraft("  Home-Server  ")).toBe("home-server");
    expect(isValidHostname("home-server")).toBe(true);
    expect(isValidHostname("bad hostname")).toBe(false);
  });

  it("validates backup save policy primitives", () => {
    expect(isBackupTimeValid("03:00")).toBe(true);
    expect(isBackupTimeValid("3:00")).toBe(false);
    expect(isBackupRetentionCountValid(7)).toBe(true);
    expect(isBackupRetentionCountValid(0)).toBe(false);
  });

  it("validates security and notification numeric ranges", () => {
    expect(
      areSecurityNumbersValid({
        firewallEnabled: true,
        firewallIncomingPolicy: "deny",
        firewallOutgoingPolicy: "allow",
        fail2banEnabled: true,
        fail2banMaxRetries: "5",
        fail2banBanDurationSeconds: "3600",
      }),
    ).toBe(true);

    expect(
      areNotificationThresholdsValid({
        systemAlertsEnabled: true,
        updateNotificationsEnabled: true,
        backupReportsEnabled: true,
        securityEventsEnabled: false,
        cpuAlertThresholdPercent: "85",
        memoryAlertThresholdPercent: "85",
        diskAlertThresholdPercent: "90",
        temperatureAlertThresholdCelsius: "80",
      }),
    ).toBe(true);

    expect(
      areNotificationThresholdsValid({
        systemAlertsEnabled: true,
        updateNotificationsEnabled: true,
        backupReportsEnabled: true,
        securityEventsEnabled: false,
        cpuAlertThresholdPercent: "101",
        memoryAlertThresholdPercent: "85",
        diskAlertThresholdPercent: "90",
        temperatureAlertThresholdCelsius: "80",
      }),
    ).toBe(false);
  });
});
bytes
2,461
lines
73
Type
ts
Latest commit
16 October 2026