public void BuildsAValidProvider()
        {
            var configBuilder  = Substitute.For <IConfigurationBuilder>();
            var writer         = Substitute.For <IXmlConfigurationWriter>();
            var streamProvider = Substitute.For <IFileStreamProvider>();
            var source         = new WritableXmlConfigurationSource(writer, streamProvider);
            var provider       = source.Build(configBuilder);

            Assert.IsNotNull(provider);
            Assert.IsInstanceOfType(provider, typeof(WritableXmlConfigurationProvider));
        } /* End of Function - BuildsAValidProvider */
        public void CanSetKeyValue()
        {
            var expectedKey   = "testKey";
            var expectedValue = "testValue";
            var expectedPath  = "expectedPath";

            // Setup a fake writer
            var writer = Substitute.For <IXmlConfigurationWriter>();


            // Setup a pretend stream to hand back for the file path
            using var stream = new MemoryStream();
            var streamProvider = Substitute.For <IFileStreamProvider>();

            // Return our memory stream for the path we setup to expect
            streamProvider.GetWritableStream(Arg.Is(expectedPath)).Returns(stream);

            var source = new WritableXmlConfigurationSource(writer, streamProvider);

            // Set the source path to our expected path
            source.Path = expectedPath;

            // Setup a fake file info to use for returning the value
            var fileInfo = Substitute.For <IFileInfo>();

            fileInfo.PhysicalPath.Returns(expectedPath);

            // Setup a fake file provider
            var fileProvider = Substitute.For <IFileProvider>();

            // And set it on the source we are using.
            source.FileProvider = fileProvider;
            // When requested from the file provider for the file info,
            // return our fake file info.
            fileProvider.GetFileInfo(expectedPath).Returns(fileInfo);

            // Finally construct our provider
            var provider = new WritableXmlConfigurationProvider(source);

            // And perform the set action
            provider.Set(expectedKey, expectedValue);

            // Ensure our writer received a call to write to our memory stream
            writer.Received().Write(stream, Arg.Any <IDictionary <string, string> >());

            return;
        } /* End of Function - CanSetKeyValue */
        public void ThrowsForInvalidWriter()
        {
            var streamProvider = Substitute.For <IFileStreamProvider>();

            _ = new WritableXmlConfigurationSource(null, streamProvider);
        } /* End of Function - ThrowsForInvalidWriter */