public async Task And_Single_Epao_Then_Redirect_To_CourseEpao(
            PostChooseCourseRequest postRequest,
            GetCourseEpaosResult mediatorResult,
            EpaoListItem foundEpao,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] CoursesController controller)
        {
            mediatorResult.Course = new CourseListItem(mediatorResult.Course.Id, mediatorResult.Course.Title, mediatorResult.Course.Level, false);
            mediatorResult.Epaos  = new List <EpaoListItem> {
                foundEpao
            };
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.Is <GetCourseEpaosQuery>(query => query.CourseId == postRequest.SelectedCourseId),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(mediatorResult);

            var result = await controller.PostChooseCourse(postRequest) as RedirectToRouteResult;

            result.RouteName.Should().Be(RouteNames.CourseEpao);
            result.RouteValues.Should().ContainKey("id");
            result.RouteValues["id"].Should().Be(postRequest.SelectedCourseId);
            result.RouteValues.Should().ContainKey("epaoId");
            result.RouteValues["epaoId"].Should().Be(foundEpao.EpaoId);
        }
        public async Task <IActionResult> PostChooseCourse(PostChooseCourseRequest request)
        {
            try
            {
                var query = new GetCourseEpaosQuery {
                    CourseId = request.SelectedCourseId
                };
                var result = await _mediator.Send(query);

                if (result?.Epaos?.Count == 1)
                {
                    return(RedirectToRoute(RouteNames.CourseEpao, new GetCourseEpaoDetailsRequest
                    {
                        Id = request.SelectedCourseId,
                        EpaoId = result.Epaos.First().EpaoId
                    }));
                }

                return(RedirectToRoute(RouteNames.CourseEpaos, new GetCourseEpaosRequest
                {
                    Id = request.SelectedCourseId
                }));
            }
            catch (ValidationException)
            {
                return(RedirectToRoute(
                           RouteNames.ChooseCourse,
                           new GetChooseCourseRequest {
                    SelectedCourseId = "-1"
                }));
            }
        }
        public async Task And_Model_Invalid_Redirect_To_Get_Choose_Course(
            PostChooseCourseRequest postRequest,
            ValidationException exception,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] CoursesController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.IsAny <GetCourseEpaosQuery>(),
                       It.IsAny <CancellationToken>()))
            .ThrowsAsync(exception);

            var result = await controller.PostChooseCourse(postRequest) as RedirectToRouteResult;

            result.RouteName.Should().Be(RouteNames.ChooseCourse);
            result.RouteValues.Should().ContainKey(nameof(GetChooseCourseRequest.SelectedCourseId));
            result.RouteValues[nameof(GetChooseCourseRequest.SelectedCourseId)]
            .Should().Be("-1");
        }