public async Task <IActionResult> CreateVenueAsync(AddProviderVenueViewModel viewModel) { if (!ModelState.IsValid) { return(View("AddProviderVenue", viewModel)); } var(isValid, formattedPostcode) = await _providerVenueService.IsValidPostcodeAsync(viewModel.Postcode); viewModel.Postcode = formattedPostcode; if (string.IsNullOrWhiteSpace(viewModel.Postcode) || !isValid) { ModelState.AddModelError("Postcode", "You must enter a real postcode"); return(View("AddProviderVenue", viewModel)); } var venue = await _providerVenueService.GetVenueAsync(viewModel.ProviderId, viewModel.Postcode); int venueId; if (venue != null) { venueId = venue.Id; } else { venueId = await _providerVenueService.CreateVenueAsync(viewModel); } return(RedirectToRoute("GetProviderVenueDetail", new { providerVenueId = venueId })); }
private async Task <ProviderVenueDetailViewModel> CreateOrUpdateProviderVenueAsync(ProviderVenueQualificationDto providerVenueQualification, int providerId) { if (string.IsNullOrEmpty(providerVenueQualification.VenuePostcode)) { return(null); } var venueViewModel = await _providerVenueService.GetVenueWithTrimmedPostcodeAsync(providerId, providerVenueQualification.VenuePostcode); if (venueViewModel == null) { var addProviderVenue = new AddProviderVenueViewModel { ProviderId = providerId, Postcode = providerVenueQualification.VenuePostcode, Source = Source }; var venueId = await _providerVenueService.CreateVenueAsync(addProviderVenue); Debug.WriteLine( $"Created venue with id {venueId} for provider {providerId} and postcode {providerVenueQualification.VenuePostcode}"); venueViewModel = await _providerVenueService.GetVenueAsync(venueId); } var providerVenueValidator = ValidateProviderVenueToUpdate(venueViewModel, providerVenueQualification); if (providerVenueValidator.IsUpdated) { await _providerVenueService.UpdateVenueAsync(providerVenueValidator.ProviderVenueDetailViewModel); } // Provider Venue Delete if (venueViewModel.IsRemoved != providerVenueQualification.VenueIsRemoved) { var removeProviderVenueViewModel = new RemoveProviderVenueViewModel { Postcode = venueViewModel.Postcode, ProviderId = venueViewModel.ProviderId, ProviderVenueId = venueViewModel.Id }; if (providerVenueQualification.VenueIsRemoved) { await _providerVenueService.UpdateVenueAsync(removeProviderVenueViewModel); } else { await _providerVenueService.UpdateVenueToNotRemovedAsync(removeProviderVenueViewModel); } } return(venueViewModel); }
private async Task GetGeoLocationDataAsync(AddProviderVenueViewModel viewModel, ProviderVenue providerVenue) { var geoLocationData = await _locationApiClient.GetGeoLocationDataAsync(viewModel.Postcode, true); providerVenue.Postcode = geoLocationData.Postcode; providerVenue.Latitude = geoLocationData.Latitude.ToDecimal(); providerVenue.Longitude = geoLocationData.Longitude.ToDecimal(); var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(4326); providerVenue.Location = geometryFactory.CreatePoint(new Coordinate(double.Parse(geoLocationData.Longitude), double.Parse(geoLocationData.Latitude))); }
public When_ProviderVenue_Add_Has_Invalid_Postcode() { _providerVenueService = Substitute.For <IProviderVenueService>(); _providerVenueService.IsValidPostcodeAsync("CV1 2WT").Returns((false, "CV1 2WT")); var providerVenueController = new ProviderVenueController(_providerVenueService); var viewModel = new AddProviderVenueViewModel { Postcode = "CV1 2WT" }; _result = providerVenueController.CreateVenueAsync(viewModel).GetAwaiter().GetResult(); }
public async Task <int> CreateVenueAsync(AddProviderVenueViewModel viewModel) { var providerVenue = _mapper.Map <ProviderVenue>(viewModel); await GetGeoLocationDataAsync(viewModel, providerVenue); await GetGoogleAddressDetailsAsync(providerVenue); if (string.IsNullOrWhiteSpace(providerVenue.Name)) { providerVenue.Name = providerVenue.Postcode; } return(await _providerVenueRepository.CreateAsync(providerVenue)); }
public When_ProviderVenueService_Is_Called_To_Create_Venue() { var httpContextAccessor = Substitute.For <IHttpContextAccessor>(); var config = new MapperConfiguration(c => { c.AddMaps(typeof(ProviderVenueMapper).Assembly); c.ConstructServicesUsing(type => type.Name.Contains("LoggedInUserEmailResolver") ? new LoggedInUserEmailResolver <AddProviderVenueViewModel, Domain.Models.ProviderVenue>(httpContextAccessor) : type.Name.Contains("LoggedInUserNameResolver") ? (object)new LoggedInUserNameResolver <AddProviderVenueViewModel, Domain.Models.ProviderVenue>(httpContextAccessor) : type.Name.Contains("UtcNowResolver") ? new UtcNowResolver <AddProviderVenueViewModel, Domain.Models.ProviderVenue>(new DateTimeProvider()) : null); }); var mapper = new Mapper(config); _providerVenueRepository = Substitute.For <IProviderVenueRepository>(); _providerVenueRepository.GetSingleOrDefaultAsync(Arg.Any <Expression <Func <Domain.Models.ProviderVenue, bool> > >()) .Returns(new Domain.Models.ProviderVenue()); _locationApiClient = Substitute.For <ILocationApiClient>(); _locationApiClient.GetGeoLocationDataAsync(UnFormattedPostcode, true).Returns(new PostcodeLookupResultDto { Postcode = FormattedPostcode, Longitude = "1.2", Latitude = "1.2" }); _googleMapApiClient = Substitute.For <IGoogleMapApiClient>(); _googleMapApiClient.GetAddressDetailsAsync(Arg.Is <string>(s => s == FormattedPostcode)).Returns("Coventry"); var providerVenueService = new ProviderVenueService(mapper, _providerVenueRepository, _locationApiClient, _googleMapApiClient); var viewModel = new AddProviderVenueViewModel { Postcode = UnFormattedPostcode }; providerVenueService.CreateVenueAsync(viewModel).GetAwaiter().GetResult(); }
public When_ProviderVenue_Add_Venue_Does_Not_Exist() { _providerVenueService = Substitute.For <IProviderVenueService>(); _providerVenueService.IsValidPostcodeAsync("CV1 2WT").Returns((true, "CV1 2WT")); _providerVenueService.GetVenueAsync(1, "CV1 2WT").ReturnsNull(); _providerVenueService.CreateVenueAsync(Arg.Any <AddProviderVenueViewModel>()).Returns(1); var providerVenueController = new ProviderVenueController(_providerVenueService); var controllerWithClaims = new ClaimsBuilder <ProviderVenueController>(providerVenueController) .AddUserName("username") .AddEmail("*****@*****.**") .Build(); var viewModel = new AddProviderVenueViewModel { ProviderId = 1, Postcode = "CV1 2WT" }; _result = controllerWithClaims.CreateVenueAsync(viewModel).GetAwaiter().GetResult(); }