public static int Run(string input) { var passports = new PassportParser().Parse(input); var validator = new PassportValidator(); return(passports.Count(p => validator.Validate(p).IsValid)); }
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); }
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); }
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); }
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); }
public PassportValidatorSteps WhenIValidateTheData() { this.actualResult = target.Validate(this.input); return(this); }