mirror of
https://github.com/morluto/rea
synced 2026-10-26 06:16:17 -04:00
test: classify filesystem application workflows as boundaries
This commit is contained in:
+58
@@ -0,0 +1,58 @@
|
||||
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("classifies overloaded open calls from lexical receiver facts", async () => {
|
||||
const inputPath = await createTestTempDirectory(
|
||||
"rea-js-open-classification-",
|
||||
);
|
||||
await writeFile(
|
||||
join(inputPath, "app.js"),
|
||||
`
|
||||
const popup = window;
|
||||
popup.open(url, "/preview");
|
||||
{
|
||||
const indexedDB = { open() {} };
|
||||
indexedDB.open("PROPFIND", "/dav");
|
||||
indexedDB.open(databaseName, "2");
|
||||
}
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open(method, "/api");
|
||||
parent.open("GET", "/parent-target");
|
||||
self.open("POST", "/self-target");
|
||||
document.open("GET", "/document-target");
|
||||
{
|
||||
const parent = new XMLHttpRequest();
|
||||
parent.open(method, "/shadowed-parent");
|
||||
}
|
||||
indexedDB.open("records", "2");
|
||||
`,
|
||||
);
|
||||
const result = await analyzeJavaScriptApplication({
|
||||
input_path: inputPath,
|
||||
format: "directory",
|
||||
});
|
||||
if (!result.ok)
|
||||
throw new Error(`Expected analysis success: ${result.error.message}`);
|
||||
const { graph } = javascriptApplicationAnalysisResultSchema.parse(
|
||||
result.value.normalized_result,
|
||||
);
|
||||
const endpoints = graph.nodes
|
||||
.filter(({ kind }) => kind === "endpoint")
|
||||
.flatMap(({ observations }) =>
|
||||
observations.map(({ properties }) => properties.value),
|
||||
)
|
||||
.sort();
|
||||
const storage = graph.nodes
|
||||
.filter(({ kind }) => kind === "storage")
|
||||
.flatMap(({ observations }) =>
|
||||
observations.map(({ properties }) => properties.storage_kind),
|
||||
);
|
||||
expect(endpoints).toEqual(["/api", "/dav", "/shadowed-parent"]);
|
||||
expect(storage).toEqual(["indexed-db"]);
|
||||
});
|
||||
Reference in New Issue
Block a user