using OptionStudy.UnitApp.Next;

namespace OptionStudy.Next
{
    /// <summary>
    /// 内存 配置源
    /// </summary>
    public class MemoryConfigurationSourceTest : IDisposable
    {
        private readonly ITestOutputHelper testOutput;

        public MemoryConfigurationSourceTest(ITestOutputHelper testOutputHelper)
        {
            this.testOutput = testOutputHelper;
        }

        /// <summary>
        ///  使用内存配置源
        /// </summary>
        [Fact]
        public void Use_Test()
        {
            IDictionary<string, string?> memoryData = new Dictionary<string, string?>()
            {
                ["AppName"] = "MemoryAppName",
                ["AppVersion"] = "0.0.0.1",
                ["EMail:ReceiveAddress"] = "memory@163.com",
                ["EMail:Recipient"] = "memory",
            };

            var root = new ConfigurationBuilder().AddInMemoryCollection(memoryData).Build();
            var configOption = root.Get<AppOption>();

            //MemoryConfigurationProvider 可以执行添加、设置等操作
            var provider = root.Providers.First() as MemoryConfigurationProvider;
            provider?.Add("MyAdd", "MyValue");
            provider?.Set("AppVersion", "2.0.0.0");

            Assert.NotNull(configOption);
            Assert.Equal("memory", configOption.EMail?.Recipient);

            testOutput.WriteLine("使用 内存配置源!");
        }

        public void Dispose()
        {

        }
    }
}