Skip to content

Commit f3318f0

Browse files
committed
[FIX] ui5Framework: Treat 'optional' dependencies of root project as non-optional
This is a v3 regression. Optional dependencies of the root project should always be enforced (just like development dependencies). Instead, ui5Framework would correctly install them, but then declared the dependency in the graph as 'optional'. Which meant the dependency would only be enforced if another dependency would define a non-optional dependency to it. BCP: 2380060321
1 parent f5c9a47 commit f3318f0

File tree

3 files changed

+71
-13
lines changed

3 files changed

+71
-13
lines changed

lib/graph/helpers/ui5Framework.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ const utils = {
180180
`add the attribute "allowSapInternal: true" to its metadata configuration`);
181181
}
182182
}
183-
if (dependency.optional) {
183+
if (!isRoot && dependency.optional) {
184184
if (projectGraph.getProject(dependency.name)) {
185185
projectGraph.declareOptionalDependency(project.getName(), dependency.name);
186186
}

test/lib/graph/helpers/ui5Framework.integration.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,8 +503,8 @@ function defineTest(testName, {
503503
"test-dependency",
504504
"test-dependency-no-framework",
505505
"sap.ui.lib1",
506-
"sap.ui.lib8",
507506
"sap.ui.lib4",
507+
"sap.ui.lib8",
508508
], `Non-framework dependency has correct dependencies`);
509509

510510
t.deepEqual(projectGraph.getDependencies("test-dependency"), [

test/lib/graph/helpers/ui5Framework.js

Lines changed: 69 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,23 @@ test.serial("enrichProjectGraph should resolve framework project with version an
540540
}]
541541
}
542542
}
543+
}, {
544+
id: "@openui5/lib1",
545+
version: "1.2.3",
546+
path: libraryEPath,
547+
configuration: {
548+
specVersion: "2.0",
549+
type: "library",
550+
metadata: {
551+
name: "lib1"
552+
},
553+
framework: {
554+
name: "OpenUI5",
555+
libraries: [{
556+
name: "lib3"
557+
}]
558+
}
559+
}
543560
}]
544561
};
545562
const referencedLibraries = ["lib1"];
@@ -562,7 +579,7 @@ test.serial("enrichProjectGraph should resolve framework project with version an
562579
const projectGraph = await projectGraphBuilder(provider);
563580

564581
await ui5Framework.enrichProjectGraph(projectGraph);
565-
t.is(projectGraph.getSize(), 2, "Project graph should remain unchanged");
582+
t.is(projectGraph.getSize(), 3, "Project graph should remain unchanged");
566583

567584
t.is(getFrameworkLibrariesFromGraphStub.callCount, 1, "getFrameworkLibrariesFromGrap should be called once");
568585
t.is(Sapui5ResolverStub.callCount, 1, "Sapui5Resolver#constructor should be called once");
@@ -620,6 +637,23 @@ test.serial("enrichProjectGraph should resolve framework project " +
620637
}]
621638
}
622639
}
640+
}, {
641+
id: "@openui5/lib1",
642+
version: "1.2.3",
643+
path: libraryEPath,
644+
configuration: {
645+
specVersion: "2.0",
646+
type: "library",
647+
metadata: {
648+
name: "lib1"
649+
},
650+
framework: {
651+
name: "OpenUI5",
652+
libraries: [{
653+
name: "lib3"
654+
}]
655+
}
656+
}
623657
}]
624658
};
625659
const referencedLibraries = ["lib1"];
@@ -643,7 +677,7 @@ test.serial("enrichProjectGraph should resolve framework project " +
643677
const projectGraph = await projectGraphBuilder(provider);
644678

645679
await ui5Framework.enrichProjectGraph(projectGraph, {versionOverride: "3.4.5"});
646-
t.is(projectGraph.getSize(), 2, "Project graph should remain unchanged");
680+
t.is(projectGraph.getSize(), 3, "Project graph should remain unchanged");
647681

648682
t.is(Sapui5ResolverStub.callCount, 1, "Sapui5Resolver#constructor should be called once");
649683
t.is(getFrameworkLibrariesFromGraphStub.callCount, 1, "getFrameworkLibrariesFromGraph should be called once");
@@ -1210,6 +1244,9 @@ test.serial("utils.declareFrameworkDependenciesInGraph", async (t) => {
12101244
}, {
12111245
name: "lib3",
12121246
development: true
1247+
}, {
1248+
name: "lib5",
1249+
optional: true
12131250
}]
12141251
}
12151252
},
@@ -1236,6 +1273,9 @@ test.serial("utils.declareFrameworkDependenciesInGraph", async (t) => {
12361273
}, {
12371274
name: "lib5",
12381275
optional: true
1276+
}, {
1277+
name: "lib6",
1278+
optional: true
12391279
}]
12401280
}
12411281
},
@@ -1295,6 +1335,17 @@ test.serial("utils.declareFrameworkDependenciesInGraph", async (t) => {
12951335
deprecated: true
12961336
}
12971337
}
1338+
}, {
1339+
id: "@openui5/lib5",
1340+
version: "1.2.3",
1341+
path: libraryEPath,
1342+
configuration: {
1343+
specVersion: "2.0",
1344+
type: "library",
1345+
metadata: {
1346+
name: "lib5"
1347+
}
1348+
}
12981349
}]
12991350
};
13001351
const projectGraph = await projectGraphBuilder(new DependencyTreeProvider({
@@ -1310,21 +1361,25 @@ test.serial("utils.declareFrameworkDependenciesInGraph", async (t) => {
13101361
const resolveOptionalDependenciesSpy = sinon.spy(projectGraph, "resolveOptionalDependencies");
13111362
await utils.declareFrameworkDependenciesInGraph(projectGraph);
13121363

1313-
t.is(declareDependencySpy.callCount, 5, "declareDependency got called five times");
1364+
t.is(declareDependencySpy.callCount, 7, "declareDependency got called seven times");
13141365
t.deepEqual(declareDependencySpy.getCall(0).args, ["application.a", "lib1"],
13151366
"declareDependency got called with correct arguments on first call");
1316-
t.deepEqual(declareDependencySpy.getCall(1).args, ["application.a", "lib3"],
1367+
t.deepEqual(declareDependencySpy.getCall(1).args, ["application.a", "lib2"],
13171368
"declareDependency got called with correct arguments on second call");
1318-
t.deepEqual(declareDependencySpy.getCall(2).args, ["library.a", "lib2"],
1369+
t.deepEqual(declareDependencySpy.getCall(2).args, ["application.a", "lib3"],
13191370
"declareDependency got called with correct arguments on third call");
1320-
t.deepEqual(declareDependencySpy.getCall(3).args, ["application.a", "lib2"],
1371+
t.deepEqual(declareDependencySpy.getCall(3).args, ["application.a", "lib5"],
13211372
"declareDependency got called with correct arguments on fourth call");
1322-
t.deepEqual(declareDependencySpy.getCall(4).args, ["library.a", "lib3"],
1373+
t.deepEqual(declareDependencySpy.getCall(4).args, ["library.a", "lib2"],
13231374
"declareDependency got called with correct arguments on fifth call");
1375+
t.deepEqual(declareDependencySpy.getCall(5).args, ["library.a", "lib3"],
1376+
"declareDependency got called with correct arguments on sixth call");
1377+
t.deepEqual(declareDependencySpy.getCall(6).args, ["library.a", "lib5"],
1378+
"declareDependency got called with correct arguments on seventh call");
13241379
t.is(declareOptionalDependencySpy.callCount, 2, "declareOptionalDependency got called ");
1325-
t.deepEqual(declareOptionalDependencySpy.getCall(0).args, ["application.a", "lib2"],
1380+
t.deepEqual(declareOptionalDependencySpy.getCall(0).args, ["library.a", "lib3"],
13261381
"declareOptionalDependency got called with correct arguments on first call");
1327-
t.deepEqual(declareOptionalDependencySpy.getCall(1).args, ["library.a", "lib3"],
1382+
t.deepEqual(declareOptionalDependencySpy.getCall(1).args, ["library.a", "lib5"],
13281383
"declareOptionalDependency got called with correct arguments on second call");
13291384
t.is(resolveOptionalDependenciesSpy.callCount, 1,
13301385
"resolveOptionalDependenciesSpy got called once");
@@ -1343,13 +1398,15 @@ test.serial("utils.declareFrameworkDependenciesInGraph", async (t) => {
13431398
t.deepEqual(projectGraph.getDependencies("application.a"), [
13441399
"library.a",
13451400
"lib1",
1401+
"lib2",
13461402
"lib3",
1347-
"lib2"
1403+
"lib5"
13481404
], `Root project has correct dependencies`);
13491405

13501406
t.deepEqual(projectGraph.getDependencies("library.a"), [
13511407
"lib2",
1352-
"lib3"
1408+
"lib3",
1409+
"lib5"
13531410
], `Non-framework dependency has correct dependencies`);
13541411
});
13551412

@@ -1457,6 +1514,7 @@ test.serial("utils.declareFrameworkDependenciesInGraph: No deprecation warnings
14571514

14581515
t.deepEqual(projectGraph.getDependencies("testsuite"), [
14591516
"lib1",
1517+
"lib2",
14601518
"lib3"
14611519
], `Root project has correct dependencies`);
14621520
});

0 commit comments

Comments
 (0)