Files
rustfs-console/tests/lib/object-zip-download.test.js
T
2026-06-12 11:55:50 +08:00

60 lines
1.9 KiB
JavaScript

import test from "node:test"
import assert from "node:assert/strict"
import {
buildObjectZipDownloadPayload,
getObjectZipDownloadFilename,
normalizeObjectZipDownloadUrl,
} from "../../lib/object-zip-download.js"
test("buildObjectZipDownloadPayload separates object keys and prefixes", () => {
const payload = buildObjectZipDownloadPayload({
bucket: "photos",
basePrefix: "2026/events/",
rows: [
{ Key: "2026/events/a.txt", type: "object" },
{ Key: "2026/events/raw/", type: "prefix" },
],
})
assert.deepEqual(payload, {
bucket: "photos",
prefix: "2026/events/",
objects: ["2026/events/a.txt"],
prefixes: ["2026/events/raw/"],
filename: "events.zip",
})
})
test("getObjectZipDownloadFilename falls back to bucket name at root", () => {
assert.equal(getObjectZipDownloadFilename("photos", ""), "photos.zip")
})
test("getObjectZipDownloadFilename uses the last prefix segment", () => {
assert.equal(getObjectZipDownloadFilename("photos", "2026/events/"), "events.zip")
})
test("getObjectZipDownloadFilename sanitizes unsafe filename characters", () => {
assert.equal(getObjectZipDownloadFilename("photos", '2026/bad:name*?"<>|/'), "bad-name.zip")
})
test("getObjectZipDownloadFilename falls back when sanitized names are empty", () => {
assert.equal(getObjectZipDownloadFilename("...", ""), "download.zip")
})
test("normalizeObjectZipDownloadUrl keeps absolute URLs", () => {
assert.equal(
normalizeObjectZipDownloadUrl("https://example.com/download.zip", "https://console.example.com"),
"https://example.com/download.zip",
)
})
test("normalizeObjectZipDownloadUrl resolves relative URLs against the API base URL origin", () => {
assert.equal(
normalizeObjectZipDownloadUrl(
"/rustfs/admin/v3/object-zip-downloads/abc.zip?token=abc",
"https://api.example.com/rustfs/admin/v3",
),
"https://api.example.com/rustfs/admin/v3/object-zip-downloads/abc.zip?token=abc",
)
})