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);
        }
Esempio n. 2
0
        public async Task Then_If_All_Fields_Are_Present_The_Command_Is_Valid(CreateCachedCourseDemandCommand command)
        {
            //Arrange
            command.ContactEmailAddress      = $"{command.ContactEmailAddress}@test.com";
            command.NumberOfApprenticesKnown = false;
            var validator = new CreateCourseDemandCommandValidator();

            //Act
            var actual = await validator.ValidateAsync(command);

            //Assert
            actual.IsValid().Should().BeTrue();
        }
Esempio n. 3
0
        public async Task Then_If_There_Is_No_TrainingCourseId_It_Is_Invalid(CreateCachedCourseDemandCommand command)
        {
            //Arrange
            command.TrainingCourseId    = 0;
            command.ContactEmailAddress = $"{command.ContactEmailAddress}@test.com";
            var validator = new CreateCourseDemandCommandValidator();

            //Act
            var actual = await validator.ValidateAsync(command);

            //Assert
            actual.IsValid().Should().BeFalse();
            actual.ValidationDictionary.Should().ContainKey(nameof(command.TrainingCourseId));
        }
Esempio n. 4
0
        public async Task Then_If_There_Is_No_ContactEmailAddress_It_Is_Invalid(CreateCachedCourseDemandCommand command)
        {
            //Arrange
            command.ContactEmailAddress = string.Empty;
            var validator = new CreateCourseDemandCommandValidator();

            //Act
            var actual = await validator.ValidateAsync(command);

            //Assert
            actual.IsValid().Should().BeFalse();
            actual.ValidationDictionary.Should().ContainKey(nameof(command.ContactEmailAddress));
            actual.ValidationDictionary[nameof(command.ContactEmailAddress)].Should()
            .Be("Enter an email address");
        }
Esempio n. 5
0
        public async Task Then_If_There_Is_No_OrganisationName_It_Is_Invalid(CreateCachedCourseDemandCommand command)
        {
            //Arrange
            command.OrganisationName    = string.Empty;
            command.ContactEmailAddress = $"{command.ContactEmailAddress}@test.com";
            var validator = new CreateCourseDemandCommandValidator();

            //Act
            var actual = await validator.ValidateAsync(command);

            //Assert
            actual.IsValid().Should().BeFalse();
            actual.ValidationDictionary.Should().ContainKey(nameof(command.OrganisationName));
            actual.ValidationDictionary[nameof(command.OrganisationName)].Should()
            .Be("Enter the name of the organisation");
        }
Esempio n. 6
0
        public async Task Then_If_No_Address_Marked_As_Invalid(CreateCachedCourseDemandCommand command)
        {
            //Arrange
            command.Location            = string.Empty;
            command.ContactEmailAddress = $"{command.ContactEmailAddress}@test.com";
            var validator = new CreateCourseDemandCommandValidator();

            //Act
            var actual = await validator.ValidateAsync(command);

            //Assert
            actual.IsValid().Should().BeFalse();
            actual.ValidationDictionary.Should().ContainKey(nameof(command.Location));
            actual.ValidationDictionary[nameof(command.Location)].Should()
            .Be("Enter a town, city or postcode");
        }
        public void Then_If_The_Command_Is_Not_Valid_Then_A_ValidationException_Is_Thrown(
            string propertyName,
            CreateCachedCourseDemandCommand command,
            [Frozen] Mock <IDemandService> service,
            [Frozen] Mock <IValidator <CreateCachedCourseDemandCommand> > validator,
            CreateCachedCourseDemandCommandHandler handler)
        {
            //Arrange
            validator.Setup(x => x.ValidateAsync(command)).ReturnsAsync(new ValidationResult {
                ValidationDictionary = { { propertyName, "" } }
            });

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

            //Assert
            act.Should().Throw <ValidationException>()
            .WithMessage($"*{propertyName}*");
        }
        public void Then_If_The_Command_Is_Not_Valid_And_Has_A_Location_Error_Then_A_ValidationException_Is_Thrown_And_The_Service_Not_Called(
            string propertyName,
            CreateCachedCourseDemandCommand command,
            [Frozen] Mock <IDemandService> service,
            [Frozen] Mock <IValidator <CreateCachedCourseDemandCommand> > validator,
            CreateCachedCourseDemandCommandHandler handler)
        {
            //Arrange
            validator.Setup(x => x.ValidateAsync(command)).ReturnsAsync(new ValidationResult {
                ValidationDictionary = { { nameof(command.Location), "" } }
            });

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

            //Assert
            act.Should().Throw <ValidationException>()
            .WithMessage($"*{nameof(command.Location)}*");
            service.Verify(x => x.GetCreateCourseDemand(It.IsAny <int>(), It.IsAny <string>()), Times.Never);
        }
        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*");
        }
