Пример #1
0
        public void Then_If_Error_For_Verify_An_Exception_Is_Thrown(
            string errorContent,
            StopEmployerDemandCommand command,
            GetEmployerDemandResponse getDemandResponse,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > mockApiClient,
            [Frozen] Mock <INotificationService> mockNotificationService,
            StopEmployerDemandCommandHandler handler)
        {
            //Arrange
            getDemandResponse.Stopped = false;
            var stopResponse = new ApiResponse <string>(null, HttpStatusCode.InternalServerError, errorContent);

            mockApiClient
            .Setup(client => client.PatchWithResponseCode(
                       It.Is <PatchCourseDemandRequest>(request => request.PatchUrl.Contains(command.EmployerDemandId.ToString()))))
            .ReturnsAsync(stopResponse);
            mockApiClient
            .Setup(client => client.Get <GetEmployerDemandResponse>(
                       It.Is <GetEmployerDemandRequest>(request => request.GetUrl.Contains($"demand/{command.EmployerDemandId}"))))
            .ReturnsAsync(getDemandResponse);

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

            //Assert
            act.Should().Throw <HttpRequestContentException>().WithMessage($"Response status code does not indicate success: {(int)HttpStatusCode.InternalServerError} ({HttpStatusCode.InternalServerError})")
            .Which.ErrorContent.Should().Be(errorContent);
            mockNotificationService.Verify(service => service.Send(It.IsAny <SendEmailCommand>()),
                                           Times.Never);
        }
Пример #2
0
        public async Task Then_The_Email_Is_Not_Sent_If_Already_Verified_On_Get_Demand(
            VerifyEmployerDemandCommand command,
            PostEmployerCourseDemand verifyEmailResponse,
            GetEmployerDemandResponse getDemandResponse,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > apiClient,
            [Frozen] Mock <INotificationService> notificationService,
            VerifyEmployerDemandCommandHandler handler)
        {
            //Arrange
            getDemandResponse.EmailVerified = true;
            apiClient.Setup(x =>
                            x.Get <GetEmployerDemandResponse>(
                                It.Is <GetEmployerDemandRequest>(c => c.GetUrl.Contains($"demand/{command.Id}"))))
            .ReturnsAsync(getDemandResponse);

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

            //Assert
            apiClient.Verify(client => client.PatchWithResponseCode(
                                 It.IsAny <PatchCourseDemandRequest>()), Times.Never);
            notificationService.Verify(service => service.Send(It.IsAny <SendEmailCommand>()),
                                       Times.Never);
            actual.EmployerDemand.Should().BeEquivalentTo(getDemandResponse);
        }
Пример #3
0
        public void Then_If_Error_For_Verify_An_Exception_Is_Thrown(
            string errorContent,
            GetEmployerDemandResponse getDemandResponse,
            VerifyEmployerDemandCommand command,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > apiClient,
            [Frozen] Mock <INotificationService> notificationService,
            VerifyEmployerDemandCommandHandler handler)
        {
            //Arrange
            getDemandResponse.EmailVerified = false;
            apiClient.Setup(x =>
                            x.Get <GetEmployerDemandResponse>(
                                It.Is <GetEmployerDemandRequest>(c => c.GetUrl.Contains($"demand/{command.Id}"))))
            .ReturnsAsync(getDemandResponse);
            var apiResponse = new ApiResponse <string>("patchResponse", HttpStatusCode.BadRequest, errorContent);

            apiClient.Setup(
                x => x.PatchWithResponseCode(It.IsAny <PatchCourseDemandRequest>())).ReturnsAsync(apiResponse);

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

            //Assert
            act.Should().Throw <HttpRequestContentException>().WithMessage($"Response status code does not indicate success: {(int)HttpStatusCode.BadRequest} ({HttpStatusCode.BadRequest})")
            .Which.ErrorContent.Should().Be(errorContent);
            notificationService.Verify(service => service.Send(It.IsAny <SendEmailCommand>()),
                                       Times.Never);
        }
