@@ -70,4 +70,85 @@ public void WithNpmPackageInstallation_ExcludedFromPublishMode()
70
70
// Verify no wait annotations were added
71
71
Assert . False ( nodeResource . TryGetAnnotationsOfType < WaitAnnotation > ( out _ ) ) ;
72
72
}
73
+
74
+ [ Fact ]
75
+ public async Task WithNpmPackageInstallation_CanAcceptAdditionalArgs ( )
76
+ {
77
+ var builder = DistributedApplication . CreateBuilder ( ) ;
78
+
79
+ var nodeApp = builder . AddNpmApp ( "test-app" , "./test-app" ) ;
80
+ var nodeAppWithArgs = builder . AddNpmApp ( "test-app-args" , "./test-app-args" ) ;
81
+
82
+ // Test npm install with additional args
83
+ nodeApp . WithNpmPackageInstallation ( useCI : false , args : [ "--legacy-peer-deps" ] ) ;
84
+ nodeAppWithArgs . WithNpmPackageInstallation ( useCI : true , args : [ "--verbose" , "--no-optional" ] ) ;
85
+
86
+ using var app = builder . Build ( ) ;
87
+
88
+ var appModel = app . Services . GetRequiredService < DistributedApplicationModel > ( ) ;
89
+ var installerResources = appModel . Resources . OfType < NpmInstallerResource > ( ) . ToList ( ) ;
90
+
91
+ Assert . Equal ( 2 , installerResources . Count ) ;
92
+
93
+ var installResource = installerResources . Single ( r => r . Name == "test-app-npm-install" ) ;
94
+ var ciResource = installerResources . Single ( r => r . Name == "test-app-args-npm-install" ) ;
95
+
96
+ // Verify install command with additional args
97
+ var installArgs = await installResource . GetArgumentValuesAsync ( ) ;
98
+ Assert . Equal ( 2 , installArgs . Count ) ;
99
+ Assert . Equal ( "install" , installArgs [ 0 ] ) ;
100
+ Assert . Equal ( "--legacy-peer-deps" , installArgs [ 1 ] ) ;
101
+
102
+ // Verify ci command with additional args
103
+ var ciArgs = await ciResource . GetArgumentValuesAsync ( ) ;
104
+ Assert . Equal ( 3 , ciArgs . Count ) ;
105
+ Assert . Equal ( "ci" , ciArgs [ 0 ] ) ;
106
+ Assert . Equal ( "--verbose" , ciArgs [ 1 ] ) ;
107
+ Assert . Equal ( "--no-optional" , ciArgs [ 2 ] ) ;
108
+ }
109
+
110
+ [ Fact ]
111
+ public async Task WithYarnPackageInstallation_CanAcceptAdditionalArgs ( )
112
+ {
113
+ var builder = DistributedApplication . CreateBuilder ( ) ;
114
+
115
+ var nodeApp = builder . AddYarnApp ( "test-yarn-app" , "./test-yarn-app" ) ;
116
+ nodeApp . WithYarnPackageInstallation ( args : [ "--frozen-lockfile" , "--verbose" ] ) ;
117
+
118
+ using var app = builder . Build ( ) ;
119
+
120
+ var appModel = app . Services . GetRequiredService < DistributedApplicationModel > ( ) ;
121
+ var installerResources = appModel . Resources . OfType < YarnInstallerResource > ( ) . ToList ( ) ;
122
+
123
+ var installerResource = Assert . Single ( installerResources ) ;
124
+ Assert . Equal ( "test-yarn-app-yarn-install" , installerResource . Name ) ;
125
+
126
+ var args = await installerResource . GetArgumentValuesAsync ( ) ;
127
+ Assert . Equal ( 3 , args . Count ) ;
128
+ Assert . Equal ( "install" , args [ 0 ] ) ;
129
+ Assert . Equal ( "--frozen-lockfile" , args [ 1 ] ) ;
130
+ Assert . Equal ( "--verbose" , args [ 2 ] ) ;
131
+ }
132
+
133
+ [ Fact ]
134
+ public async Task WithPnpmPackageInstallation_CanAcceptAdditionalArgs ( )
135
+ {
136
+ var builder = DistributedApplication . CreateBuilder ( ) ;
137
+
138
+ var nodeApp = builder . AddPnpmApp ( "test-pnpm-app" , "./test-pnpm-app" ) ;
139
+ nodeApp . WithPnpmPackageInstallation ( args : [ "--frozen-lockfile" ] ) ;
140
+
141
+ using var app = builder . Build ( ) ;
142
+
143
+ var appModel = app . Services . GetRequiredService < DistributedApplicationModel > ( ) ;
144
+ var installerResources = appModel . Resources . OfType < PnpmInstallerResource > ( ) . ToList ( ) ;
145
+
146
+ var installerResource = Assert . Single ( installerResources ) ;
147
+ Assert . Equal ( "test-pnpm-app-pnpm-install" , installerResource . Name ) ;
148
+
149
+ var args = await installerResource . GetArgumentValuesAsync ( ) ;
150
+ Assert . Equal ( 2 , args . Count ) ;
151
+ Assert . Equal ( "install" , args [ 0 ] ) ;
152
+ Assert . Equal ( "--frozen-lockfile" , args [ 1 ] ) ;
153
+ }
73
154
}
0 commit comments