private ModulusWeightEntity MapToModulusWeightEntity(string[] array) { var entity = new ModulusWeightEntity { SortCodeRangeStart = int.Parse(array[0]), SortCodeRangeEnd = int.Parse(array[1]), ModCheck = array[2], WeightU = int.Parse(array[3]), WeightV = int.Parse(array[4]), WeightW = int.Parse(array[5]), WeightX = int.Parse(array[6]), WeightY = int.Parse(array[7]), WeightZ = int.Parse(array[8]), WeightA = int.Parse(array[9]), WeightB = int.Parse(array[10]), WeightC = int.Parse(array[11]), WeightD = int.Parse(array[12]), WeightE = int.Parse(array[13]), WeightF = int.Parse(array[14]), WeightG = int.Parse(array[15]), WeightH = int.Parse(array[16]) }; if (array.Length == 18) { entity.ExceptionCode = array[17]; } return(entity); }
private IModulusCheckStrategy CreateModulusCheckStrategy(bool isValidResult, ModulusWeightEntity checkEntity, string accountNumber = ValidAccountNumber) { var checkStrategy = Substitute.For <IModulusCheckStrategy>(); checkStrategy.IsApplicable(checkEntity.ModCheck).Returns(true); checkStrategy.IsValid(Arg.Any <IEnumerable <int> >(), accountNumber, checkEntity).Returns(isValidResult); return(checkStrategy); }
public void Insert(ModulusWeightEntity modulusWeight) { if (modulusWeight == null) { throw new ArgumentNullException(nameof(modulusWeight)); } _dbContext.ModulusWeights.Add(modulusWeight); }
public void IsValid_ThrowsArgumentExceptionAsPassedModulusWeightEntityIsForADifferentStrategy() { // Arrange var modulusWeight = new ModulusWeightEntity { ModCheck = "Fred" }; // Act Action act = () => _sut.IsValid(new List <int>(), "12345678", modulusWeight); // Assert act.Should().ThrowExactly <ArgumentException>().WithMessage($"Check applicable to provided { nameof(ModulusWeightEntity)} does not match DBLAL."); }
public void IsAccountNumberValid_ReturnsTrueAfterPassingOnlyRequiredCheck() { // Arrange var firstCheckEntity = new ModulusWeightEntity(); _modulusWeightRepository.GetForSortCode(ValidSortCodeAsInt).Returns(new List <ModulusWeightEntity> { firstCheckEntity }); _modulusCheckingService.IsValid(ValidSortCode, ValidAccountNumber, firstCheckEntity).Returns(true); // Act var result = _sut.IsValid(ValidSortCode, ValidAccountNumber); // Assert result.Should().BeTrue(); }
public void IsAccountNumberValid_ReturnsTrueAfterPassingOnlyFirstCheckAndIgnoredExceptionFound(string modulusWeightException) { // Arrange var firstCheckEntity = new ModulusWeightEntity { ExceptionCode = modulusWeightException }; _modulusWeightRepository.GetForSortCode(ValidSortCodeAsInt).Returns(new List <ModulusWeightEntity> { firstCheckEntity, new ModulusWeightEntity() }); _modulusCheckingService.IsValid(ValidSortCode, ValidAccountNumber, firstCheckEntity).Returns(true); // Act var result = _sut.IsValid(ValidSortCode, ValidAccountNumber); // Assert result.Should().BeTrue(); }
public void IsAccountNumberValid_ReturnsResultOfSecondCheckAfterPassingFirstCheck(bool secondCheckResult) { // Arrange var firstCheckEntity = new ModulusWeightEntity(); var secondCheckEntity = new ModulusWeightEntity(); _modulusWeightRepository.GetForSortCode(ValidSortCodeAsInt).Returns(new List <ModulusWeightEntity> { firstCheckEntity, secondCheckEntity }); _modulusCheckingService.IsValid(ValidSortCode, ValidAccountNumber, firstCheckEntity).Returns(true); _modulusCheckingService.IsValid(ValidSortCode, ValidAccountNumber, secondCheckEntity).Returns(secondCheckResult); // Act var result = _sut.IsValid(ValidSortCode, ValidAccountNumber); // Assert result.Should().Be(secondCheckResult); }
public void IsAccountNumberValid_ReturnsFalseAfterFailingFirstCheckAndNoIgnoredExceptionFound() { // Arrange var firstCheckEntity = new ModulusWeightEntity { ExceptionCode = string.Empty }; _modulusWeightRepository.GetForSortCode(ValidSortCodeAsInt).Returns(new List <ModulusWeightEntity> { firstCheckEntity }); _modulusCheckingService.IsValid(ValidSortCode, ValidAccountNumber, firstCheckEntity).Returns(false); // Act var result = _sut.IsValid(ValidSortCode, ValidAccountNumber); // Assert result.Should().BeFalse(); }
public void IsValid_ThrowsInvalidOperationExceptionAsMoreThanOneApplicableStrategyFound() { // Arrange var modulusWeight = new ModulusWeightEntity { ModCheck = ValidModulusMethodName }; var sut = new ModulusCheckingService(new List <IModulusCheckStrategy> { CreateModulusCheckStrategy(true, modulusWeight), CreateModulusCheckStrategy(true, modulusWeight) }, _modulusWeightEntityAdapter); // Act Action act = () => sut.IsValid(ValidSortCode, ValidAccountNumber, modulusWeight); // Assert act.Should().ThrowExactly <InvalidOperationException>().WithMessage("Sequence contains more than one matching element"); }
public bool IsValid(string sortCode, string accountNumber, ModulusWeightEntity modulusWeight) { if (!Regex.IsMatch(sortCode, ValidationRegex.SortCode)) { throw new ArgumentException(nameof(sortCode)); } if (!Regex.IsMatch(accountNumber, ValidationRegex.AccountNumber)) { throw new ArgumentException(nameof(accountNumber)); } if (modulusWeight == null) { throw new ArgumentNullException(nameof(modulusWeight)); } var resultsList = _modulusWeightEntityAdapter.Execute(sortCode + accountNumber, modulusWeight); return(_modulusCheckingStrategies.Single(s => s.IsApplicable(modulusWeight.ModCheck)).IsValid(resultsList, accountNumber, modulusWeight)); }
public IEnumerable <int> Execute(string combinedSortCodeAndAccountNumber, ModulusWeightEntity modulusWeight) { if (!Regex.IsMatch(combinedSortCodeAndAccountNumber, ValidationRegex.CombinedSortCodeAndAccountNumber)) { throw new ArgumentException(nameof(combinedSortCodeAndAccountNumber)); } if (modulusWeight == null) { throw new ArgumentNullException(nameof(modulusWeight)); } var modulusWeightsList = modulusWeight.GetType().GetProperties().Where(p => p.Name.StartsWith("Weight")).Select( p => { var value = p.GetValue(modulusWeight); return((int)value); }).ToList(); return(_modulusWeightMultiplierService.Execute(combinedSortCodeAndAccountNumber, modulusWeightsList)); }
public void IsAccountNumberValid_ReturnsResultOfSecondCheckAfterFailingFirstCheckAndIgnoredExceptionFound(bool secondCheckResult, string modulusWeightException) { // Arrange var firstCheckEntity = new ModulusWeightEntity { ExceptionCode = modulusWeightException }; var secondCheckEntity = new ModulusWeightEntity(); _modulusWeightRepository.GetForSortCode(ValidSortCodeAsInt).Returns(new List <ModulusWeightEntity> { firstCheckEntity, secondCheckEntity }); _modulusCheckingService.IsValid(ValidSortCode, ValidAccountNumber, firstCheckEntity).Returns(false); _modulusCheckingService.IsValid(ValidSortCode, ValidAccountNumber, secondCheckEntity).Returns(true); // Act var result = _sut.IsValid(ValidSortCode, ValidAccountNumber); // Assert result.Should().Be(secondCheckResult); }
public bool IsValid(IEnumerable <int> resultsList, string accountNumber, ModulusWeightEntity modulusWeight) { if (!Regex.IsMatch(accountNumber, ValidationRegex.AccountNumber)) { throw new ArgumentException(nameof(accountNumber)); } if (resultsList == null) { throw new ArgumentNullException(nameof(resultsList)); } if (modulusWeight == null) { throw new ArgumentNullException(nameof(modulusWeight)); } if (!IsApplicable(modulusWeight.ModCheck)) { throw new ArgumentException($"Check applicable to provided {nameof(ModulusWeightEntity)} does not match {GetStrategyMethodName()}."); } return(IsValidModulusCheck(resultsList.ToList(), accountNumber, modulusWeight)); }
public void IsValid_ExecutesSuccessfully(bool isValidResult) { // Arrange var modulusWeight = new ModulusWeightEntity { ModCheck = ValidModulusMethodName }; var modulusWeightsList = new List <int> { 1 }; _modulusWeightEntityAdapter.Execute(ValidSortCode + ValidAccountNumber, modulusWeight).Returns(modulusWeightsList); var sut = new ModulusCheckingService(new List <IModulusCheckStrategy> { CreateModulusCheckStrategy(isValidResult, modulusWeight), }, _modulusWeightEntityAdapter); // Act var result = sut.IsValid(ValidSortCode, ValidAccountNumber, modulusWeight); // Assert result.Should().Be(isValidResult); _modulusWeightEntityAdapter.Received(1).Execute(ValidSortCode + ValidAccountNumber, modulusWeight); }
protected override bool IsValidModulusCheck(List <int> values, string accountNumber, ModulusWeightEntity modulusWeight) { if (modulusWeight.ExceptionCode == "7" && accountNumber.Substring(6, 1) == "9") { for (var loopIndex = 0; loopIndex < 8; loopIndex++) { values[loopIndex] = 0; } } var remainder = values.Sum() % 11; if (modulusWeight.ExceptionCode == "4") { return(remainder == Convert.ToInt32(accountNumber.Substring(6, 2))); } return(remainder == 0); }
protected override bool IsValidModulusCheck(List <int> values, string accountNumber, ModulusWeightEntity modulusWeight) { var remainder = CalculateTotal(values) % 10; return(remainder == 0); }
protected abstract bool IsValidModulusCheck(List <int> values, string accountNumber, ModulusWeightEntity modulusWeight);