mirror of
https://github.com/rustfs/console.git
synced 2026-08-28 19:47:21 +08:00
93 lines
3.3 KiB
JavaScript
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,
|
|
)
|
|
})
|