public async Task <CreateCachedCourseDemandCommandResult> Handle(CreateCachedCourseDemandCommand request, CancellationToken cancellationToken)
        {
            var validationResult = await _validator.ValidateAsync(request);

            var result = new GetCreateCourseDemandResponse();

            if (!validationResult.ValidationDictionary.ContainsKey(nameof(request.Location)))
            {
                result = await _service.GetCreateCourseDemand(request.TrainingCourseId, request.Location);

                if (result.Location == null)
                {
                    validationResult.AddError(nameof(request.Location), "Enter a real town, city or postcode");
                }
            }

            if (!validationResult.IsValid())
            {
                throw new ValidationException(validationResult.DataAnnotationResult, null, null);
            }

            request.LocationItem = result.Location;
            request.Course       = result.Course;

            await _service.CreateCacheCourseDemand(request);

            return(new CreateCachedCourseDemandCommandResult
            {
                Id = request.Id
            });
        }
        public async Task Then_The_Command_Is_Handled_And_Service_Called_If_Valid_With_Location_Information(
            CreateCachedCourseDemandCommand command,
            GetCreateCourseDemandResponse response,
            [Frozen] Mock <IDemandService> service,
            [Frozen] Mock <IValidator <CreateCachedCourseDemandCommand> > validator,
            CreateCachedCourseDemandCommandHandler handler)
        {
            //Arrange
            service.Setup(x => x.GetCreateCourseDemand(command.TrainingCourseId, command.Location))
            .ReturnsAsync(response);
            validator.Setup(x => x.ValidateAsync(command)).ReturnsAsync(new ValidationResult( ));

            //Act
            var actual = await handler.Handle(command, CancellationToken.None);

            //Assert
            service.Verify(x => x.CreateCacheCourseDemand(It.Is <CreateCachedCourseDemandCommand>(c =>
                                                                                                  c.LocationItem.Name.Equals(response.Location.Name) &&
                                                                                                  c.LocationItem.LocationPoint.Equals(response.Location.LocationPoint.GeoPoint) &&
                                                                                                  c.OrganisationName.Equals(command.OrganisationName) &&
                                                                                                  c.ContactEmailAddress.Equals(command.ContactEmailAddress) &&
                                                                                                  c.NumberOfApprentices.Equals(command.NumberOfApprentices) &&
                                                                                                  c.NumberOfApprenticesKnown.Equals(command.NumberOfApprenticesKnown) &&
                                                                                                  c.TrainingCourseId.Equals(command.TrainingCourseId) &&
                                                                                                  c.Course.Id.Equals(command.Course.Id) &&
                                                                                                  c.Course.Level.Equals(command.Course.Level) &&
                                                                                                  c.Course.Title.Equals(command.Course.Title)
                                                                                                  ))
                           , Times.Once);
            actual.Id.Should().Be(command.Id);
        }
        public async Task Then_If_There_Is_A_CreateDemandId_Then_It_Is_Read_From_The_Cache(
            GetCreateCourseDemandQuery query,
            CourseDemandRequest cachedData,
            GetCreateCourseDemandResponse response,
            [Frozen] Mock <IDemandService> service,
            GetCreateCourseDemandQueryHandler handler)
        {
            //Arrange
            service.Setup(x => x.GetCachedCourseDemand(query.CreateDemandId.Value)).ReturnsAsync(cachedData);

            //Act
            var actual = await handler.Handle(query, CancellationToken.None);

            //Assert
            service.Verify(x => x.GetCreateCourseDemand(It.IsAny <int>(), It.IsAny <string>()), Times.Never);
        }
        public async Task Then_If_There_Is_A_CreateDemandId_And_The_Cached_Value_Is_Null_Then_The_Service_Is_Called(
            GetCreateCourseDemandQuery query,
            GetCreateCourseDemandResponse response,
            [Frozen] Mock <IDemandService> service,
            GetCreateCourseDemandQueryHandler handler)
        {
            //Arrange
            service.Setup(x => x.GetCachedCourseDemand(query.CreateDemandId.Value)).ReturnsAsync((CourseDemandRequest)null);
            service.Setup(x => x.GetCreateCourseDemand(query.TrainingCourseId, ""))
            .ReturnsAsync(response);

            //Act
            var actual = await handler.Handle(query, CancellationToken.None);

            //Assert
            actual.CourseDemand.Course.Should().BeEquivalentTo(response.Course);
        }
Example #5
0
        public async Task Then_The_Api_Is_Called_And_Data_Returned(
            int trainingCourseId,
            string locationName,
            GetCreateCourseDemandResponse apiResponse,
            [Frozen] Mock <IApiClient> apiClient,
            DemandService service)
        {
            //Arrange
            apiClient.Setup(x =>
                            x.Get <GetCreateCourseDemandResponse>(
                                It.Is <GetCreateDemandRequest>(c => c.GetUrl.Contains(trainingCourseId.ToString()))))
            .ReturnsAsync(apiResponse);

            //Act
            var actual = await service.GetCreateCourseDemand(trainingCourseId, locationName);

            //Assert
            actual.Should().BeEquivalentTo(apiResponse);
        }
        public void Then_The_Api_Is_Called_With_Course_And_Location_And_If_No_Location_Found_Validation_Error_Returned(
            CreateCachedCourseDemandCommand command,
            GetCreateCourseDemandResponse response,
            [Frozen] Mock <IDemandService> service,
            [Frozen] Mock <IValidator <CreateCachedCourseDemandCommand> > validator,
            CreateCachedCourseDemandCommandHandler handler)
        {
            //Arrange
            response.Location = null;
            validator.Setup(x => x.ValidateAsync(command)).ReturnsAsync(new ValidationResult( ));
            service.Setup(x => x.GetCreateCourseDemand(command.TrainingCourseId, command.Location))
            .ReturnsAsync(response);

            //Act
            var act = new Func <Task>(async() => await handler.Handle(command, CancellationToken.None));

            //Assert
            service.Verify(x => x.CreateCacheCourseDemand(It.IsAny <CreateCachedCourseDemandCommand>()), Times.Never);
            act.Should().Throw <ValidationException>()
            .WithMessage($"*{nameof(command.Location)}|Enter a real town, city or postcode*");
        }