refactor(document): extract file route builder and normalize query composition

This commit is contained in:
2026-03-25 11:31:39 +00:00
parent ad855fec88
commit 65003bb08c
6 changed files with 336 additions and 106 deletions
@@ -58,6 +58,32 @@ const loadRelayClientModule = (injected = {}) => {
return context.module.exports;
};
const loadFileRouteBuilderModule = (injected = {}) => {
const filePath = path.join(
rootDir,
"actions",
"clients",
"fileRouteBuilder.js"
);
let source = fs.readFileSync(filePath, "utf8");
source = source.replace(/import[\s\S]*?from\s+"[^"]+";\n?/g, "");
source = source.replace(/export const\s+/g, "const ");
source +=
"\nmodule.exports = { buildFileQuery, withBaseUrl, appendQuerySuffix };\n";
const context = {
module: { exports: {} },
exports: {},
require,
encodeURIComponent,
...injected
};
vm.runInNewContext(source, context, { filename: filePath });
return context.module.exports;
};
const tests = [];
const test = (name, fn) => tests.push({ name, fn });
@@ -150,6 +176,43 @@ test("clients/relayClient rethrows when browser hash call fails and no HASHKEY",
);
});
test("clients/fileRouteBuilder builds query with optional encoding and suffix helpers", async () => {
const mod = loadFileRouteBuilderModule();
const unencoded = mod.buildFileQuery("/api/file/getbloblist", {
container: "abc",
casefolderID: "x/y"
});
const encoded = mod.buildFileQuery(
"/api/file/deleteblob",
{
container: "abc",
casefolderID: "x/y",
blobname: "doc one.pdf"
},
{
encode: true
}
);
assert.strictEqual(
unencoded,
"/api/file/getbloblist?container=abc&casefolderID=x/y"
);
assert.strictEqual(
encoded,
"/api/file/deleteblob?container=abc&casefolderID=x%2Fy&blobname=doc%20one.pdf"
);
assert.strictEqual(
mod.withBaseUrl("http://example.local", unencoded),
"http://example.local/api/file/getbloblist?container=abc&casefolderID=x/y"
);
assert.strictEqual(
mod.appendQuerySuffix(unencoded, "&hash=123"),
"/api/file/getbloblist?container=abc&casefolderID=x/y&hash=123"
);
});
const run = async () => {
let passed = 0;