import assert from "node:assert/strict" import { test } from "node:test" import { backupSchedulePayload, backupStoragePayload } from "./backup-settings" const form = { enabled: false, frequency: "daily" as const, hour: "0", minute: "7", weekDay: 0, monthDay: 1, keepCount: "365", format: "rsc" as const } test("schedule preserves zero, arbitrary minute and explicit all-enabled semantics", () => { const result = backupSchedulePayload(form, ["1"], true) assert.equal(result.hour, 0); assert.equal(result.minute, 7); assert.equal(result.keepCount, 365); assert.deepEqual(result.serverIds, []) assert.deepEqual(backupSchedulePayload(form, ["1"], false).serverIds, ["1"]) }) test("blank, fractional, negative and out-of-range numbers are rejected without normalization", () => { for (const hour of ["", "1.5", "-1", "24", "1e1"]) assert.throws(() => backupSchedulePayload({ ...form, hour }, ["1"], false)) assert.throws(() => backupSchedulePayload({ ...form, keepCount: "366" }, ["1"], false)) assert.throws(() => backupSchedulePayload(form, [], false)) }) test("unsupported binary schedule requires an explicit format choice", () => { assert.throws(() => backupSchedulePayload({ ...form, enabled: true, format: "backup" }, ["1"], false)) assert.equal(backupSchedulePayload({ ...form, format: "backup" }, ["1"], false).format, "backup") }) const storageForm = { provider: "s3" as const, s3Endpoint: "", s3Region: "", s3Bucket: "bucket", s3Prefix: "", s3AccessKeyId: "key", s3SecretAccessKey: "", s3ForcePathStyle: false, keepLocalCopy: false, showPassword: false } test("S3 requires complete fields, endpoint protocol and a new or existing secret", () => { assert.throws(() => backupStoragePayload(storageForm)) assert.equal(backupStoragePayload(storageForm, true).s3SecretAccessKey, undefined) assert.equal(backupStoragePayload({ ...storageForm, s3SecretAccessKey: "new-test-secret" }).s3SecretAccessKey, "new-test-secret") for (const patch of [{ s3Bucket: " " }, { s3AccessKeyId: " " }, { s3Endpoint: "invalid" }, { s3Endpoint: "ftp://example.test" }, { s3SecretAccessKey: " " }]) assert.throws(() => backupStoragePayload({ ...storageForm, ...patch }, true)) })