using Core.Configurations.SmartConfig; using Core.Configurations; using FluentAssertions; using Newtonsoft.Json.Linq; using Core.Configurations.JsonConfigProvider; using Autofac; using System.Data; using Insight.Database; using Npgsql; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Tests.ConfigurationTests { [TestClass] public class JsonConfigurationProviderTests : TestFixture { [TestMethod] public void GetSection_ShouldReturnCorrectFeatureSection() { // Arrange var expectedJObject = JObject.Parse(@"{ 'Enabled': true, 'RolloutPercentage': 25, 'AllowedUserGroups': ['beta'] }") as JToken; var builder = new ConfigurationBuilder() .AddJsonFile("appconfiguration.dev.json") .Build(); // Act var section = builder.GetSection("Feature"); // Assert section.Should().NotBeNull(); section.Value.Should().BeEquivalentTo(expectedJObject); } [TestMethod] public void Get_ShouldReturnCorrectFeatureObject() { // Arrange var expectedFeature = new Feature { Enabled = true, RolloutPercentage = 25, AllowedUserGroups = new() { "beta" } }; var builder = new ConfigurationBuilder() .AddJsonFile("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.Should().BeEquivalentTo(expectedFeature); actualFeatureObsoleted.Should().BeEquivalentTo(expectedFeature); } [TestMethod] public void Get_ShouldReturnCorrectValueAsString() { // Arrange var expectedFeature = "123"; var builder = new ConfigurationBuilder() .AddJsonFile("appconfiguration.dev.json") .Build(); // Act var actualFeature = builder.GetSection("AnotherSetting").Get("Thresholds:High"); // Assert actualFeature.Should().BeEquivalentTo(expectedFeature); } /// /// Testing a stupid indexer for compability with Microsoft ConfigurationBuilder /// [TestMethod] public void Indexer_ShouldReturnValueAsString() { // Arrange var expected = "SHA256"; var builder = new ConfigurationBuilder() .AddJsonFile("appconfiguration.dev.json") .Build(); // Act var actual = builder["Authentication"]; // Assert actual.Should().BeEquivalentTo(expected); } [TestMethod] public void Get_ShouldReturnCorrectValueAsInt() { // Arrange var expectedFeature = 22; var builder = new ConfigurationBuilder() .AddJsonFile("appconfiguration.dev.json") .Build(); // Act var actualFeature = builder.GetSection("AnotherSetting:Temperature").Get("Indoor:Max:Limit"); // Assert actualFeature.Should().Be(expectedFeature); } [TestMethod] public void Get_ShouldReturnCorrectValueAsBool() { // Arrange var expectedFeature = true; var configRoot = new ConfigurationBuilder() .AddJsonFile("appconfiguration.dev.json") .AddSmartConfig() .Build(); // Act var actualFeature = configRoot.Get("Database:UseSSL"); // Assert actualFeature.Should().Be(expectedFeature); } } public class Feature { public bool Enabled { get; set; } public int RolloutPercentage { get; set; } public List AllowedUserGroups { get; set; } } }