Пример #4
0
        public async Task Then_The_Demand_Data_Is_Returned_From_The_Api(
            GetRestartEmployerDemandQuery query,
            GetEmployerDemandResponse getDemandResponse,
            GetStandardsListItem getStandardResponse,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > demandApiClient,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > coursesApiClient,
            GetRestartEmployerDemandQueryHandler handler)
        {
            //Arrange
            demandApiClient.Setup(x =>
                                  x.Get <GetEmployerDemandResponse>(
                                      It.Is <GetEmployerDemandByExpiredDemandRequest>(c => c.GetUrl.Contains($"demand?expiredCourseDemandId={query.Id}"))))
            .ReturnsAsync((GetEmployerDemandResponse)null);
            demandApiClient.Setup(x =>
                                  x.Get <GetEmployerDemandResponse>(
                                      It.Is <GetEmployerDemandRequest>(c => c.GetUrl.Contains($"demand/{query.Id}"))))
            .ReturnsAsync(getDemandResponse);
            coursesApiClient.Setup(x =>
                                   x.Get <GetStandardsListItem>(
                                       It.Is <GetStandardRequest>(c => c.GetUrl.Contains($"api/courses/standards/{getDemandResponse.Course.Id}"))))
            .ReturnsAsync(getStandardResponse);

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

            //Assert
            actual.EmployerDemand.Should().BeEquivalentTo(getDemandResponse);
            actual.RestartDemandExists.Should().BeFalse();
            actual.LastStartDate.Should().Be(getStandardResponse.StandardDates.LastDateStarts);
        }
Пример #5
0
        public async Task Then_The_Api_Is_Called_And_Email_Sent_If_ResponseCode_Is_Ok_And_Audit_Created(
            StopEmployerDemandCommand command,
            GetEmployerDemandResponse getDemandResponse,
            GetEmployerDemandResponse stopResponseBody,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > mockApiClient,
            [Frozen] Mock <INotificationService> mockNotificationService,
            StopEmployerDemandCommandHandler handler)
        {
            //Arrange
            getDemandResponse.Stopped = false;
            var stopResponse = new ApiResponse <string>(JsonConvert.SerializeObject(stopResponseBody), HttpStatusCode.OK, "");

            mockApiClient
            .Setup(client => client.PatchWithResponseCode(
                       It.Is <PatchCourseDemandRequest>(c => c.PatchUrl.Contains(command.EmployerDemandId.ToString()) &&
                                                        c.Data.FirstOrDefault().Path.Equals("Stopped") &&
                                                        c.Data.FirstOrDefault().Value.Equals(true)
                                                        )))
            .ReturnsAsync(stopResponse);
            mockApiClient
            .Setup(client => client.Get <GetEmployerDemandResponse>(
                       It.Is <GetEmployerDemandRequest>(request => request.GetUrl.Contains($"demand/{command.EmployerDemandId}"))))
            .ReturnsAsync(getDemandResponse);

            SendEmailCommand actualEmail = null;

            mockNotificationService
            .Setup(service => service.Send(It.IsAny <SendEmailCommand>()))
            .Callback((SendEmailCommand args) => actualEmail = args)
            .Returns(Task.CompletedTask);
            var expectedEmail = new StopSharingEmployerDemandEmail(
                stopResponseBody.ContactEmailAddress,
                stopResponseBody.OrganisationName,
                stopResponseBody.Course.Title,
                stopResponseBody.Course.Level,
                stopResponseBody.Location.Name,
                stopResponseBody.NumberOfApprentices,
                stopResponseBody.StartSharingUrl);

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

            //Assert
            actual.EmployerDemand.Should().BeEquivalentTo(stopResponseBody);
            actualEmail.Tokens.Should().BeEquivalentTo(expectedEmail.Tokens);
            actualEmail.RecipientsAddress.Should().BeEquivalentTo(expectedEmail.RecipientAddress);
            actualEmail.TemplateId.Should().BeEquivalentTo(expectedEmail.TemplateId);
            mockApiClient.Verify(
                x => x.PostWithResponseCode <object>(It.Is <PostEmployerDemandNotificationAuditRequest>(c =>
                                                                                                        c.PostUrl.Contains($"{command.EmployerDemandId}/notification-audit/{command.Id}?notificationType={(short)NotificationType.StoppedByUser}"))), Times.Once);
        }
