@@ -16,6 +16,10 @@ const libraryEPath = path.join(__dirname, "..", "..", "..", "fixtures", "library
16
16
const libraryFPath = path . join ( __dirname , ".." , ".." , ".." , "fixtures" , "library.f" ) ;
17
17
18
18
test . beforeEach ( async ( t ) => {
19
+ // Tests either rely on not having UI5_DATA_DIR defined, or explicitly define it
20
+ t . context . originalUi5DataDirEnv = process . env . UI5_DATA_DIR ;
21
+ delete process . env . UI5_DATA_DIR ;
22
+
19
23
const sinon = t . context . sinon = sinonGlobal . createSandbox ( ) ;
20
24
21
25
t . context . log = {
@@ -51,15 +55,30 @@ test.beforeEach(async (t) => {
51
55
t . context . Sapui5MavenSnapshotResolverResolveVersionStub = sinon . stub ( ) ;
52
56
t . context . Sapui5MavenSnapshotResolverStub . resolveVersion = t . context . Sapui5MavenSnapshotResolverResolveVersionStub ;
53
57
58
+ t . context . getUi5DataDirStub = sinon . stub ( ) . returns ( undefined ) ;
59
+
60
+ t . context . ConfigurationStub = {
61
+ fromFile : sinon . stub ( ) . resolves ( {
62
+ getUi5DataDir : t . context . getUi5DataDirStub
63
+ } )
64
+ } ;
65
+
54
66
t . context . ui5Framework = await esmock . p ( "../../../../lib/graph/helpers/ui5Framework.js" , {
55
67
"@ui5/logger" : ui5Logger ,
56
68
"../../../../lib/ui5Framework/Sapui5Resolver.js" : t . context . Sapui5ResolverStub ,
57
69
"../../../../lib/ui5Framework/Sapui5MavenSnapshotResolver.js" : t . context . Sapui5MavenSnapshotResolverStub ,
70
+ "../../../../lib/config/Configuration.js" : t . context . ConfigurationStub ,
58
71
} ) ;
59
72
t . context . utils = t . context . ui5Framework . _utils ;
60
73
} ) ;
61
74
62
75
test . afterEach . always ( ( t ) => {
76
+ // Reset UI5_DATA_DIR env
77
+ if ( typeof t . context . originalUi5DataDirEnv === "undefined" ) {
78
+ delete process . env . UI5_DATA_DIR ;
79
+ } else {
80
+ process . env . UI5_DATA_DIR = t . context . originalUi5DataDirEnv ;
81
+ }
63
82
t . context . sinon . restore ( ) ;
64
83
esmock . purge ( t . context . ui5Framework ) ;
65
84
} ) ;
@@ -1020,6 +1039,174 @@ test.serial("enrichProjectGraph should allow omitting framework version in case
1020
1039
t . is ( Sapui5ResolverStub . getCall ( 0 ) . args [ 0 ] . providedLibraryMetadata , workspaceFrameworkLibraryMetadata ) ;
1021
1040
} ) ;
1022
1041
1042
+ test . serial ( "enrichProjectGraph should use UI5 data dir from env var" , async ( t ) => {
1043
+ const { sinon, ui5Framework, utils, Sapui5ResolverInstallStub} = t . context ;
1044
+
1045
+ const dependencyTree = {
1046
+ id : "test1" ,
1047
+ version : "1.0.0" ,
1048
+ path : applicationAPath ,
1049
+ configuration : {
1050
+ specVersion : "2.0" ,
1051
+ type : "application" ,
1052
+ metadata : {
1053
+ name : "application.a"
1054
+ } ,
1055
+ framework : {
1056
+ name : "SAPUI5" ,
1057
+ version : "1.75.0"
1058
+ }
1059
+ }
1060
+ } ;
1061
+
1062
+ const referencedLibraries = [ "sap.ui.lib1" , "sap.ui.lib2" , "sap.ui.lib3" ] ;
1063
+ const libraryMetadata = { fake : "metadata" } ;
1064
+
1065
+ sinon . stub ( utils , "getFrameworkLibrariesFromGraph" )
1066
+ . resolves ( referencedLibraries ) ;
1067
+
1068
+ Sapui5ResolverInstallStub . resolves ( { libraryMetadata} ) ;
1069
+
1070
+
1071
+ const addProjectToGraphStub = sinon . stub ( ) ;
1072
+ sinon . stub ( utils , "ProjectProcessor" )
1073
+ . callsFake ( ( ) => {
1074
+ return {
1075
+ addProjectToGraph : addProjectToGraphStub
1076
+ } ;
1077
+ } ) ;
1078
+
1079
+ const provider = new DependencyTreeProvider ( { dependencyTree} ) ;
1080
+ const projectGraph = await projectGraphBuilder ( provider ) ;
1081
+
1082
+ process . env . UI5_DATA_DIR = "./ui5-data-dir-from-env-var" ;
1083
+
1084
+ const expectedUi5DataDir = path . resolve ( dependencyTree . path , "./ui5-data-dir-from-env-var" ) ;
1085
+
1086
+ await ui5Framework . enrichProjectGraph ( projectGraph ) ;
1087
+
1088
+ t . is ( t . context . Sapui5ResolverStub . callCount , 1 , "Sapui5Resolver#constructor should be called once" ) ;
1089
+ t . deepEqual ( t . context . Sapui5ResolverStub . getCall ( 0 ) . args , [ {
1090
+ cacheMode : undefined ,
1091
+ cwd : dependencyTree . path ,
1092
+ version : dependencyTree . configuration . framework . version ,
1093
+ ui5HomeDir : expectedUi5DataDir ,
1094
+ providedLibraryMetadata : undefined
1095
+ } ] , "Sapui5Resolver#constructor should be called with expected args" ) ;
1096
+ } ) ;
1097
+
1098
+ test . serial ( "enrichProjectGraph should use UI5 data dir from configuration" , async ( t ) => {
1099
+ const { sinon, ui5Framework, utils, Sapui5ResolverInstallStub, getUi5DataDirStub} = t . context ;
1100
+
1101
+ const dependencyTree = {
1102
+ id : "test1" ,
1103
+ version : "1.0.0" ,
1104
+ path : applicationAPath ,
1105
+ configuration : {
1106
+ specVersion : "2.0" ,
1107
+ type : "application" ,
1108
+ metadata : {
1109
+ name : "application.a"
1110
+ } ,
1111
+ framework : {
1112
+ name : "SAPUI5" ,
1113
+ version : "1.75.0"
1114
+ }
1115
+ }
1116
+ } ;
1117
+
1118
+ const referencedLibraries = [ "sap.ui.lib1" , "sap.ui.lib2" , "sap.ui.lib3" ] ;
1119
+ const libraryMetadata = { fake : "metadata" } ;
1120
+
1121
+ sinon . stub ( utils , "getFrameworkLibrariesFromGraph" )
1122
+ . resolves ( referencedLibraries ) ;
1123
+
1124
+ Sapui5ResolverInstallStub . resolves ( { libraryMetadata} ) ;
1125
+
1126
+
1127
+ const addProjectToGraphStub = sinon . stub ( ) ;
1128
+ sinon . stub ( utils , "ProjectProcessor" )
1129
+ . callsFake ( ( ) => {
1130
+ return {
1131
+ addProjectToGraph : addProjectToGraphStub
1132
+ } ;
1133
+ } ) ;
1134
+
1135
+ const provider = new DependencyTreeProvider ( { dependencyTree} ) ;
1136
+ const projectGraph = await projectGraphBuilder ( provider ) ;
1137
+
1138
+ getUi5DataDirStub . returns ( "./ui5-data-dir-from-config" ) ;
1139
+
1140
+ const expectedUi5DataDir = path . resolve ( dependencyTree . path , "./ui5-data-dir-from-config" ) ;
1141
+
1142
+ await ui5Framework . enrichProjectGraph ( projectGraph ) ;
1143
+
1144
+ t . is ( t . context . Sapui5ResolverStub . callCount , 1 , "Sapui5Resolver#constructor should be called once" ) ;
1145
+ t . deepEqual ( t . context . Sapui5ResolverStub . getCall ( 0 ) . args , [ {
1146
+ cacheMode : undefined ,
1147
+ cwd : dependencyTree . path ,
1148
+ version : dependencyTree . configuration . framework . version ,
1149
+ ui5HomeDir : expectedUi5DataDir ,
1150
+ providedLibraryMetadata : undefined
1151
+ } ] , "Sapui5Resolver#constructor should be called with expected args" ) ;
1152
+ } ) ;
1153
+
1154
+ test . serial ( "enrichProjectGraph should use absolute UI5 data dir from configuration" , async ( t ) => {
1155
+ const { sinon, ui5Framework, utils, Sapui5ResolverInstallStub, getUi5DataDirStub} = t . context ;
1156
+
1157
+ const dependencyTree = {
1158
+ id : "test1" ,
1159
+ version : "1.0.0" ,
1160
+ path : applicationAPath ,
1161
+ configuration : {
1162
+ specVersion : "2.0" ,
1163
+ type : "application" ,
1164
+ metadata : {
1165
+ name : "application.a"
1166
+ } ,
1167
+ framework : {
1168
+ name : "SAPUI5" ,
1169
+ version : "1.75.0"
1170
+ }
1171
+ }
1172
+ } ;
1173
+
1174
+ const referencedLibraries = [ "sap.ui.lib1" , "sap.ui.lib2" , "sap.ui.lib3" ] ;
1175
+ const libraryMetadata = { fake : "metadata" } ;
1176
+
1177
+ sinon . stub ( utils , "getFrameworkLibrariesFromGraph" )
1178
+ . resolves ( referencedLibraries ) ;
1179
+
1180
+ Sapui5ResolverInstallStub . resolves ( { libraryMetadata} ) ;
1181
+
1182
+
1183
+ const addProjectToGraphStub = sinon . stub ( ) ;
1184
+ sinon . stub ( utils , "ProjectProcessor" )
1185
+ . callsFake ( ( ) => {
1186
+ return {
1187
+ addProjectToGraph : addProjectToGraphStub
1188
+ } ;
1189
+ } ) ;
1190
+
1191
+ const provider = new DependencyTreeProvider ( { dependencyTree} ) ;
1192
+ const projectGraph = await projectGraphBuilder ( provider ) ;
1193
+
1194
+ getUi5DataDirStub . returns ( "/absolute-ui5-data-dir-from-config" ) ;
1195
+
1196
+ const expectedUi5DataDir = path . resolve ( "/absolute-ui5-data-dir-from-config" ) ;
1197
+
1198
+ await ui5Framework . enrichProjectGraph ( projectGraph ) ;
1199
+
1200
+ t . is ( t . context . Sapui5ResolverStub . callCount , 1 , "Sapui5Resolver#constructor should be called once" ) ;
1201
+ t . deepEqual ( t . context . Sapui5ResolverStub . getCall ( 0 ) . args , [ {
1202
+ cacheMode : undefined ,
1203
+ cwd : dependencyTree . path ,
1204
+ version : dependencyTree . configuration . framework . version ,
1205
+ ui5HomeDir : expectedUi5DataDir ,
1206
+ providedLibraryMetadata : undefined
1207
+ } ] , "Sapui5Resolver#constructor should be called with expected args" ) ;
1208
+ } ) ;
1209
+
1023
1210
test . serial ( "utils.shouldIncludeDependency" , ( t ) => {
1024
1211
const { utils} = t . context ;
1025
1212
// root project dependency should always be included
0 commit comments