Esempio n. 10
0
        public async Task Then_If_There_Is_No_Value_For_NumberOfApprenticesKnown_Then_Invalid(CreateCachedCourseDemandCommand command)
        {
            //Arrange
            command.NumberOfApprenticesKnown = null;
            var validator = new CreateCourseDemandCommandValidator();

            //Act
            var actual = await validator.ValidateAsync(command);

            //Assert
            actual.IsValid().Should().BeFalse();
            actual.ValidationDictionary.Should().ContainKey(nameof(command.NumberOfApprenticesKnown));
            actual.ValidationDictionary[nameof(command.NumberOfApprenticesKnown)].Should()
            .Be("Select yes if you know how many apprentices will take this apprenticeship training");
        }
Esempio n. 11
0
        public async Task Then_If_There_Is_Not_A_Valid_ContactEmailAddress_It_Is_Invalid(CreateCachedCourseDemandCommand command)
        {
            //Arrange
            var validator = new CreateCourseDemandCommandValidator();

            //Act
            var actual = await validator.ValidateAsync(command);

            //Assert
            actual.IsValid().Should().BeFalse();
            actual.ValidationDictionary.Should().ContainKey(nameof(command.ContactEmailAddress));
            actual.ValidationDictionary[nameof(command.ContactEmailAddress)].Should()
            .Be("Enter an email address in the correct format, like [email protected]");
        }
Esempio n. 12
0
        public async Task Then_If_The_NumberOfApprenticesIsKnown_Is_True_Then_The_Number_Of_Apprentices_Is_Null_Then_Invalid(CreateCachedCourseDemandCommand command)
        {
            //Arrange
            command.NumberOfApprenticesKnown = true;
            command.NumberOfApprentices      = null;
            var validator = new CreateCourseDemandCommandValidator();

            //Act
            var actual = await validator.ValidateAsync(command);

            //Assert
            actual.IsValid().Should().BeFalse();
            actual.ValidationDictionary.Should().ContainKey(nameof(command.NumberOfApprentices));
            actual.ValidationDictionary[nameof(command.NumberOfApprentices)].Should()
            .Be("Enter the number of apprentices");
        }
Esempio n. 13
0
        public async Task Then_If_The_NumberOfApprenticesIsKnown_Is_True_And_The_Number_Of_Apprentices_Is_Not_An_Int_Then_Invalid(CreateCachedCourseDemandCommand command)
        {
            //Arrange
            command.NumberOfApprenticesKnown = true;
            command.NumberOfApprentices      = $"{long.MaxValue}";
            var validator = new CreateCourseDemandCommandValidator();

            //Act
            var actual = await validator.ValidateAsync(command);

            //Assert
            actual.IsValid().Should().BeFalse();
            actual.ValidationDictionary.Should().ContainKey(nameof(command.NumberOfApprentices));
            actual.ValidationDictionary[nameof(command.NumberOfApprentices)].Should()
            .Be("Number of apprentices must be 9999 or less");
        }