Skip to content

Commit 69dd2e6

Browse files
authored
feat: add environment variables testing for docker (#506)
* feat: add environment variables testing for docker * fix: Restore mistakenly deleted test [Trait] attribute
1 parent c799ede commit 69dd2e6

1 file changed

Lines changed: 154 additions & 4 deletions

File tree

test/OpenChat.PlaygroundApp.Tests/Options/DockerModelRunnerArgumentOptionsTests.cs

Lines changed: 154 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)