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));
            }
        }
Ejemplo n.º 3
0
        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));
            }
        }