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); }
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*"); }