using System.Collections.Generic; using Moq; using Ocelot.Configuration; using Ocelot.Configuration.Creator; using Ocelot.Configuration.File; using Ocelot.Configuration.Repository; using Ocelot.Configuration.Setter; using Ocelot.Errors; using Ocelot.Responses; using Shouldly; using TestStack.BDDfy; using Xunit; namespace Ocelot.UnitTests.Configuration { public class FileConfigurationSetterTests { private FileConfiguration _fileConfiguration; private FileConfigurationSetter _configSetter; private Mock _configRepo; private Mock _configCreator; private Response _configuration; private object _result; public FileConfigurationSetterTests() { _configRepo = new Mock(); _configCreator = new Mock(); _configSetter = new FileConfigurationSetter(_configRepo.Object, _configCreator.Object); } [Fact] public void should_set_configuration() { var fileConfig = new FileConfiguration(); var config = new OcelotConfiguration(new List(), string.Empty); this.Given(x => GivenTheFollowingConfiguration(fileConfig)) .And(x => GivenTheCreatorReturns(new OkResponse(config))) .When(x => WhenISetTheConfiguration()) .Then(x => ThenTheConfigurationRepositoryIsCalledCorrectly()) .BDDfy(); } [Fact] public void should_return_error_if_unable_to_set_configuration() { var fileConfig = new FileConfiguration(); this.Given(x => GivenTheFollowingConfiguration(fileConfig)) .And(x => GivenTheCreatorReturns(new ErrorResponse(It.IsAny()))) .When(x => WhenISetTheConfiguration()) .And(x => ThenAnErrorResponseIsReturned()) .BDDfy(); } private void ThenAnErrorResponseIsReturned() { _result.ShouldBeOfType(); } private void GivenTheCreatorReturns(Response configuration) { _configuration = configuration; _configCreator .Setup(x => x.Create(_fileConfiguration)) .ReturnsAsync(_configuration); } private void GivenTheFollowingConfiguration(FileConfiguration fileConfiguration) { _fileConfiguration = fileConfiguration; } private void WhenISetTheConfiguration() { _result = _configSetter.Set(_fileConfiguration).Result; } private void ThenTheConfigurationRepositoryIsCalledCorrectly() { _configRepo .Verify(x => x.AddOrReplace(_configuration.Data), Times.Once); } } }