Example #1
0
        public async Task <IActionResult> CreateShortlistItemForUser(CreateShortlistRequest request)
        {
            try
            {
                var id = await _mediator.Send(new CreateShortlistItemForUserRequest
                {
                    Lat                 = request.Lat,
                    Lon                 = request.Lon,
                    StandardId          = request.StandardId,
                    LocationDescription = request.LocationDescription,
                    Ukprn               = request.Ukprn,
                    SectorSubjectArea   = request.SectorSubjectArea,
                    ShortlistUserId     = request.ShortlistUserId
                });

                return(Created($"/api/{ControllerContext.ActionDescriptor.ControllerName}/{request.ShortlistUserId}/items/{id}", new { Id = id }));
            }
            catch (ValidationException e)
            {
                return(BadRequest(e.ValidationResult.ErrorMessage));
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(StatusCode((int)HttpStatusCode.InternalServerError));
            }
        }
        public async Task And_Exception_Then_Returns_Error(
            CreateShortlistRequest request,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] ShortlistController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.IsAny <CreateShortlistItemForUserRequest>(),
                       It.IsAny <CancellationToken>()))
            .Throws <InvalidOperationException>();

            var controllerResult = await controller.CreateShortlistItemForUser(request) as StatusCodeResult;

            controllerResult !.StatusCode.Should().Be((int)HttpStatusCode.InternalServerError);
        }
        public async Task And_Validation_Exception_Then_Returns_BadRequest(
            string errorKey,
            CreateShortlistRequest request,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] ShortlistController controller)
        {
            var validationResult = new ValidationResult {
                ValidationDictionary = { { errorKey, "Some error" } }
            };

            mockMediator
            .Setup(mediator => mediator.Send(
                       It.IsAny <CreateShortlistItemForUserRequest>(),
                       It.IsAny <CancellationToken>()))
            .Throws(new ValidationException(validationResult.DataAnnotationResult, null, null));

            var controllerResult = await controller.CreateShortlistItemForUser(request) as ObjectResult;

            controllerResult !.StatusCode.Should().Be((int)HttpStatusCode.BadRequest);
            controllerResult.Value.ToString().Should().Contain(errorKey);
        }
        public async Task Then_Gets_Shortlist_From_Mediator(
            string controllerName,
            Guid returnId,
            CreateShortlistRequest request,
            [Frozen] Mock <HttpContext> httpContext,
            [Frozen] Mock <IMediator> mockMediator)
        {
            httpContext = new Mock <HttpContext>();
            var controller = new ShortlistController(mockMediator.Object, Mock.Of <ILogger <ShortlistController> >())
            {
                ControllerContext = { HttpContext      = httpContext.Object,
                                      ActionDescriptor = new ControllerActionDescriptor
                                      {
                                          ControllerName = controllerName
                                      } }
            };

            mockMediator
            .Setup(mediator => mediator.Send(
                       It.Is <CreateShortlistItemForUserRequest>(query =>
                                                                 query.ShortlistUserId == request.ShortlistUserId &&
                                                                 query.Lat.Equals(request.Lat) &&
                                                                 query.Lon.Equals(request.Lon) &&
                                                                 query.StandardId == request.StandardId &&
                                                                 query.LocationDescription == request.LocationDescription &&
                                                                 query.Ukprn == request.Ukprn &&
                                                                 query.SectorSubjectArea == request.SectorSubjectArea

                                                                 ),
                       It.IsAny <CancellationToken>())).ReturnsAsync(returnId);

            var controllerResult = await controller.CreateShortlistItemForUser(request) as CreatedResult;

            controllerResult !.StatusCode.Should().Be((int)HttpStatusCode.Created);
            controllerResult.Location.Should().Be($"/api/{controllerName}/{request.ShortlistUserId}/items/{returnId}");
        }