public async Task And_Exception_Then_Returns_Bad_Request(
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] EpaosController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.IsAny <GetDeliveryAreaListQuery>(),
                       It.IsAny <CancellationToken>()))
            .Throws <InvalidOperationException>();

            var controllerResult = await controller.GetDeliveryAreas() as BadRequestResult;

            controllerResult.StatusCode.Should().Be((int)HttpStatusCode.BadRequest);
        }
        public async Task And_EntityNotFoundException_Then_Returns_NotFound(
            string epaoId,
            NotFoundException <GetEpaoCoursesResult> notFoundException,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] EpaosController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.IsAny <GetEpaoCoursesQuery>(),
                       It.IsAny <CancellationToken>()))
            .ThrowsAsync(notFoundException);

            var controllerResult = await controller.GetEpaoCourses(epaoId) as NotFoundResult;

            controllerResult !.StatusCode.Should().Be((int)HttpStatusCode.NotFound);
        }
        public async Task And_ValidationException_Then_Returns_BadRequest(
            string epaoId,
            ValidationException exception,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] EpaosController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.IsAny <GetEpaoCoursesQuery>(),
                       It.IsAny <CancellationToken>()))
            .ThrowsAsync(exception);

            var controllerResult = await controller.GetEpaoCourses(epaoId) as BadRequestObjectResult;

            controllerResult !.StatusCode.Should().Be((int)HttpStatusCode.BadRequest);
            controllerResult !.Value.Should().Be(exception.Message);
        }
        public async Task Then_Gets_Delivery_Areas_From_Mediator(
            GetDeliveryAreaListResult mediatorResult,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] EpaosController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.IsAny <GetDeliveryAreaListQuery>(),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(mediatorResult);

            var controllerResult = await controller.GetDeliveryAreas() as ObjectResult;

            Assert.IsNotNull(controllerResult);
            controllerResult.StatusCode.Should().Be((int)HttpStatusCode.OK);
            var model = controllerResult.Value as GetDeliveryAreaListResponse;

            Assert.IsNotNull(model);
            model.DeliveryAreas.Should().BeEquivalentTo(mediatorResult.DeliveryAreas);
        }
        public async Task Then_Gets_Epaos_From_Mediator(
            GetEpaosResult mediatorResult,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] EpaosController controller)
        {
            controller.Url = Mock.Of <IUrlHelper>();
            var expectedModel = (GetEpaosApiModel)mediatorResult;

            expectedModel.BuildLinks(controller.Url);
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.IsAny <GetEpaosQuery>(),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(mediatorResult);

            var controllerResult = await controller.GetEpaos() as ObjectResult;

            controllerResult !.StatusCode.Should().Be((int)HttpStatusCode.OK);
            var model = controllerResult.Value as GetEpaosApiModel;

            model.Should().BeEquivalentTo(expectedModel);
        }