コード例 #1
0
        public static int Run(string input)
        {
            var passports = new PassportParser().Parse(input);

            var validator = new PassportValidator();

            return(passports.Count(p => validator.Validate(p).IsValid));
        }
コード例 #2
0
        public void Validate_Valid_Passport_Returns_Validated_Results()
        {
            var mockMrzParse     = new Mock <IParseMrzLine2>();
            var mockMrzValidator = new Mock <IMrzValidator>();
            //We need to mock the IMapper, use the existing profile and pass this in
            var mockMapper = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile(new MappingProfile());
            });
            var mapper = mockMapper.CreateMapper();
            PassportValidator controller = new PassportValidator(mockMrzParse.Object, mockMrzValidator.Object, mapper);

            PassportInput passportInput = new PassportInput()
            {
                PassportNumber = "112256503",
                Nationality    = Nationality.GBR,
                DateOfBirth    = new DateTime(1989, 02, 12),
                Gender         = Gender.M,
                DateOfExpiry   = new DateTime(2020, 10, 01),
                MrzLine2       = "1122565035GBR8902122M2010016<<<<<<<<<<<<<<04"
            };
            MrzLine2 fakeMrzLine2 = new MrzLine2()
            {
                PassportNumber           = "112256503",
                CheckDigitPassportNumber = "5",
                Nationality           = Nationality.GBR,
                DateOfBirth           = new DateTime(1989, 02, 12),
                CheckDigitDateOfBirth = "2",
                Gender                   = Gender.M,
                DateOfExpiry             = new DateTime(2020, 10, 01),
                CheckDigitDateOfExpiry   = "6",
                PersonalNumber           = "",
                CheckDigitPersonalNumber = "0",
                CheckDigitOverall        = "4"
            };
            ValidationResults expectedValidationResults = new ValidationResults()
            {
                PassportNumberCheckDigit         = true,
                DateOfBirthCheckDigit            = true,
                PassportExpirationDateCheckDigit = true,
                PersonalNumberCheckDigit         = true,
                FinalCheckDigit          = true,
                GenderCrossCheck         = true,
                DateOfBirthCrossCheck    = true,
                ExpirationDateCrossCheck = true,
                NationalityCrossCheck    = true,
                PassportNumberCrossCheck = true
            };

            mockMrzParse.Setup(x => x.ParseMrzLine2FromString(It.IsAny <string>())).Returns(fakeMrzLine2);
            mockMrzValidator.Setup(x => x.ValidateMrzAndBaseData(It.IsAny <PassportBaseData>(), It.IsAny <MrzLine2>())).Returns(expectedValidationResults);

            ValidationResults returnedValidationResults = controller.Validate(passportInput).Value;

            Assert.Equal(expectedValidationResults, returnedValidationResults);
        }
コード例 #3
0
ファイル: Day04Tests.cs プロジェクト: Jaxwood/aoc2020
        public void Part1(string filepath, int expected)
        {
            var parser    = new Parser(filepath);
            var factory   = new PassportFactory();
            var passports = parser.Parse(factory).Where(p => p != null);
            var sut       = new PassportValidator(passports, new[] { new NotNull() });
            var actual    = sut.Validate();

            Assert.Equal(expected, actual);
        }
コード例 #4
0
        public void PassportValidator_Returns_Number_Of_Valid_Passports(bool useValidPassportData, int expectedResult)
        {
            // Arrange
            var passportData = useValidPassportData ? _validPassportData : _invalidPassportData;

            // Act
            var actualResult = PassportValidator.Validate(passportData);

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
コード例 #5
0
ファイル: Day04Tests.cs プロジェクト: Jaxwood/aoc2020
        public void Part2(string filepath, int expected)
        {
            var parser    = new Parser(filepath);
            var factory   = new PassportFactory();
            var passports = parser.Parse(factory).Where(p => p != null);
            var sut       = new PassportValidator(passports, new Rule[] {
                new InRangeRule(p => p.BirthYear, 1920, 2020),
                new InRangeRule(p => p.ExperationYear, 2020, 2030),
                new ContainsRule(p => p.EyeColor, new [] { "amb", "blu", "brn", "gry", "grn", "hzl", "oth" }),
                new RegexRule(p => p.HairColor, "^#[0-9a-f]{6}$"),
                new PredicateRule(
                    p => p.Unit == Unit.Metric,
                    new InRangeRule(p => p.Height, 150, 193),
                    new InRangeRule(p => p.Height, 59, 76)
                    ),
                new InRangeRule(p => p.IssueYear, 2010, 2020),
                new RegexRule(p => p.PassportId, "^[0-9]{9}$"),
            });
            var actual = sut.Validate();

            Assert.Equal(expected, actual);
        }
コード例 #6
0
 public PassportValidatorSteps WhenIValidateTheData()
 {
     this.actualResult = target.Validate(this.input);
     return(this);
 }