public async Task Then_a_failed_pendingPayment_validation_result_is_saved_against_the_pendingPayment_and_the_pending_payment_is_not_validated()
        {
            //Arrange
            var incentive = _fixture.Create <Domain.ApprenticeshipIncentives.ApprenticeshipIncentive>();

            var pendingPayment   = incentive.PendingPayments.First();
            var collectionPeriod = _collectionCalendarPeriods.First().CollectionPeriod;

            var accountModel = _fixture.Build <AccountModel>()
                               .With(a => a.Id, _account.Id)
                               .With(a => a.LegalEntityModels, new List <LegalEntityModel>()
            {
                _fixture.Build <LegalEntityModel>()
                .With(l => l.VrfVendorId, string.Empty)
                .With(l => l.AccountLegalEntityId, _account.AccountLegalEntityId)
                .Create()
            })
                               .Create();

            var domainAccount = Domain.Accounts.Account.Create(accountModel);

            _mockAccountDomainRepository
            .Setup(m => m.Find(incentive.Account.Id))
            .ReturnsAsync(domainAccount);

            var command = new ValidatePendingPaymentCommand(incentive.Id, pendingPayment.Id, collectionPeriod.AcademicYear, collectionPeriod.PeriodNumber);

            // Act
            await _sut.Handle(command);

            // Assert
            incentive.PendingPayments.Count(p => p.PendingPaymentValidationResults.Count >= 1).Should().Be(1);
            incentive.PendingPayments.First().IsValidated(new Domain.ValueObjects.CollectionPeriod(collectionPeriod.PeriodNumber, collectionPeriod.AcademicYear)).Should().BeFalse();
        }
        public async Task Then_a_passing_pendingPayment_validation_result_is_saved_against_the_pendingPayment_and_the_pending_payment_is_validated()
        {
            //Arrange
            var incentive = _fixture.Create <Domain.ApprenticeshipIncentives.ApprenticeshipIncentive>();

            var pendingPayment   = incentive.PendingPayments.First();
            var collectionPeriod = _collectionCalendarPeriods.First().CollectionPeriod;

            var command = new ValidatePendingPaymentCommand(incentive.Id, pendingPayment.Id, collectionPeriod.AcademicYear, collectionPeriod.PeriodNumber);

            // Act
            await _sut.Handle(command);

            // Assert
            incentive.PendingPayments.Count(p => p.PendingPaymentValidationResults.Count >= 1).Should().Be(1);
            incentive.PendingPayments.First().IsValidated(new Domain.ValueObjects.CollectionPeriod(collectionPeriod.PeriodNumber, collectionPeriod.AcademicYear)).Should().BeTrue();
        }
        public async Task Then_a_failed_pendingPayment_validation_result_is_saved_and_no_further_validation_performed_when_no_ILR_submission_found()
        {
            // Arrange
            var incentive = _fixture.Create <Domain.ApprenticeshipIncentives.ApprenticeshipIncentive>();

            _learner.SetSubmissionData(null);
            Assert.IsFalse(_learner.SubmissionData.SubmissionFound);

            var pendingPayment   = incentive.PendingPayments.First();
            var collectionPeriod = _collectionCalendarPeriods.First().CollectionPeriod;

            var accountModel = _fixture.Build <AccountModel>()
                               .With(a => a.Id, _account.Id)
                               .With(a => a.LegalEntityModels, new List <LegalEntityModel>()
            {
                _fixture.Build <LegalEntityModel>()
                .With(l => l.VrfVendorId, "VENDORID")
                .With(l => l.AccountLegalEntityId, _account.AccountLegalEntityId)
                .Create()
            })
                               .Create();

            var domainAccount = Domain.Accounts.Account.Create(accountModel);

            _mockAccountDomainRepository
            .Setup(m => m.Find(incentive.Account.Id))
            .ReturnsAsync(domainAccount);

            var command = new ValidatePendingPaymentCommand(incentive.Id, pendingPayment.Id, collectionPeriod.AcademicYear, collectionPeriod.PeriodNumber);

            // Act
            await _sut.Handle(command);

            // Assert
            var validationResult = incentive.PendingPayments.Single(x => x.PendingPaymentValidationResults.Count == 4)
                                   .PendingPaymentValidationResults.Single(x => x.Step == "HasIlrSubmission");

            validationResult.Result.Should().BeFalse();
        }