public async Task <IActionResult> FindAllProviders(ProviderProximitySearchParamViewModel viewModel) { if (!ModelState.IsValid || !await IsPostCodeValidAsync(viewModel)) { return(View(nameof(SearchPostcode), viewModel)); } return(RedirectToRoute("GetProviderProximityResults", new { searchCriteria = viewModel.Postcode })); }
public When_ProviderProximity_Controller_FindAllProviders_Is_Called_With_Unformatted_Postcode() { const string requestPostcode = "cV12 Wt"; var httpClient = new TestPostcodesIoHttpClient().Get(requestPostcode); var routes = new List <SelectListItem> { new SelectListItem { Text = "1", Value = "Route 1" }, new SelectListItem { Text = "2", Value = "Route 2" } }; var routeDictionary = new Dictionary <int, string> { { 1, "Route 1" }, { 2, "Route 2" } }; var locationService = new LocationService( new LocationApiClient(httpClient, new MatchingConfiguration { PostcodeRetrieverBaseUrl = "https://api.postcodes.io" })); var searchProvider = Substitute.For <ISearchProvider>(); var datetimeProvider = Substitute.For <IDateTimeProvider>(); var fileWriter = Substitute.For <IFileWriter <ProviderProximityReportDto> >(); var routePathService = Substitute.For <IRoutePathService>(); routePathService.GetRouteSelectListItemsAsync().Returns(routes); routePathService.GetRouteDictionaryAsync().Returns(routeDictionary); var providerProximityService = new ProviderProximityService(searchProvider, locationService, routePathService, fileWriter, datetimeProvider); var providerProximityController = new ProviderProximityController(routePathService, providerProximityService, locationService); const string postcode = requestPostcode; var viewModel = new ProviderProximitySearchParamViewModel { Postcode = postcode }; _result = providerProximityController.FindAllProviders(viewModel).GetAwaiter().GetResult(); }
private async Task <bool> IsPostCodeValidAsync(ProviderProximitySearchParamViewModel viewModel) { var result = true; var(isValid, formattedPostcode) = await _locationService.IsValidPostcodeAsync(viewModel.Postcode); if (string.IsNullOrWhiteSpace(viewModel.Postcode) || !isValid) { ModelState.AddModelError("Postcode", "You must enter a real postcode"); result = false; } else { viewModel.Postcode = formattedPostcode; } return(result); }
public When_ProviderProximity_Controller_FindAllProviders_Is_Called() { const string postcode = "cv1 2wt"; var locationService = Substitute.For <ILocationService>(); locationService.IsValidPostcodeAsync(postcode).Returns((true, postcode.ToUpper())); var routePathService = Substitute.For <IRoutePathService>(); var providerProximityService = Substitute.For <IProviderProximityService>(); var providerProximityController = new ProviderProximityController(routePathService, providerProximityService, locationService); var viewModel = new ProviderProximitySearchParamViewModel { Postcode = postcode }; _result = providerProximityController.FindAllProviders(viewModel).GetAwaiter().GetResult(); }
public When_ProviderProximity_Controller_FindAllProviders_Is_Called_For_Invalid_Postcode() { var locationService = Substitute.For <ILocationService>(); locationService.IsValidPostcodeAsync(Arg.Any <string>()).Returns((false, null)); var routePathService = Substitute.For <IRoutePathService>(); var providerProximityService = Substitute.For <IProviderProximityService>(); var providerProximityController = new ProviderProximityController(routePathService, providerProximityService, locationService); const string postcode = "XYZ A12"; var viewModel = new ProviderProximitySearchParamViewModel { Postcode = postcode }; _result = providerProximityController.FindAllProviders(viewModel).GetAwaiter().GetResult(); }