38 lines
1.8 KiB
TypeScript
Vendored
38 lines
1.8 KiB
TypeScript
Vendored
import { describe, expect, it } from "vitest";
|
|
import { pluginFilesystemParentUri, pluginFilesystemRootUri, sortPluginFilesystemEntries, uniquePluginFilesystemEntries } from "./pluginFilesystem";
|
|
|
|
describe("plugin filesystem navigation", () => {
|
|
it("derives a default root from the first declared scheme", () => {
|
|
expect(pluginFilesystemRootUri({ schemes: ["sftp"] })).toBe("sftp:/");
|
|
expect(pluginFilesystemRootUri({ schemes: ["s3"], root_uri: "s3://bucket/" })).toBe("s3://bucket/");
|
|
});
|
|
|
|
it("keeps parent navigation inside the declared root", () => {
|
|
expect(pluginFilesystemParentUri("sftp:/home/user/files/", "sftp:/")).toBe("sftp:/home/user/");
|
|
expect(pluginFilesystemParentUri("s3://bucket/reports/2026/", "s3://bucket/")).toBe("s3://bucket/reports/");
|
|
expect(pluginFilesystemParentUri("s3://bucket/reports/", "s3://bucket/reports/")).toBeUndefined();
|
|
});
|
|
|
|
it("sorts directories before naturally ordered files", () => {
|
|
const sorted = sortPluginFilesystemEntries([
|
|
{ name: "file10.txt", uri: "sample:/file10.txt", kind: "file" },
|
|
{ name: "folder", uri: "sample:/folder/", kind: "directory" },
|
|
{ name: "file2.txt", uri: "sample:/file2.txt", kind: "file" },
|
|
]);
|
|
expect(sorted.map((entry) => entry.name)).toEqual(["folder", "file2.txt", "file10.txt"]);
|
|
});
|
|
|
|
it("removes duplicate entries by URI while preserving the latest metadata", () => {
|
|
expect(
|
|
uniquePluginFilesystemEntries([
|
|
{ name: "object.txt", uri: "s3:/object.txt", kind: "file", size: 1 },
|
|
{ name: "object.txt", uri: "s3:/object.txt", kind: "file", size: 2 },
|
|
{ name: "other.txt", uri: "s3:/other.txt", kind: "file" },
|
|
]),
|
|
).toEqual([
|
|
{ name: "object.txt", uri: "s3:/object.txt", kind: "file", size: 2 },
|
|
{ name: "other.txt", uri: "s3:/other.txt", kind: "file" },
|
|
]);
|
|
});
|
|
});
|