private async Task <Point> CoordinateForPostcode(string postcode) { var sanitizedPostcode = Location.SanitizePostcode(postcode); var coordinate = await GeocodePostcodeWithLocalLookup(sanitizedPostcode); if (coordinate != null) { return(coordinate); } coordinate = await _geocodeClient.GeocodePostcodeAsync(sanitizedPostcode); if (coordinate != null) { await CacheLocation(postcode, coordinate); } return(coordinate); }
public async void SyncAsync_FallbackToGeocodeClient_PopulatesTeachingEventBuildingCoordinatesAndCachesLocation() { await SeedMockTeachingEventBuildingsAsync(); SeedMockLocations(); _mockCrm.Setup(m => m.GetTeachingEvents(It.Is <DateTime>(d => CheckGetTeachingEventsAfterDate(d)))).Returns(MockTeachingEvents); var postcode = "TE7 9IN"; var coordinate = new Point(1, 2); var sanitizedPostcode = Location.SanitizePostcode(postcode); _mockGeocodeClient.Setup(m => m.GeocodePostcodeAsync(sanitizedPostcode)) .ReturnsAsync(coordinate); DbContext.Locations.FirstOrDefault(l => l.Postcode == sanitizedPostcode).Should().BeNull(); await _store.SyncAsync(); var teachingEvent = DbContext.TeachingEvents.Include(te => te.Building) .First(te => te.Building.AddressPostcode == postcode); teachingEvent.Building.Coordinate.Should().Be(coordinate); DbContext.Locations.FirstOrDefault(l => (l.Postcode == sanitizedPostcode) && (l.Source == Location.SourceType.Google)).Should().NotBeNull(); }