117 lines
4.5 KiB
TypeScript
Vendored
117 lines
4.5 KiB
TypeScript
Vendored
import assert from "node:assert/strict";
|
|
import { test } from "vitest";
|
|
import * as gridFsBrowserModule from "../../apps/desktop/src/lib/document/gridFsBrowser.ts";
|
|
import {
|
|
buildGridFsFilesStructuredFilter,
|
|
currentGridFsBucketFilter,
|
|
currentGridFsBucketSort,
|
|
currentGridFsBucketSortDirection,
|
|
currentGridFsFileSortDirection,
|
|
gridFsFileFilterFieldOptions,
|
|
gridFsBucketSortInputForColumn,
|
|
gridFsFilesQueryPreview,
|
|
parseGridFsBucketSort,
|
|
} from "../../apps/desktop/src/lib/document/gridFsBrowser.ts";
|
|
|
|
test("builds a Mongo-style GridFS files query preview", () => {
|
|
assert.equal(
|
|
gridFsFilesQueryPreview({
|
|
bucket: "fs",
|
|
filterJson: '{"metadata.owner":"alice"}',
|
|
sortJson: '{"uploadDate":-1}',
|
|
}),
|
|
'db.getCollection("fs.files").find({"metadata.owner":"alice"}).sort({"uploadDate":-1})',
|
|
);
|
|
});
|
|
|
|
test("omits the sort stage when the GridFS file preview has no explicit sort", () => {
|
|
assert.equal(
|
|
gridFsFilesQueryPreview({
|
|
bucket: "fs",
|
|
filterJson: '{"filename":"report.zip"}',
|
|
}),
|
|
'db.getCollection("fs.files").find({"filename":"report.zip"})',
|
|
);
|
|
});
|
|
|
|
test("normalizes GridFS bucket filters by trimming blank input", () => {
|
|
assert.equal(currentGridFsBucketFilter(" nightly "), "nightly");
|
|
assert.equal(currentGridFsBucketFilter(" "), undefined);
|
|
});
|
|
|
|
test("normalizes GridFS manager sort directions for supported fields", () => {
|
|
assert.deepEqual(parseGridFsBucketSort('{"totalBytes":-1}'), { field: "totalBytes", direction: "desc" });
|
|
assert.deepEqual(parseGridFsBucketSort("{ fileCount: 1 }"), { field: "fileCount", direction: "asc" });
|
|
});
|
|
|
|
test("serializes GridFS manager sort input for supported columns", () => {
|
|
assert.equal(gridFsBucketSortInputForColumn("name", "asc"), '{"name":1}');
|
|
assert.equal(gridFsBucketSortInputForColumn("totalBytes", "desc"), '{"totalBytes":-1}');
|
|
assert.equal(gridFsBucketSortInputForColumn("fileCount", null), "");
|
|
});
|
|
|
|
test("rejects unsupported GridFS bucket sort fields", () => {
|
|
assert.throws(() => parseGridFsBucketSort('{"createdAt":-1}'), /Unsupported GridFS bucket sort field/);
|
|
});
|
|
|
|
test("returns canonical GridFS bucket sort JSON", () => {
|
|
assert.equal(currentGridFsBucketSort("{ totalBytes: -1 }"), '{"totalBytes":-1}');
|
|
assert.equal(currentGridFsBucketSort(" "), undefined);
|
|
});
|
|
|
|
test("exposes the available GridFS file filter fields for the compact builder", () => {
|
|
assert.deepEqual(gridFsFileFilterFieldOptions, ["_id", "filename", "contentType", "length", "chunkSize", "uploadDate", "md5"]);
|
|
});
|
|
|
|
test("exposes shared GridFS file field display metadata for filters and headers", () => {
|
|
assert.deepEqual((gridFsBrowserModule as any).gridFsFileFieldDisplayOptions, [
|
|
{ fieldName: "_id", label: "ID" },
|
|
{ fieldName: "filename", labelKey: "gridfsBrowser.name" },
|
|
{ fieldName: "contentType", labelKey: "gridfsBrowser.contentType" },
|
|
{ fieldName: "length", labelKey: "gridfsBrowser.totalSize" },
|
|
{ fieldName: "chunkSize", labelKey: "gridfsBrowser.chunkSize" },
|
|
{ fieldName: "uploadDate", labelKey: "gridfsBrowser.uploadDate" },
|
|
{ fieldName: "md5", label: "MD5" },
|
|
]);
|
|
});
|
|
|
|
test("combines GridFS file filter rules into a MongoDB structured filter", () => {
|
|
assert.deepEqual(
|
|
buildGridFsFilesStructuredFilter([
|
|
{
|
|
id: "rule-1",
|
|
fieldName: "filename",
|
|
mode: "equals",
|
|
rawValue: "report.zip",
|
|
conjunction: "AND",
|
|
},
|
|
{
|
|
id: "rule-2",
|
|
fieldName: "contentType",
|
|
mode: "like",
|
|
rawValue: "image",
|
|
conjunction: "AND",
|
|
},
|
|
]),
|
|
{
|
|
$and: [
|
|
{ filename: "report.zip" },
|
|
{ contentType: { $regex: "image", $options: "i" } },
|
|
],
|
|
},
|
|
);
|
|
});
|
|
|
|
test("derives explicit GridFS file sort directions for visible header indicators", () => {
|
|
assert.equal(currentGridFsFileSortDirection('{"filename":1}', "filename"), "asc");
|
|
assert.equal(currentGridFsFileSortDirection('{"filename":-1}', "filename"), "desc");
|
|
assert.equal(currentGridFsFileSortDirection('{"filename":1}', "uploadDate"), "none");
|
|
assert.equal(currentGridFsFileSortDirection('{"filename":1,"uploadDate":-1}', "filename"), "none");
|
|
});
|
|
|
|
test("derives explicit GridFS bucket sort directions for visible header indicators", () => {
|
|
assert.equal(currentGridFsBucketSortDirection('{"name":1}', "name"), "asc");
|
|
assert.equal(currentGridFsBucketSortDirection('{"totalBytes":-1}', "totalBytes"), "desc");
|
|
assert.equal(currentGridFsBucketSortDirection('{"name":1}', "fileCount"), "none");
|
|
});
|