Пример #6
0
        public async Task Then_The_Command_Is_Handled_And_Api_Called(
            VerifyEmployerDemandCommand command,
            string patchResponse,
            GetEmployerDemandResponse getDemandResponse,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > apiClient,
            [Frozen] Mock <INotificationService> notificationService,
            VerifyEmployerDemandCommandHandler handler)
        {
            //Arrange
            getDemandResponse.EmailVerified = false;
            var apiResponse = new ApiResponse <string>(patchResponse, HttpStatusCode.OK, null);

            apiClient.Setup(
                x => x.PatchWithResponseCode(It.Is <PatchCourseDemandRequest>(c =>
                                                                              c.PatchUrl.Contains($"api/demand/{command.Id}") &&
                                                                              c.Data.FirstOrDefault().Path.Equals("EmailVerified") &&
                                                                              c.Data.FirstOrDefault().Value.Equals(true)
                                                                              ))).ReturnsAsync(apiResponse);

            apiClient.Setup(x =>
                            x.Get <GetEmployerDemandResponse>(
                                It.Is <GetEmployerDemandRequest>(c => c.GetUrl.Contains($"demand/{command.Id}"))))
            .ReturnsAsync(getDemandResponse);
            SendEmailCommand actualEmail = null;

            notificationService
            .Setup(service => service.Send(It.IsAny <SendEmailCommand>()))
            .Callback((SendEmailCommand args) => actualEmail = args)
            .Returns(Task.CompletedTask);
            var expectedEmail = new CreateDemandConfirmationEmail(
                getDemandResponse.ContactEmailAddress,
                getDemandResponse.OrganisationName,
                getDemandResponse.Course.Title,
                getDemandResponse.Course.Level,
                getDemandResponse.Location.Name,
                getDemandResponse.NumberOfApprentices,
                getDemandResponse.StopSharingUrl);

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

            //Assert
            actual.EmployerDemand.Should().BeEquivalentTo(getDemandResponse, options => options.Excluding(c => c.EmailVerified));
            actual.EmployerDemand.EmailVerified.Should().BeTrue();
            actualEmail.Tokens.Should().BeEquivalentTo(expectedEmail.Tokens);
            actualEmail.RecipientsAddress.Should().BeEquivalentTo(expectedEmail.RecipientAddress);
            actualEmail.TemplateId.Should().BeEquivalentTo(expectedEmail.TemplateId);
        }
        public void Then_The_Fields_Are_Mapped(GetEmployerDemandResponse source)
        {
            //Act
            var actual = (GetCourseDemandResponse)source;

            //Assert
            actual.Should().BeEquivalentTo(source, options => options
                                           .Excluding(c => c.Location)
                                           .Excluding(c => c.Course)
                                           .Excluding(c => c.ContactEmailAddress)
                                           .Excluding(c => c.StopSharingUrl)
                                           .Excluding(c => c.StartSharingUrl)
                                           .Excluding(c => c.Stopped)
                                           .Excluding(c => c.ExpiredCourseDemandId)
                                           .Excluding(c => c.LastStartDate)
                                           );
            actual.ContactEmail.Should().Be(source.ContactEmailAddress);
        }
Пример #8
0
        public async Task Then_The_Data_Is_Returned_From_The_Api(
            GetCourseDemandQuery query,
            GetEmployerDemandResponse getDemandResponse,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > apiClient,
            GetCourseDemandQueryHandler handler)
        {
            //Arrange
            apiClient.Setup(x =>
                            x.Get <GetEmployerDemandResponse>(
                                It.Is <GetEmployerDemandRequest>(c => c.GetUrl.Contains($"demand/{query.Id}"))))
            .ReturnsAsync(getDemandResponse);

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

            //Assert
            actual.EmployerDemand.Should().BeEquivalentTo(getDemandResponse);
        }
