/// <summary> /// Checks if city, state, and country match address /// </summary> /// <param name="stop"></param> /// <param name="address"></param> /// <returns></returns> private bool DoesAddressMatchResult(LoadStopData stop, GeocodeAddress address) { var isValid = false; if (address != null) { if (address.City != null && address.State != null && address.Country != null) { stop.Country = ConvertCountry(stop.Country); isValid = ConvertStringForComparison(address.City).Equals(ConvertStringForComparison(stop.City), StringComparison.OrdinalIgnoreCase) && ConvertStringForComparison(address.State).Equals(ConvertStringForComparison(stop.State), StringComparison.OrdinalIgnoreCase) && ConvertStringForComparison(address.Country).Equals(ConvertStringForComparison(stop.Country), StringComparison.OrdinalIgnoreCase); } if (isValid && !string.IsNullOrWhiteSpace(stop.Address1)) { isValid = ConvertStringForComparison(address.Address1) .Equals(ConvertStringForComparison(stop.Address1), StringComparison.OrdinalIgnoreCase); } if (isValid && !string.IsNullOrWhiteSpace(stop.PostalCode)) { isValid = ConvertStringForComparison(address.PostalCode) .Equals(ConvertStringForComparison(stop.PostalCode), StringComparison.OrdinalIgnoreCase); } } return(isValid); }
public virtual void ValidateStopContactData(LoadStopData stop, string urnPrefix, BaseServiceResponse response) { if (stop.Contacts == null) { return; } for (int i = 0; i < stop.Contacts.Count; i++) { var contactUrnPrefix = $"{urnPrefix}:{nameof(stop.Contacts)}:{i}"; var contact = stop.Contacts[i]; if (string.IsNullOrWhiteSpace(contact.FirstName)) { response.AddError($"{contactUrnPrefix}:{nameof(contact.FirstName)}", _messages.ContactFirstNameRequired); } if (string.IsNullOrWhiteSpace(contact.LastName)) { response.AddError($"{contactUrnPrefix}:{nameof(contact.LastName)}", _messages.ContactLastNameRequired); } var hasEmail = !string.IsNullOrWhiteSpace(contact.Email); var hasPhone = !string.IsNullOrWhiteSpace(contact.PhoneNumber); if (!hasEmail && !hasPhone) { response.AddError($"{contactUrnPrefix}:{nameof(contact.Email)}Or{nameof(contact.PhoneNumber)}", _messages.ContactEmailOrPhoneRequired); } } }
private GeocodeResponse GetGeocodeResponse(LoadStopData stop) { var url = BuildRequestUrl(stop.Address1, stop.City, stop.State, stop.Country, stop.PostalCode); var responseMessage = _client.GetAsync(url, default(CancellationToken)).Result; var responseString = responseMessage.Content.ReadAsStringAsync().Result; return(JsonConvert.DeserializeObject <GeocodeResponse>(responseString)); }
private void ValidateStopTimes(LoadStopData stop, bool manuallyCreated, DateTime lastPickupTime, string stopUrnPrefix, BaseServiceResponse response) { //Validate the broken out times if provided var separateDateTimeFieldsUsed = !string.IsNullOrWhiteSpace(stop.EarlyTime) || !string.IsNullOrWhiteSpace(stop.LateTime); if (!string.IsNullOrWhiteSpace(stop.EarlyTime) && !IsValidTime(stop.EarlyTime)) { response.AddError($"{stopUrnPrefix}:{nameof(stop.EarlyTime)}", _messages.InvalidTime); } if (!string.IsNullOrWhiteSpace(stop.LateTime) && !IsValidTime(stop.LateTime)) { response.AddError($"{stopUrnPrefix}:{nameof(stop.LateTime)}", _messages.InvalidTime); } if (stop.LateDtTm == DateTime.MinValue) { response.AddError($"{stopUrnPrefix}:{nameof(stop.LateDtTm)}", _messages.LateDtTmRequired); } else if (manuallyCreated) { if (stop.EarlyDtTm.HasValue) { if (stop.EarlyDtTm > stop.LateDtTm) { if (separateDateTimeFieldsUsed && stop.EarlyDtTm.Value.Date == stop.LateDtTm.Date) { response.AddError($"{stopUrnPrefix}:{nameof(stop.EarlyTime)}", _messages.EarlyDateTimeAfterLateDtTm); } else { response.AddError($"{stopUrnPrefix}:{nameof(stop.EarlyDtTm)}", _messages.EarlyDateTimeAfterLateDtTm); } } if (stop.EarlyDtTm < DateTime.Now) { response.AddError($"{stopUrnPrefix}:{nameof(stop.EarlyDtTm)}", _messages.EarlyDateTimeInPast); } } if (stop.LateDtTm < DateTime.Now) { response.AddError($"{stopUrnPrefix}:{nameof(stop.LateDtTm)}", _messages.LateDateTimeInPast); } if (stop.StopTypeId == (int)StopTypeEnum.Delivery) { if (stop.EarlyDtTm <= lastPickupTime) { response.AddError($"{stopUrnPrefix}:{nameof(stop.EarlyDtTm)}", _messages.DeliveryEarlyDateTimePriorToPickup); } if (stop.LateDtTm <= lastPickupTime) { response.AddError($"{stopUrnPrefix}:{nameof(stop.LateDtTm)}", _messages.DeliveryLateDateTimePriorToPickup); } } } }
public void CustomerSetToNotValidateAddresses_True() { CUSTOMER.ValidateAddresses = false; InitDb(); InitService(); var stop = new LoadStopData(); // Stop doesn't have to be valid; will default to true _svc.IsAddressValid(CUSTOMER_ID, stop).Should().BeTrue(); }
public void NoCustomer_True() { CUSTOMER.IdentUserId = default; InitDb(); InitService(); var stop = new LoadStopData(); // Stop doesn't have to be valid; will default to true _svc.IsAddressValid(CUSTOMER_ID, stop).Should().BeTrue(); }
public GeocodeAddress(LoadStopData stop) { if (!string.IsNullOrWhiteSpace(stop.Address1)) { StreetNumber = stop.Address1.Split(' ')[0]; Route = stop.Address1.Remove(0, StreetNumber.Length + 1); } City = stop.City; State = stop.State; PostalCode = stop.PostalCode; Country = stop.Country; }
public void EmptyStrings_False() { var stop = new LoadStopData { Address1 = string.Empty, City = string.Empty, State = string.Empty, Country = string.Empty, PostalCode = string.Empty }; _svc.IsAddressValid(CUSTOMER_ID, stop).Should().BeFalse(); }
public void NullValues_False() { var stop = new LoadStopData { Address1 = null, City = null, State = null, Country = null, PostalCode = null }; _svc.IsAddressValid(CUSTOMER_ID, stop).Should().BeFalse(); }
public void ValidAddresses_True(string streetNumber, string route, string city, string stateName, string stateAbbrev, string countryName, string countryCode, string postalCode) { MockHttpResponse(streetNumber, route, city, "", stateName, stateAbbrev, countryName, countryCode, postalCode); var stop = new LoadStopData { Address1 = $"{streetNumber} {route}".Trim(), City = city, State = stateAbbrev, Country = countryCode, PostalCode = postalCode }; _svc.IsAddressValid(CUSTOMER_ID, stop).Should().BeTrue(); }
public void EmptyStrings_NullValues() { var expected = new GeocodeAddress(item: null); var stop = new LoadStopData { Address1 = string.Empty, City = string.Empty, State = string.Empty, Country = string.Empty, PostalCode = string.Empty }; var actual = _svc.GetValidAddress(stop); actual.Should().BeEquivalentTo(expected); }
public bool IsAddressValid(Guid customerId, LoadStopData stop) { if (!_isValidationEnabled) { return(true); } var customer = _context.Customers.SingleOrDefault(x => x.IdentUserId == customerId); if (customer == null || !customer.ValidateAddresses) { return(true); } var response = GetGeocodeResponse(stop); var isValid = IsValid(stop, response); return(isValid); }
public GeocodeAddress GetValidAddress(LoadStopData stop) { var response = GetGeocodeResponse(stop); if (response?.Results != null) { foreach (var item in response.Results) { if (item?.AddressComponents != null) { var address = new GeocodeAddress(item); if (DoesAddressMatchResult(stop, address)) { return(address); } } } } return(new GeocodeAddress(response?.Results?.FirstOrDefault())); }
public void ValidAddress_MatchingGeocodeAddress(string streetNumber, string route, string city, string stateName, string stateAbbrev, string countryName, string countryCode, string postalCode) { MockHttpResponse(streetNumber, route, city, "", stateName, stateAbbrev, countryName, countryCode, postalCode); var stop = new LoadStopData { Address1 = $"{streetNumber} {route}".Trim(), City = city, State = stateAbbrev, Country = countryCode, PostalCode = postalCode }; var expected = new GeocodeAddress(stop) { StreetNumber = streetNumber ?? string.Empty, Route = route ?? string.Empty }; var actual = _svc.GetValidAddress(stop); actual.Should().BeEquivalentTo(expected); }
/// <summary> /// Checks if a response is valid /// </summary> /// <param name="stop"></param> /// <param name="response"></param> /// <returns></returns> private bool IsValid(LoadStopData stop, GeocodeResponse response) { var result = false; if (response?.Results != null) { foreach (var item in response.Results) { if (item?.AddressComponents != null) { var address = new GeocodeAddress(item); result = DoesAddressMatchResult(stop, address); if (result) { break; } } } } return(result); }
private string FormatAddress(LoadStopData stopData) { return($"{stopData.Address1}, {stopData.City}, {stopData.State} {stopData.PostalCode}"); }