Files
rustfs-console/tests/lib/object-lock.test.js
T
2026-05-14 10:08:38 +08:00

93 lines
3.3 KiB
JavaScript

import test from "node:test"
import assert from "node:assert/strict"
import {
getDefaultObjectRetentionDate,
getMinimumObjectRetentionDate,
isObjectLegalHoldEnabled,
isObjectRetentionDateInFuture,
shouldShowObjectRetentionAction,
toObjectRetentionInputValue,
toObjectRetentionRequestValue,
} from "../../lib/object-lock.js"
test("isObjectLegalHoldEnabled reads legal hold from GetObjectLegalHold response", () => {
assert.equal(isObjectLegalHoldEnabled({ Status: "ON" }), true)
assert.equal(isObjectLegalHoldEnabled({ Status: "OFF" }), false)
assert.equal(isObjectLegalHoldEnabled({ LegalHold: { Status: "ON" } }), true)
assert.equal(isObjectLegalHoldEnabled({ LegalHold: { Status: "OFF" } }), false)
})
test("isObjectLegalHoldEnabled keeps HeadObject legal hold status as a fallback", () => {
assert.equal(isObjectLegalHoldEnabled({ ObjectLockLegalHoldStatus: "ON" }), true)
assert.equal(isObjectLegalHoldEnabled({ ObjectLockLegalHoldStatus: "OFF" }), false)
})
test("toObjectRetentionInputValue formats ISO retention dates for datetime-local inputs", () => {
const inputValue = toObjectRetentionInputValue("2026-05-08T09:30:00.000Z")
assert.equal(inputValue.length, 16)
assert.match(inputValue, /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/)
})
test("toObjectRetentionRequestValue converts datetime-local input values to ISO strings", () => {
const requestValue = toObjectRetentionRequestValue("2026-05-08T14:35")
assert.equal(typeof requestValue, "string")
assert.equal(toObjectRetentionInputValue(requestValue), "2026-05-08T14:35")
})
test("toObjectRetentionRequestValue omits empty or invalid dates", () => {
assert.equal(toObjectRetentionRequestValue(""), undefined)
assert.equal(toObjectRetentionRequestValue("not-a-date"), undefined)
})
test("getDefaultObjectRetentionDate chooses a future retention date", () => {
const now = new Date("2026-05-14T12:00:00.000Z")
const defaultDate = getDefaultObjectRetentionDate(now)
assert.equal(isObjectRetentionDateInFuture(defaultDate, now), true)
})
test("getMinimumObjectRetentionDate keeps the picker bound close to now", () => {
const now = new Date("2026-05-14T12:00:00.000Z")
const minimumDate = getMinimumObjectRetentionDate(now)
const tomorrowMorning = "2026-05-15T01:00:00.000Z"
assert.equal(isObjectRetentionDateInFuture(minimumDate, now), true)
assert.equal(isObjectRetentionDateInFuture(tomorrowMorning, minimumDate), true)
})
test("isObjectRetentionDateInFuture rejects empty, invalid, and past dates", () => {
const now = new Date("2026-05-14T12:00:00.000Z")
assert.equal(isObjectRetentionDateInFuture("", now), false)
assert.equal(isObjectRetentionDateInFuture("not-a-date", now), false)
assert.equal(isObjectRetentionDateInFuture("2026-05-14T11:59:00.000Z", now), false)
assert.equal(isObjectRetentionDateInFuture("2026-05-14T12:01:00.000Z", now), true)
})
test("shouldShowObjectRetentionAction requires retention permission and legal hold enabled", () => {
assert.equal(
shouldShowObjectRetentionAction({
canEditRetention: true,
legalHoldEnabled: true,
}),
true,
)
assert.equal(
shouldShowObjectRetentionAction({
canEditRetention: true,
legalHoldEnabled: false,
}),
false,
)
assert.equal(
shouldShowObjectRetentionAction({
canEditRetention: false,
legalHoldEnabled: true,
}),
false,
)
})