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 HttpResponseMessage Post([FromBody] PassportInput input) { try { var data = this.mapper.Map <PassportData>(input); var result = this.validator.Validate(data); var output = this.mapper.Map <ValidationOutput>(result); return(this.Request.CreateResponse(HttpStatusCode.OK, output)); } catch (Exception ex) when(ex is ArgumentNullException || ex is ArgumentException) { HttpError error = new HttpError("Invalid input!"); return(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, error)); } }
public ActionResult <ValidationResults> Validate([FromBody] PassportInput input) { //Map view model onto model PassportBaseData baseData = _mapper.Map <PassportBaseData>(input); try { //Get the Mrzline2 string into a manageable object MrzLine2 mrzLine2 = _parsemrzLine2.ParseMrzLine2FromString(input.MrzLine2); //Check all data on the mrzline2 and whether what the user entered matches the mrzline2 return(_mrzValidator.ValidateMrzAndBaseData(baseData, mrzLine2)); } catch (Exception e) { //Always return a bad status code with the exception to the view return(BadRequest(e)); } }