test: classify filesystem application workflows as boundaries

This commit is contained in:
morluto committed 2026-10-12 04:53:10 +08:00
1 parent 918713af37
commit 804c287e44
11 files changed
+71 -69

No files matched your search

@@ -0,0 +1,70 @@
import { writeFile } from "node:fs/promises";
import { join } from "node:path";
import { expect, it } from "vitest";
import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js";
import { javascriptApplicationAnalysisResultSchema } from "../../../../src/domain/javascript/javascriptApplicationAnalysis.js";
import { analyzeJavaScriptApplication } from "../../../support/javascriptApplicationScope.js";
it.each([
{
expression:
'flag ? require("./dependency.js").value : require("./dependency.js").value',
resolved: true,
},
{
expression:
'require("./dependency.js").value || require("./dependency.js").value',
resolved: true,
},
{
expression: 'flag ? require("./dependency.js").value : localValue',
resolved: false,
},
{
expression: 'require("./dependency.js").value ?? localValue',
resolved: false,
},
])(
"preserves export provenance for $expression",
async ({ expression, resolved }) => {
const root = await createTestTempDirectory("rea-js-module-provenance-");
await Promise.all([
writeFile(
join(root, "app.js"),
`const selected = ${expression};\nexport { selected };\n`,
),
writeFile(join(root, "dependency.js"), "exports.value = 1;\n"),
]);
const result = await analyzeJavaScriptApplication({
input_path: root,
format: "directory",
});
if (!result.ok) throw result.error;
const analysis = javascriptApplicationAnalysisResultSchema.parse(
JSON.parse(JSON.stringify(result.value.normalized_result)),
);
const exportImports = analysis.graph.edges.filter(
({ relation, properties }) =>
relation === "imports" && properties.exported_name === "selected",
);
if (!resolved) {
expect(exportImports).toEqual([]);
return;
}
expect(exportImports).toContainEqual(
expect.objectContaining({
relation: "imports",
properties: expect.objectContaining({
specifier: "./dependency.js",
imported_path: ["value"],
resolved_path: "dependency.js",
resolution_status: "resolved",
}),
}),
);
},
);