@@ -16,9 +16,12 @@ public class DockerModelRunnerArgumentOptionsTests
1616
1717 private static IConfiguration BuildConfigWithDockerModelRunner (
1818 string ? configBaseUrl = BaseUrl ,
19- string ? configModel = Model
19+ string ? configModel = Model ,
20+ string ? envBaseUrl = null ,
21+ string ? envModel = null
2022 )
2123 {
24+ // Base configuration (lowest priority)
2225 var configDict = new Dictionary < string , string ? >
2326 {
2427 [ AppSettingConstants . ConnectorType ] = ConnectorType . DockerModelRunner . ToString ( ) ,
@@ -32,9 +35,28 @@ private static IConfiguration BuildConfigWithDockerModelRunner(
3235 {
3336 configDict [ ModelConfigKey ] = configModel ;
3437 }
38+ if ( string . IsNullOrWhiteSpace ( envBaseUrl ) == true &&
39+ string . IsNullOrWhiteSpace ( envModel ) == true )
40+ {
41+ return new ConfigurationBuilder ( )
42+ . AddInMemoryCollection ( configDict ! )
43+ . Build ( ) ;
44+ }
45+
46+ // Environment variables (medium priority)
47+ var envDict = new Dictionary < string , string ? > ( ) ;
48+ if ( string . IsNullOrWhiteSpace ( envBaseUrl ) == false )
49+ {
50+ envDict [ BaseUrlConfigKey ] = envBaseUrl ;
51+ }
52+ if ( string . IsNullOrWhiteSpace ( envModel ) == false )
53+ {
54+ envDict [ ModelConfigKey ] = envModel ;
55+ }
3556
3657 return new ConfigurationBuilder ( )
37- . AddInMemoryCollection ( configDict ! )
58+ . AddInMemoryCollection ( configDict ! ) // Base configuration (lowest priority)
59+ . AddInMemoryCollection ( envDict ! ) // Environment variables (medium priority)
3860 . Build ( ) ;
3961 }
4062
@@ -208,7 +230,8 @@ public void Given_ConfigValues_And_No_CLI_When_Parse_Invoked_Then_It_Should_Use_
208230
209231 [ Trait ( "Category" , "UnitTest" ) ]
210232 [ Theory ]
211- [ InlineData ( "http://config-dmr" , "config-model" , "http://cli-dmr" , "cli-model" ) ]
233+ [ InlineData ( "http://config-dmr" , "config-model" ,
234+ "http://cli-dmr" , "cli-model" ) ]
212235 public void Given_ConfigValues_And_CLI_When_Parse_Invoked_Then_It_Should_Use_CLI (
213236 string configBaseUrl , string configModel ,
214237 string cliBaseUrl , string cliModel )
@@ -270,7 +293,8 @@ public void Given_DockerModelRunner_With_KnownArgument_WithoutValue_When_Parse_I
270293 [ Trait ( "Category" , "UnitTest" ) ]
271294 [ Theory ]
272295 [ InlineData ( "http://cli-dmr" , "--unknown-flag" ) ]
273- public void Given_DockerModelRunner_With_Known_And_Unknown_Argument_When_Parse_Invoked_Then_Help_ShouldBe_True ( string cliBaseUrl , string argument )
296+ public void Given_DockerModelRunner_With_Known_And_Unknown_Argument_When_Parse_Invoked_Then_Help_ShouldBe_True (
297+ string cliBaseUrl , string argument )
274298 {
275299 // Arrange
276300 var config = BuildConfigWithDockerModelRunner ( ) ;
@@ -286,4 +310,130 @@ public void Given_DockerModelRunner_With_Known_And_Unknown_Argument_When_Parse_I
286310 // Assert
287311 settings . Help . ShouldBeTrue ( ) ;
288312 }
313+
314+ [ Trait ( "Category" , "UnitTest" ) ]
315+ [ Theory ]
316+ [ InlineData ( "http://cli-dmr" , "cli-model" ) ]
317+ public void Given_CLI_Only_When_Parse_Invoked_Then_Help_Should_Be_False ( string cliBaseUrl , string cliModel )
318+ {
319+ // Arrange
320+ var config = BuildConfigWithDockerModelRunner ( ) ;
321+ var args = new [ ]
322+ {
323+ ArgumentOptionConstants . DockerModelRunner . BaseUrl , cliBaseUrl ,
324+ ArgumentOptionConstants . DockerModelRunner . Model , cliModel
325+ } ;
326+
327+ // Act
328+ var settings = ArgumentOptions . Parse ( config , args ) ;
329+
330+ // Assert
331+ settings . Help . ShouldBeFalse ( ) ;
332+ }
333+
334+ [ Trait ( "Category" , "UnitTest" ) ]
335+ [ Theory ]
336+ [ InlineData ( "http://env-dmr" , "env-model" ) ]
337+ public void Given_EnvironmentVariables_And_No_Config_When_Parse_Invoked_Then_It_Should_Use_EnvironmentVariables (
338+ string envBaseUrl , string envModel )
339+ {
340+ // Arrange
341+ var config = BuildConfigWithDockerModelRunner (
342+ configBaseUrl : null , configModel : null ,
343+ envBaseUrl : envBaseUrl , envModel : envModel ) ;
344+ var args = Array . Empty < string > ( ) ;
345+
346+ // Act
347+ var settings = ArgumentOptions . Parse ( config , args ) ;
348+
349+ // Assert
350+ settings . DockerModelRunner . ShouldNotBeNull ( ) ;
351+ settings . DockerModelRunner . BaseUrl . ShouldBe ( envBaseUrl ) ;
352+ settings . DockerModelRunner . Model . ShouldBe ( envModel ) ;
353+ }
354+
355+ [ Trait ( "Category" , "UnitTest" ) ]
356+ [ Theory ]
357+ [ InlineData ( "http://config-dmr" , "config-model" , "http://env-dmr" , "env-model" ) ]
358+ public void Given_ConfigValues_And_EnvironmentVariables_When_Parse_Invoked_Then_It_Should_Use_EnvironmentVariables (
359+ string configBaseUrl , string configModel ,
360+ string envBaseUrl , string envModel )
361+ {
362+ // Arrange
363+ var config = BuildConfigWithDockerModelRunner ( configBaseUrl , configModel , envBaseUrl , envModel ) ;
364+ var args = Array . Empty < string > ( ) ;
365+
366+ // Act
367+ var settings = ArgumentOptions . Parse ( config , args ) ;
368+
369+ // Assert
370+ settings . DockerModelRunner . ShouldNotBeNull ( ) ;
371+ settings . DockerModelRunner . BaseUrl . ShouldBe ( envBaseUrl ) ;
372+ settings . DockerModelRunner . Model . ShouldBe ( envModel ) ;
373+ }
374+
375+ [ Trait ( "Category" , "UnitTest" ) ]
376+ [ Theory ]
377+ [ InlineData ( "http://config-dmr" , "config-model" , "http://env-dmr" , "env-model" , "http://cli-dmr" , "cli-model" ) ]
378+ public void Given_ConfigValues_And_EnvironmentVariables_And_CLI_When_Parse_Invoked_Then_It_Should_Use_CLI (
379+ string configBaseUrl , string configModel ,
380+ string envBaseUrl , string envModel ,
381+ string cliBaseUrl , string cliModel )
382+ {
383+ // Arrange
384+ var config = BuildConfigWithDockerModelRunner ( configBaseUrl , configModel , envBaseUrl , envModel ) ;
385+ var args = new [ ]
386+ {
387+ ArgumentOptionConstants . DockerModelRunner . BaseUrl , cliBaseUrl ,
388+ ArgumentOptionConstants . DockerModelRunner . Model , cliModel
389+ } ;
390+
391+ // Act
392+ var settings = ArgumentOptions . Parse ( config , args ) ;
393+
394+ // Assert
395+ settings . DockerModelRunner . ShouldNotBeNull ( ) ;
396+ settings . DockerModelRunner . BaseUrl . ShouldBe ( cliBaseUrl ) ;
397+ settings . DockerModelRunner . Model . ShouldBe ( cliModel ) ;
398+ }
399+
400+ [ Trait ( "Category" , "UnitTest" ) ]
401+ [ Theory ]
402+ [ InlineData ( "http://env-dmr" , null ) ]
403+ [ InlineData ( null , "env-model" ) ]
404+ public void Given_Partial_EnvironmentVariables_When_Parse_Invoked_Then_It_Should_Mix_Config_And_Environment (
405+ string ? envBaseUrl , string ? envModel )
406+ {
407+ // Arrange
408+ var config = BuildConfigWithDockerModelRunner (
409+ configBaseUrl : BaseUrl , configModel : Model ,
410+ envBaseUrl : envBaseUrl , envModel : envModel ) ;
411+ var args = Array . Empty < string > ( ) ;
412+
413+ // Act
414+ var settings = ArgumentOptions . Parse ( config , args ) ;
415+
416+ // Assert
417+ settings . DockerModelRunner . ShouldNotBeNull ( ) ;
418+ settings . DockerModelRunner . BaseUrl . ShouldBe ( envBaseUrl ?? BaseUrl ) ;
419+ settings . DockerModelRunner . Model . ShouldBe ( envModel ?? Model ) ;
420+ }
421+
422+ [ Trait ( "Category" , "UnitTest" ) ]
423+ [ Theory ]
424+ [ InlineData ( "http://env-dmr" , "env-model" ) ]
425+ public void Given_EnvironmentVariables_Only_When_Parse_Invoked_Then_Help_Should_Be_False ( string envBaseUrl , string envModel )
426+ {
427+ // Arrange
428+ var config = BuildConfigWithDockerModelRunner (
429+ configBaseUrl : null , configModel : null ,
430+ envBaseUrl : envBaseUrl , envModel : envModel ) ;
431+ var args = Array . Empty < string > ( ) ;
432+
433+ // Act
434+ var settings = ArgumentOptions . Parse ( config , args ) ;
435+
436+ // Assert
437+ settings . Help . ShouldBeFalse ( ) ;
438+ }
289439}
0 commit comments