예제 #1
0
        public async Task Then_If_The_Number_Of_Apprentices_Is_Not_Known_Then_The_Value_Is_Set_To_Null(
            RegisterDemandRequest request,
            CreateCachedCourseDemandCommandResult mediatorResult,
            [Frozen] Mock <IMediator> mediator,
            [Greedy] RegisterDemandController controller)
        {
            //Arrange
            request.NumberOfApprenticesKnown = false;
            mediator.Setup(x =>
                           x.Send(It.Is <CreateCachedCourseDemandCommand>(c =>
                                                                          c.TrainingCourseId.Equals(request.TrainingCourseId) &&
                                                                          c.Location.Equals(request.Location) &&
                                                                          c.OrganisationName.Equals(request.OrganisationName) &&
                                                                          c.ContactEmailAddress.Equals(request.ContactEmailAddress) &&
                                                                          c.NumberOfApprentices == string.Empty &&
                                                                          c.Id != Guid.Empty
                                                                          ), It.IsAny <CancellationToken>()))
            .ReturnsAsync(mediatorResult);

            //Act
            var actual = await controller.PostRegisterDemand(request) as RedirectToRouteResult;

            //Assert
            Assert.IsNotNull(actual);
            actual.RouteName.Should().Be(RouteNames.ConfirmRegisterDemand);
            actual.RouteValues["id"].Should().Be(request.TrainingCourseId);
            actual.RouteValues["createDemandId"].Should().Be(mediatorResult.Id);
        }
예제 #2
0
        public async Task Then_Mediator_Is_Called_And_Existing_DemandId_Used_If_Updating_Then_Redirected_To_Confirm(
            RegisterDemandRequest request,
            CreateCachedCourseDemandCommandResult mediatorResult,
            [Frozen] Mock <IMediator> mediator,
            [Greedy] RegisterDemandController controller)
        {
            //Arrange
            request.NumberOfApprenticesKnown = true;
            mediator.Setup(x =>
                           x.Send(It.Is <CreateCachedCourseDemandCommand>(c =>
                                                                          c.TrainingCourseId.Equals(request.TrainingCourseId) &&
                                                                          c.Location.Equals(request.Location) &&
                                                                          c.OrganisationName.Equals(request.OrganisationName) &&
                                                                          c.ContactEmailAddress.Equals(request.ContactEmailAddress) &&
                                                                          c.NumberOfApprentices.Equals(request.NumberOfApprentices) &&
                                                                          c.Id == request.CreateDemandId
                                                                          )
                                  , It.IsAny <CancellationToken>()))
            .ReturnsAsync(mediatorResult);

            //Act
            var actual = await controller.PostRegisterDemand(request) as RedirectToRouteResult;

            //Assert
            Assert.IsNotNull(actual);
            actual.RouteName.Should().Be(RouteNames.ConfirmRegisterDemand);
            actual.RouteValues["id"].Should().Be(request.TrainingCourseId);
            actual.RouteValues["createDemandId"].Should().Be(mediatorResult.Id);
        }
        public void Then_The_Dictionary_Is_Built_And_Ordered()
        {
            //Act
            var propertyOrderedDictionary = RegisterDemandRequest.BuildPropertyOrderDictionary();

            //Assert
            propertyOrderedDictionary.Should().BeAssignableTo <Dictionary <string, int> >();
            propertyOrderedDictionary.Count.Should().Be(typeof(RegisterDemandRequest).Properties().Count());
        }
예제 #4
0
        private async Task <RegisterCourseDemandViewModel> BuildRegisterCourseDemandViewModelFromPostRequest(
            RegisterDemandRequest request)
        {
            var model = (RegisterCourseDemandViewModel)request;

            var result = await _mediator.Send(new GetCreateCourseDemandQuery { TrainingCourseId = request.TrainingCourseId });

            model.TrainingCourse = result.CourseDemand.Course;
            return(model);
        }
예제 #5
0
        public async Task <IActionResult> PostRegisterDemand(RegisterDemandRequest request)
        {
            try
            {
                if (request.NumberOfApprenticesKnown.HasValue && !request.NumberOfApprenticesKnown.Value)
                {
                    request.NumberOfApprentices = string.Empty;
                }

                var createResult = await _mediator.Send(new CreateCachedCourseDemandCommand
                {
                    Id = !request.CreateDemandId.HasValue || request.CreateDemandId == Guid.Empty ?
                         Guid.NewGuid() : request.CreateDemandId.Value,
                    Location                 = request.Location,
                    OrganisationName         = request.OrganisationName,
                    ContactEmailAddress      = request.ContactEmailAddress,
                    NumberOfApprentices      = request.NumberOfApprentices,
                    TrainingCourseId         = request.TrainingCourseId,
                    NumberOfApprenticesKnown = request.NumberOfApprenticesKnown
                });

                return(RedirectToRoute(RouteNames.ConfirmRegisterDemand, new
                {
                    createDemandId = createResult.Id,
                    Id = request.TrainingCourseId
                }));
            }
            catch (ValidationException e)
            {
                foreach (var member in e.ValidationResult.MemberNames)
                {
                    ModelState.AddModelError(member.Split('|')[0], member.Split('|')[1]);
                }
                var model = await BuildRegisterCourseDemandViewModelFromPostRequest(request);

                return(View("RegisterDemand", model));
            }
        }
예제 #6
0
        public async Task Then_If_There_Is_A_Validation_Exception_The_Register_View_Is_Returned(
            RegisterDemandRequest request,
            CreateCachedCourseDemandCommandResult mediatorResult,
            GetCreateCourseDemandQueryResult result,
            [Frozen] Mock <IMediator> mediator,
            [Greedy] RegisterDemandController controller)
        {
            //Arrange
            mediator.Setup(x =>
                           x.Send(It.IsAny <CreateCachedCourseDemandCommand>()
                                  , It.IsAny <CancellationToken>()))
            .ThrowsAsync(new ValidationException());
            mediator.Setup(x =>
                           x.Send(It.Is <GetCreateCourseDemandQuery>(c => c.TrainingCourseId.Equals(request.TrainingCourseId))
                                  , It.IsAny <CancellationToken>()))
            .ReturnsAsync(result);

            //Act
            var actual = await controller.PostRegisterDemand(request) as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            actual.ViewName.Should().Be("RegisterDemand");
        }
        public void Then_The_Fields_Are_Correctly_Mapped(RegisterDemandRequest source)
        {
            var actual = (RegisterCourseDemandViewModel)source;

            actual.Should().BeEquivalentTo(source, options => options.Excluding(c => c.TrainingCourseId));
        }