Skip to content

Commit

Permalink
Load Enums By Name
Browse files Browse the repository at this point in the history
Resolve #2.
  • Loading branch information
lawrence-laz committed Oct 16, 2020
1 parent b2e2889 commit 818e996
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 1 deletion.
7 changes: 7 additions & 0 deletions Extensions.Configuration.Object.v3.ncrunchsolution
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<SolutionConfiguration>
<Settings>
<AllowParallelTestExecution>True</AllowParallelTestExecution>
<InstrumentationMode>Optimised</InstrumentationMode>
<SolutionConfigured>True</SolutionConfigured>
</Settings>
</SolutionConfiguration>
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ private void LoadRecursively(string currentKey, object section)
{
base.Set(currentKey, section.ToString());
}
else if (section is Enum) // Enum.
{
base.Set(currentKey, Enum.GetName(section.GetType(), section));
}
else if (section is IDictionary dictionarySection) // Dictionary.
{
foreach (DictionaryEntry item in dictionarySection)
Expand Down
45 changes: 45 additions & 0 deletions test/Extensionsions.Configuration.Object.UnitTests/EnumTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using AutoFixture.Xunit2;
using FluentAssertions;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Xunit;

namespace Extensions.Configuration.Object.UnitTests
{
public class EnumTest
{
public enum TestEnum
{
Undefined = 0,
Foo,
Bar
}

public class TestOptions
{
public static string Test => "Test";

public TestEnum[] Property { get; set; }
}

[Theory, AutoData]
public void AddObject_WithEnum_ShoulBeSameInOptions(TestOptions expected)
{
// Arrange
var configuration = new ConfigurationBuilder()
.AddObject(expected)
.Build();

var serviceProvider = new ServiceCollection()
.Configure<TestOptions>(configuration)
.BuildServiceProvider();

// Act
var actual = serviceProvider.GetRequiredService<IOptions<TestOptions>>().Value;

// Assert
actual.Should().BeEquivalentTo(expected);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using FluentAssertions;
using Microsoft.Extensions.Configuration;
using Xunit;

namespace Extensions.Configuration.Object.UnitTests
{
public class NullValueTest
{
class TestOptions
{
public object Actual { get; set; }
}

[Fact]
public void AddObject_WithFieldNullValue_ShouldReturnNull()
{
// Arrange
var configuration = new ConfigurationBuilder()
.AddObject(new TestOptions { Actual = null })
.Build();

// Act
var actual = configuration["Actual"];

// Assert
actual.Should().BeNull();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,23 @@ public void AddObject_WithNull_ShouldThrow()
sut.Invoking(x => x.AddObject(null))
.Should().ThrowExactly<ArgumentNullException>();
}

[Fact]
public void AddObject_OnNullConfigurationBuilder_ShouldThrow()
{
ConfigurationBuilder sut = null;

sut.Invoking(x => x.AddObject(default))
.Should().ThrowExactly<ArgumentNullException>();
}

[Fact]
public void Build_WithConfigurationObjectNotSet_ShouldThrow()
{
var sut = new ObjectConfigurationSource();

sut.Invoking(x => x.Build(default))
.Should().ThrowExactly<ArgumentNullException>();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
<ItemGroup>
<PackageReference Include="AutoFixture.Xunit2" Version="4.14.0" />
<PackageReference Include="FluentAssertions" Version="5.10.3" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.8" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.9" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.9" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.9" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
Expand Down

0 comments on commit 818e996

Please sign in to comment.