public void EditCentreWebsiteDetails_should_show_save_coordinates_when_postcode_is_valid()
        {
            // Given
            var model = new EditCentreWebsiteDetailsViewModel {
                CentrePostcode = "AA123"
            };
            const double latitude  = 50.123;
            const double longitude = -3.01;

            A.CallTo(() => mapsApiHelper.GeocodePostcode(A <string> ._))
            .Returns(CreateSuccessfulMapsResponse(latitude, longitude));

            // When
            var result = controller.EditCentreWebsiteDetails(model);

            // Then
            result.Should().BeRedirectToActionResult().WithActionName("Index");
            A.CallTo(
                () => centresDataService.UpdateCentreWebsiteDetails(
                    A <int> ._,
                    "AA123",
                    latitude,
                    longitude,
                    A <string> ._,
                    A <string> ._,
                    A <string> ._,
                    A <string> ._,
                    A <string> ._,
                    A <string> ._,
                    A <string> ._
                    )
                ).MustHaveHappened();
        }
Пример #2
0
        public IActionResult EditCentreWebsiteDetails()
        {
            var centreId = User.GetCentreId();

            var centreDetails = centresDataService.GetCentreDetailsById(centreId) !;

            var model = new EditCentreWebsiteDetailsViewModel(centreDetails);

            return(View(model));
        }
Пример #3
0
        public IActionResult EditCentreWebsiteDetails(EditCentreWebsiteDetailsViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            model.CentrePostcode = model.CentrePostcode !.Trim();
            var mapsResponse = mapsApiHelper.GeocodePostcode(model.CentrePostcode).Result;

            if (mapsResponse.HasNoResults())
            {
                ModelState.AddModelError(nameof(model.CentrePostcode), "Enter a UK postcode");
                return(View(model));
            }

            if (mapsResponse.ApiErrorOccurred())
            {
                logger.LogWarning
                (
                    $"Failed Maps API call when trying to get postcode {model.CentrePostcode} " +
                    $"- status of {mapsResponse.Status} - error message: {mapsResponse.ErrorMessage}"
                );
                return(new StatusCodeResult(500));
            }

            var latitude  = double.Parse(mapsResponse.Results[0].Geometry.Location.Latitude);
            var longitude = double.Parse(mapsResponse.Results[0].Geometry.Location.Longitude);

            var centreId = User.GetCentreId();

            centresDataService.UpdateCentreWebsiteDetails(
                centreId,
                model.CentrePostcode,
                latitude,
                longitude,
                model.CentreTelephone,
                model.CentreEmail !,
                model.OpeningHours,
                model.CentreWebAddress,
                model.OrganisationsCovered,
                model.TrainingVenues,
                model.OtherInformation
                );

            return(RedirectToAction("Index"));
        }
        public void EditCentreWebsiteDetails_should_redirect_to_error_page_when_API_issue_occurs(string statusCode)
        {
            // Given
            var model = new EditCentreWebsiteDetailsViewModel {
                CentrePostcode = "AA123"
            };

            A.CallTo(() => mapsApiHelper.GeocodePostcode(A <string> ._))
            .Returns(new MapsResponse {
                Status = statusCode
            });

            // When
            var result = controller.EditCentreWebsiteDetails(model);

            // Then
            result.Should().BeStatusCodeResult().WithStatusCode(500);
        }
        public void EditCentreWebsiteDetails_should_show_validation_error_to_user_when_given_invalid_postcode()
        {
            // Given
            var model = new EditCentreWebsiteDetailsViewModel {
                CentrePostcode = "aaaaaaaaa"
            };

            A.CallTo(() => mapsApiHelper.GeocodePostcode(A <string> ._))
            .Returns(new MapsResponse {
                Status = "ZERO_RESULTS"
            });

            // When
            var result = controller.EditCentreWebsiteDetails(model);

            // Then
            result.Should().BeViewResult().WithDefaultViewName()
            .ModelAs <EditCentreWebsiteDetailsViewModel>();
            Assert.IsFalse(controller.ModelState.IsValid);
        }