Пример #9
0
        public async Task Then_The_Command_Is_Handled_And_EmailSent_And_Demand_Updated(
            GetEmployerDemandResponse response,
            SendAutomaticEmployerDemandDemandCutOffCommand command,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > employerDemandApiClient,
            [Frozen] Mock <INotificationService> notificationService,
            SendAutomaticEmployerDemandDemandCutOffCommandHandler handler)
        {
            //Arrange
            employerDemandApiClient.Setup(x =>
                                          x.Get <GetEmployerDemandResponse>(It.Is <GetEmployerDemandRequest>(c =>
                                                                                                             c.GetUrl.Contains(command.EmployerDemandId.ToString()))))
            .ReturnsAsync(response);
            SendEmailCommand actualEmail = null;

            notificationService
            .Setup(service => service.Send(It.IsAny <SendEmailCommand>()))
            .Callback((SendEmailCommand args) => actualEmail = args)
            .Returns(Task.CompletedTask);
            var expectedEmail = new StopSharingExpiredEmployerDemandEmail(
                response.ContactEmailAddress,
                response.OrganisationName,
                response.Course.Title,
                response.Course.Level,
                response.Location.Name,
                response.NumberOfApprentices,
                response.StartSharingUrl);

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

            //Assert
            employerDemandApiClient.Verify(
                x => x.PostWithResponseCode <object>(It.Is <PostEmployerDemandNotificationAuditRequest>(c =>
                                                                                                        c.PostUrl.Contains($"{command.EmployerDemandId}/notification-audit/{command.Id}?notificationType={(short)NotificationType.StoppedAutomaticCutOff}"))), Times.Once);
            employerDemandApiClient.Verify(
                x => x.PatchWithResponseCode(It.Is <PatchCourseDemandRequest>(c =>
                                                                              c.PatchUrl.Contains($"api/demand/{command.EmployerDemandId}") &&
                                                                              c.Data.FirstOrDefault().Path.Equals("Stopped") &&
                                                                              c.Data.FirstOrDefault().Value.Equals(true)
                                                                              )), Times.Once);
            actualEmail.Tokens.Should().BeEquivalentTo(expectedEmail.Tokens);
            actualEmail.RecipientsAddress.Should().BeEquivalentTo(expectedEmail.RecipientAddress);
            actualEmail.TemplateId.Should().BeEquivalentTo(expectedEmail.TemplateId);
        }
        public async Task Then_A_Notification_Is_Sent_And_Api_Called(
            GetEmployerDemandResponse response,
            SendEmployerDemandEmailReminderCommand command,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > employerDemandApiClient,
            [Frozen] Mock <INotificationService> notificationService,
            SendEmployerDemandEmailReminderCommandHandler handler)
        {
            //Arrange
            employerDemandApiClient.Setup(x =>
                                          x.Get <GetEmployerDemandResponse>(It.Is <GetEmployerDemandRequest>(c =>
                                                                                                             c.GetUrl.Contains(command.EmployerDemandId.ToString()))))
            .ReturnsAsync(response);
            SendEmailCommand actualEmail = null;

            notificationService
            .Setup(service => service.Send(It.IsAny <SendEmailCommand>()))
            .Callback((SendEmailCommand args) => actualEmail = args)
            .Returns(Task.CompletedTask);
            var expectedEmail = new CreateEmployerDemandReminderEmail(
                response.ContactEmailAddress,
                response.OrganisationName,
                response.Course.Title,
                response.Course.Level,
                response.Location.Name,
                response.NumberOfApprentices,
                response.StopSharingUrl);


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

            //Assert
            employerDemandApiClient.Verify(
                x => x.PostWithResponseCode <object>(It.Is <PostEmployerDemandNotificationAuditRequest>(c =>
                                                                                                        c.PostUrl.Contains($"{command.EmployerDemandId}/notification-audit/{command.Id}?notificationType={(short)NotificationType.Reminder}"))), Times.Once);
            actualEmail.Tokens.Should().BeEquivalentTo(expectedEmail.Tokens);
            actualEmail.RecipientsAddress.Should().BeEquivalentTo(expectedEmail.RecipientAddress);
            actualEmail.TemplateId.Should().BeEquivalentTo(expectedEmail.TemplateId);
        }
Пример #11
0
        public async Task And_Demand_Already_Stopped_Then_Not_Send_Email(
            StopEmployerDemandCommand command,
            GetEmployerDemandResponse getDemandResponse,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > mockApiClient,
            [Frozen] Mock <INotificationService> mockNotificationService,
            StopEmployerDemandCommandHandler handler)
        {
            //Arrange
            getDemandResponse.Stopped = true;
            mockApiClient.Setup(x =>
                                x.Get <GetEmployerDemandResponse>(
                                    It.Is <GetEmployerDemandRequest>(c => c.GetUrl.Contains($"demand/{command.EmployerDemandId}"))))
            .ReturnsAsync(getDemandResponse);

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

            //Assert
            mockApiClient.Verify(client => client.PatchWithResponseCode(It.IsAny <PatchCourseDemandRequest>()),
                                 Times.Never);
            mockNotificationService.Verify(service => service.Send(It.IsAny <SendEmailCommand>()),
                                           Times.Never);
            actual.EmployerDemand.Should().BeEquivalentTo(getDemandResponse);
        }