Пример #1
0
        /// <inheritdoc />
        public ValidationRuleResult Validate(ValidationRuleContext context)
        {
            IbanCountry?country = GetMatchingCountry(context.Value);

            if (country is null)
            {
                return(new UnknownCountryCodeResult());
            }

            context.Country = country;
            return(ValidationRuleResult.Success);
        }
Пример #2
0
        /// <inheritdoc />
        public ValidationRuleResult Validate(ValidationRuleContext context)
        {
            string iban = context.Value;

            // First 2 chars must be a-z or A-Z.
            if (iban.Length < 2 || !iban[0].IsAsciiLetter() || !iban[1].IsAsciiLetter())
            {
                return(new IllegalCountryCodeCharactersResult());
            }

            return(ValidationRuleResult.Success);
        }
Пример #3
0
        public void Given_country_info_is_null_when_validating_it_should_return_error()
        {
            var context = new ValidationRuleContext(string.Empty)
            {
                Country = null
            };

            // Act
            ValidationRuleResult actual = _sut.Validate(context);

            // Assert
            actual.Should().BeOfType <InvalidLengthResult>();
        }
Пример #4
0
        /// <inheritdoc />
        public ValidationRuleResult Validate(ValidationRuleContext context)
        {
            string iban   = context.Value;
            int    length = iban.Length;
            var    buffer = new char[length];

            // Reorder (first 4 chars at end).
            iban.CopyTo(4, buffer, 0, length - 4);
            iban.CopyTo(0, buffer, length - 4, 4);

            return(_checkDigitsCalculator.Compute(buffer) == ExpectedCheckDigit
                ? ValidationRuleResult.Success
                : new InvalidCheckDigitsResult());
        }
Пример #5
0
        /// <inheritdoc />
        public ValidationRuleResult Validate(ValidationRuleContext context)
        {
            string iban = context.Value;

            if (iban.Length < 4
                // 00 and 01 are invalid.
                || iban[2] == '0' && (iban[3] == '0' || iban[3] == '1')
                // 99 is invalid.
                || iban[2] == '9' && iban[3] == '9')
            {
                return(new IllegalCharactersResult());
            }

            return(ValidationRuleResult.Success);
        }
Пример #6
0
        /// <inheritdoc />
        public ValidationRuleResult Validate(ValidationRuleContext context)
        {
            if (context.Country is null)
            {
                return(new InvalidStructureResult());
            }

            IStructureValidator validator = _structureValidationFactory.CreateValidator(
                context.Country.TwoLetterISORegionName,
                context.Country.Iban.Structure
                );

            return(validator.Validate(context.Value)
                ? ValidationRuleResult.Success
                : new InvalidStructureResult());
        }
Пример #7
0
        public void Given_value_of_valid_length_when_validating_it_should_return_success()
        {
            string value   = new string('0', 10);
            var    context = new ValidationRuleContext(value)
            {
                Country = new IbanCountry("XX")
                {
                    Iban = { Length = 10 }
                }
            };

            // Act
            ValidationRuleResult actual = _sut.Validate(context);

            // Assert
            actual.Should().Be(ValidationRuleResult.Success);
        }
Пример #8
0
        public void Given_value_of_invalid_length_when_validating_it_should_return_error(int count)
        {
            string value   = new string('0', count);
            var    context = new ValidationRuleContext(value)
            {
                Country = new IbanCountry("XX")
                {
                    Iban = { Length = 10 }
                }
            };

            // Act
            ValidationRuleResult actual = _sut.Validate(context);

            // Assert
            actual.Should().BeOfType <InvalidLengthResult>();
        }
Пример #9
0
        /// <inheritdoc />
        public ValidationRuleResult Validate(ValidationRuleContext context)
        {
            string iban = context.Value;

            // ReSharper disable once LoopCanBeConvertedToQuery : justification -> faster
            // ReSharper disable once ForCanBeConvertedToForeach : justification -> faster
            for (int i = 0; i < iban.Length; i++)
            {
                char c = iban[i];
                // All chars must be 0-9, a-z or A-Z.
                if (!c.IsAlphaNumeric())
                {
                    return(new IllegalCharactersResult());
                }
            }

            return(ValidationRuleResult.Success);
        }
        public void Given_unknown_country_code_when_validating_it_should_return_error()
        {
            var context = new ValidationRuleContext("XX");
            var sut     = new IsValidCountryCodeRule(new IbanRegistry
            {
                Providers =
                {
                    new IbanRegistryListProvider(new IbanCountry[0])
                }
            });

            // Act
            ValidationRuleResult actual = sut.Validate(new ValidationRuleContext("XX"));

            // Assert
            actual.Should().BeOfType <UnknownCountryCodeResult>();
            context.Country.Should().BeNull();
        }
        public void Given_known_country_code_when_validating_it_should_return_success()
        {
            var context = new ValidationRuleContext("XX");
            var country = new IbanCountry("XX");
            var sut     = new IsValidCountryCodeRule(new IbanRegistry
            {
                Providers =
                {
                    new IbanRegistryListProvider(new[] { country })
                }
            });

            // Act
            ValidationRuleResult actual = sut.Validate(context);

            // Assert
            actual.Should().Be(ValidationRuleResult.Success);
            context.Country.Should().BeSameAs(country);
        }
Пример #12
0
 /// <inheritdoc />
 public ValidationRuleResult Validate(ValidationRuleContext context)
 {
     return(context.Country is { } && context.Value.Length == context.Country.Iban.Length
Пример #13
0
 /// <inheritdoc />
 public ValidationRuleResult Validate(ValidationRuleContext context)
 {
     return(context.Value.Length == 0
         ? new InvalidLengthResult()
         : ValidationRuleResult.Success);
 }