Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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();
        }
Esempio n. 9
0
        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));
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);