public void SelectingYes_AndLeavingRestBlank_IsValidInDraftAndFullModes(ITravelOrVisitorDetails details)
        {
            // Arrange
            var validationResults = new List <ValidationResult>();

            // Act
            var isValid = Validator.TryValidateObject(details, new ValidationContext(details), validationResults, true);

            // Assert
            Assert.True(isValid, "Expected details to be valid");
        }
 public void ClearTravelOrVisitorFields(ITravelOrVisitorDetails travelOrVisitorDetails)
 {
     travelOrVisitorDetails.TotalNumberOfCountries = null;
     travelOrVisitorDetails.Country1            = null;
     travelOrVisitorDetails.Country1Id          = null;
     travelOrVisitorDetails.StayLengthInMonths1 = null;
     travelOrVisitorDetails.Country2            = null;
     travelOrVisitorDetails.Country2Id          = null;
     travelOrVisitorDetails.StayLengthInMonths2 = null;
     travelOrVisitorDetails.Country3            = null;
     travelOrVisitorDetails.Country3Id          = null;
     travelOrVisitorDetails.StayLengthInMonths3 = null;
 }
        public void ProvidingTotalNumberOfCountriesAlone_IsValid(ITravelOrVisitorDetails details)
        {
            // Arrange
            var validationResults = new List <ValidationResult>();

            details.TotalNumberOfCountries = 3;

            // Act
            var isValid = Validator.TryValidateObject(details, new ValidationContext(details), validationResults, true);

            // Assert
            Assert.True(isValid, "Expected details to be valid");
        }
        public void ProvidingCountry_ButNotTotalNumberOfCountries_IsInvalid(ITravelOrVisitorDetails details)
        {
            // Arrange
            var validationResults = new List <ValidationResult>();

            details.Country1Id = 1;

            // Act
            var isValid = Validator.TryValidateObject(details, new ValidationContext(details), validationResults, true);

            // Assert
            Assert.False(isValid, "Expected details to be invalid");
            Assert.Equal(ValidationMessages.TravelOrVisitTotalNumberOfCountriesRequired, validationResults.First().ErrorMessage);
        }
        public void TotalNumberOfCountriesIsLessThanInputCountries_IsInvalid(ITravelOrVisitorDetails details)
        {
            // Arrange
            var validationResults = new List <ValidationResult>();

            details.TotalNumberOfCountries = 1;
            details.Country1Id             = 1;
            details.Country2Id             = 2;

            // Act
            var isValid = Validator.TryValidateObject(details, new ValidationContext(details), validationResults, true);

            // Assert
            Assert.False(isValid, "Expected details to be invalid");
        }
        public void ProvidingDurationsWithoutCountries_IsNotValid(ITravelOrVisitorDetails details)
        {
            // Arrange
            var validationResults = new List <ValidationResult>();

            details.TotalNumberOfCountries = 3;
            details.StayLengthInMonths1    = 1;
            details.StayLengthInMonths2    = 2;
            details.StayLengthInMonths3    = 3;

            // Act
            var isValid = Validator.TryValidateObject(details, new ValidationContext(details), validationResults, true);

            // Assert
            Assert.False(isValid, "Expected details to be invalid");
            Assert.Equal(3, validationResults.Count);
            validationResults.ForEach(result =>
                                      Assert.Equal(ValidationMessages.TravelOrVisitDurationHasCountry, result.ErrorMessage));
        }
        public void SumOfDurationsIsOver24_IsInvalid(ITravelOrVisitorDetails details)
        {
            // Arrange
            var validationResults = new List <ValidationResult>();

            details.TotalNumberOfCountries = 3;
            details.Country1Id             = 1;
            details.StayLengthInMonths1    = 10;
            details.Country2Id             = 2;
            details.StayLengthInMonths2    = 10;
            details.Country3Id             = 3;
            details.StayLengthInMonths3    = 10;

            // Act
            var isValid = Validator.TryValidateObject(details, new ValidationContext(details), validationResults, true);

            // Assert
            Assert.False(isValid, "Expected details to be invalid");
        }
        private static void RemoveDuplicateCountries(ITravelOrVisitorDetails details)
        {
            if (details.Country1Id != null && details.Country1Id == details.Country2Id)
            {
                if (details.StayLengthInMonths1 != null && details.StayLengthInMonths2 != null)
                {
                    details.StayLengthInMonths1 = Math.Max(details.StayLengthInMonths1.Value,
                                                           details.StayLengthInMonths2.Value);
                }

                details.Country2Id          = null;
                details.StayLengthInMonths2 = null;
            }

            if (details.Country1Id != null && details.Country1Id == details.Country3Id)
            {
                if (details.StayLengthInMonths1 != null && details.StayLengthInMonths3 != null)
                {
                    details.StayLengthInMonths1 = Math.Max(details.StayLengthInMonths1.Value,
                                                           details.StayLengthInMonths3.Value);
                }

                details.Country3Id          = null;
                details.StayLengthInMonths3 = null;
            }

            if (details.Country2Id != null && details.Country2Id == details.Country3Id)
            {
                if (details.StayLengthInMonths2 != null && details.StayLengthInMonths3 != null)
                {
                    details.StayLengthInMonths2 = Math.Max(details.StayLengthInMonths2.Value,
                                                           details.StayLengthInMonths3.Value);
                }

                details.Country3Id          = null;
                details.StayLengthInMonths3 = null;
            }
        }