public async Task SetValidationServiceStatuses_ObjectIsPersisted()
        {
            // Arrange
            var data = new ValidationServiceConfigurationStatusesCollection()
            {
                new ValidationServiceConfigurationStatuses()
                {
                    AmendmentType = "a", ContractStatus = "b", ParentContractStatus = "c"
                }
            };

            var expected = JsonConvert.SerializeObject(data);

            Mock.Get(_mockReader)
            .Setup(m => m.SetConfigAsync <string>(_validationServiceStatuses, expected))
            .ReturnsAsync(expected);

            var config = new FeedProcessorConfiguration(_mockReader);

            // Act
            await config.SetValidationServiceStatuses(data);

            // Assert
            Mock.Get(_mockReader).VerifyAll();
        }
        public async Task ValidateContractStatusAsync_MissingConfiguration_UsesDefault()
        {
            // Arrange
            string parentStatus   = "Approved";
            string contractStatus = "Approved";
            string amendmentType  = "None";

            var expected = GetDefaultStatuses();
            ValidationServiceConfigurationStatusesCollection actual = null;

            ILoggerAdapter_Setup_LogInformation();
            ILoggerAdapter_Setup_LogWarningException();

            Mock.Get(_configuration)
            .SetupSequence(p => p.GetValidationServiceStatuses())
            .Throws <KeyNotFoundException>()
            .Returns(Task.FromResult(expected));

            Mock.Get(_configuration)
            .Setup(p => p.SetValidationServiceStatuses(It.IsAny <ValidationServiceConfigurationStatusesCollection>()))
            .Callback((ValidationServiceConfigurationStatusesCollection config) => { actual = config; })
            .Returns(Task.CompletedTask)
            .Verifiable();

            var service = GetValidationService();

            // Act
            var result = await service.ValidateContractStatusAsync(parentStatus, contractStatus, amendmentType);

            // Assert
            result.Should().BeTrue("Because the supplied values are in the default configuration.");
            actual.Should().BeEquivalentTo(expected, "Because the default configuration and test configuration match.");

            Verify_All();
        }
        public async Task GetValidationServiceStatuses_WhenKeyAndDataExist_ReturnsExpectedValue()
        {
            // Arrange
            var expected = new ValidationServiceConfigurationStatusesCollection()
            {
                new ValidationServiceConfigurationStatuses()
                {
                    AmendmentType = "a", ContractStatus = "b", ParentContractStatus = "c"
                }
            };

            var configString = JsonConvert.SerializeObject(expected);

            Mock.Get(_mockReader)
            .Setup(m => m.GetConfigAsync <string>(_validationServiceStatuses))
            .ReturnsAsync(configString);

            var config = new FeedProcessorConfiguration(_mockReader);

            // Act
            var result = await config.GetValidationServiceStatuses();

            // Assert
            result.Should().BeEquivalentTo(expected, "Because settings are saved as string but deserilised before being returned.");
            Mock.Get(_mockReader).VerifyAll();
        }
 /// <inheritdoc/>
 public async Task SetValidationServiceStatuses(ValidationServiceConfigurationStatusesCollection settings)
 {
     string data = JsonConvert.SerializeObject(settings);
     await _configReader.SetConfigAsync(_validationServiceStatuses, data);
 }