test(FN-000): include reverse dependents in changed tests

This commit is contained in:
Aron Prins
2026-05-07 18:35:32 +02:00
parent 10ebfea17f
commit aaa4c59c54
2 changed files with 26 additions and 1 deletions

View File

@@ -230,6 +230,23 @@ test("decideExecutionPlan: only package files changed → changed mode", () => {
assert.deepEqual(plan.packages, ["@fusion/engine"]);
});
test("decideExecutionPlan: expands changed packages with reverse dependents", () => {
const plan = decideExecutionPlan({
forceFullSuite: false,
comparisonBase: "abc123",
changedFiles: ["packages/core/src/store.ts"],
packageNameByDir: basePackageMap,
reverseDependencyMap: new Map([
["@fusion/core", ["@fusion/engine"]],
["@fusion/engine", ["@fusion/dashboard"]],
["@fusion/dashboard", []],
]),
});
assert.equal(plan.mode, "changed");
assert.deepEqual(plan.packages, ["@fusion/core", "@fusion/engine", "@fusion/dashboard"]);
});
test("decideExecutionPlan: no affected package resolved → full", () => {
const plan = decideExecutionPlan({
forceFullSuite: false,

View File

@@ -680,6 +680,7 @@ export function decideExecutionPlan({
comparisonBase,
changedFiles,
packageNameByDir,
reverseDependencyMap,
}) {
if (forceFullSuite) return { mode: "full", reason: "forced" };
if (!comparisonBase) return { mode: "full", reason: "missing-comparison-base" };
@@ -690,7 +691,12 @@ export function decideExecutionPlan({
const affectedPackages = resolveAffectedPackages(changedFiles, packageNameByDir);
if (!affectedPackages || affectedPackages.length === 0) return { mode: "full", reason: "no-affected-package" };
return { mode: "changed", packages: affectedPackages };
return {
mode: "changed",
packages: reverseDependencyMap
? expandWithReverseDependents(affectedPackages, reverseDependencyMap)
: affectedPackages,
};
}
export function main(argv = process.argv.slice(2)) {
@@ -722,12 +728,14 @@ export function main(argv = process.argv.slice(2)) {
const workspacePackages = listWorkspacePackageInfos();
const packageNameByDir = listWorkspacePackages(workspacePackages);
const packageDirByName = buildPackageDirByName(workspacePackages);
const reverseDependencyMap = buildReverseDependencyMap(workspacePackages);
const plan = decideExecutionPlan({
forceFullSuite,
comparisonBase,
changedFiles,
packageNameByDir,
reverseDependencyMap,
});
if (plan.mode === "full") {