zerobyte/app/server/utils/restic/helpers/__tests__/build-repo-url.test.ts
2026-02-26 18:48:17 +00:00

70 lines
2.1 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { buildRepoUrl } from "../build-repo-url";
describe("buildRepoUrl", () => {
describe("S3 backend", () => {
test.each([
{
label: "standard endpoint",
endpoint: "https://s3.amazonaws.com",
bucket: "my-bucket",
expected: "s3:https://s3.amazonaws.com/my-bucket",
},
{
label: "trailing slash on endpoint",
endpoint: "https://s3.xxxxxxxxx.net/",
bucket: "backup",
expected: "s3:https://s3.xxxxxxxxx.net/backup",
},
{
label: "trailing whitespace on endpoint",
endpoint: "https://s3.amazonaws.com/ ",
bucket: "my-bucket",
expected: "s3:https://s3.amazonaws.com/my-bucket",
},
{
label: "leading and trailing whitespace on endpoint",
endpoint: " https://s3.amazonaws.com/ ",
bucket: "my-bucket",
expected: "s3:https://s3.amazonaws.com/my-bucket",
},
])("$label → $expected", ({ endpoint, bucket, expected }) => {
expect(buildRepoUrl({ backend: "s3", endpoint, bucket, accessKeyId: "test", secretAccessKey: "test" })).toBe(
expected,
);
});
});
describe("R2 backend", () => {
test.each([
{
label: "standard endpoint (strips https:// protocol)",
endpoint: "https://myaccount.r2.cloudflarestorage.com",
bucket: "my-bucket",
expected: "s3:myaccount.r2.cloudflarestorage.com/my-bucket",
},
{
label: "trailing slash on endpoint",
endpoint: "https://myaccount.r2.cloudflarestorage.com/",
bucket: "backup",
expected: "s3:myaccount.r2.cloudflarestorage.com/backup",
},
{
label: "leading and trailing whitespace on endpoint",
endpoint: " https://myaccount.r2.cloudflarestorage.com/ ",
bucket: "my-bucket",
expected: "s3:myaccount.r2.cloudflarestorage.com/my-bucket",
},
])("$label → $expected", ({ endpoint, bucket, expected }) => {
expect(buildRepoUrl({ backend: "r2", endpoint, bucket, accessKeyId: "test", secretAccessKey: "test" })).toBe(
expected,
);
});
});
describe("other backends", () => {
test("builds local repository URL", () => {
expect(buildRepoUrl({ backend: "local", path: "/path/to/repo" })).toBe("/path/to/repo");
});
});
});