using Newtonsoft.Json.Linq; using SWP.Core.Configurations; using SWP.Core.Configurations.JsonConfigProvider; using SWP.Core.Configurations.SmartConfigProvider; using Shouldly; using SWP.Core.X.TDD; namespace SWP.Core.X.TDD.ConfigurationTests; [TestClass] public class JsonConfigurationProviderTests : TestFixture { private const string _testFolder = "ConfigurationTests/"; public JsonConfigurationProviderTests() : base(_testFolder) { } [TestMethod] public void GetSection_ShouldReturnCorrectFeatureSection() { // Arrange var expectedJObject = JObject.Parse(@"{ 'Enabled': true, 'RolloutPercentage': 25, 'AllowedUserGroups': ['beta'] }") as JToken; var builder = new ConfigurationBuilder() .AddJsonFile($"{_testFolder}appconfiguration.dev.json") .Build(); // Act var section = builder.GetSection("Feature"); // Assert section.ShouldNotBeNull(); section.Value.ShouldBeEquivalentTo(expectedJObject); } [TestMethod] public void Get_ShouldReturnCorrectFeatureObject() { // Arrange var expectedFeature = new Feature { Enabled = true, RolloutPercentage = 25, AllowedUserGroups = new List { "beta" } }; var builder = new ConfigurationBuilder() .AddJsonFile($"{_testFolder}appconfiguration.dev.json") .Build(); // Act var actualFeature = builder.GetSection("Feature").ToObject(); #pragma warning disable CS0618 // Type or member is obsolete var actualFeatureObsoleted = builder.GetSection("Feature").Get(); #pragma warning restore CS0618 // Type or member is obsolete // Assert actualFeature.ShouldBeEquivalentTo(expectedFeature); actualFeatureObsoleted.ShouldBeEquivalentTo(expectedFeature); } [TestMethod] public void Get_ShouldReturnCorrectValueAsString() { // Arrange var expectedFeature = "123"; var builder = new ConfigurationBuilder() .AddJsonFile($"{_testFolder}appconfiguration.dev.json") .Build(); // Act var actualFeature = builder.GetSection("AnotherSetting").Get("Thresholds:High"); // Assert actualFeature.ShouldBeEquivalentTo(expectedFeature); } /// /// Testing a stupid indexer for compability with Microsoft ConfigurationBuilder /// [TestMethod] public void Indexer_ShouldReturnValueAsString() { // Arrange var expected = "SHA256"; var builder = new ConfigurationBuilder() .AddJsonFile($"{_testFolder}appconfiguration.dev.json") .Build(); // Act var actual = builder["Authentication"]; // Assert actual.ShouldBeEquivalentTo(expected); } [TestMethod] public void Get_ShouldReturnCorrectValueAsInt() { // Arrange var expectedFeature = 22; var builder = new ConfigurationBuilder() .AddJsonFile($"{_testFolder}appconfiguration.dev.json") .Build(); // Act var actualFeature = builder.GetSection("AnotherSetting:Temperature").Get("Indoor:Max:Limit"); // Assert actualFeature.ShouldBe(expectedFeature); } [TestMethod] public void Get_ShouldReturnCorrectValueAsBool() { // Arrange var expectedFeature = true; var configRoot = new ConfigurationBuilder() .AddJsonFile($"{_testFolder}appconfiguration.dev.json") .AddSmartConfig() .Build(); // Act var actualFeature = configRoot.Get("Database:UseSSL"); // Assert actualFeature.ShouldBe(expectedFeature); } } internal class Feature { public bool Enabled { get; set; } public int RolloutPercentage { get; set; } public List AllowedUserGroups { get; set; } }