public async Task ThenFrameworksAreRetrievedForCohortsNotFundedByTransfer()
        {
            CommitmentView.TransferSender = null;

            await EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId");

            MockMediator.Verify(x => x.SendAsync(It.Is <GetTrainingProgrammesQueryRequest>(r => r.IncludeFrameworks)), Times.Once);
        }
        public async Task ThenPageTitleShouldBeDictatedByEditStatus(EditStatus editStatus, bool expectReadOnly)
        {
            CommitmentView.AgreementStatus = AgreementStatus.NotAgreed;
            CommitmentView.EditStatus      = editStatus;

            var result = await EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId");

            Assert.AreEqual(expectReadOnly, result.Data.IsReadOnly);
        }
        public void ThenIfCohortIsNotForTransferThenIfApprovedByBothPartiesShouldThrowAnException()
        {
            CommitmentView.AgreementStatus = AgreementStatus.BothAgreed;
            CommitmentView.EditStatus      = EditStatus.Both;
            CommitmentView.TransferSender  = null;

            Assert.ThrowsAsync <InvalidStateException>(() =>
                                                       EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId"));
        }
        public async Task ThenDeleteButtonShouldBeVisible()
        {
            CommitmentView.AgreementStatus = AgreementStatus.NotAgreed;
            CommitmentView.EditStatus      = EditStatus.EmployerOnly;

            var result = await EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId");

            Assert.IsFalse(result.Data.HideDeleteButton);
        }
        public async Task ThenCommitmentDetailsShouldBeReturned()
        {
            MockHashingService.Setup(h => h.HashValue(CommitmentView.Id)).Returns("HashedCmtId");

            var result = await EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId");

            Assert.AreEqual("HashedAccId", result.Data.HashedAccountId);
            Assert.AreEqual("HashedCmtId", result.Data.HashedId);
            Assert.AreEqual(CommitmentView.AccountLegalEntityPublicHashedId, result.Data.AccountLegalEntityPublicHashedId);
        }
        public async Task ThenFrameworksAreNotRetrievedForCohortsFundedByTransfer()
        {
            CommitmentView.EditStatus     = EditStatus.Both;
            CommitmentView.TransferSender = new TransferSender {
                Id = 123, TransferApprovalStatus = TransferApprovalStatus.Pending
            };

            await EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId");

            MockMediator.Verify(x => x.SendAsync(It.Is <GetTrainingProgrammesQueryRequest>(r => !r.IncludeFrameworks)), Times.Once);
        }
        public async Task ThenIfCohortIsFundedByTransferThenTransferSenderPublicHashedIdShouldBeReturned()
        {
            CommitmentView.TransferSender = new TransferSender {
                Id = 123, TransferApprovalStatus = TransferApprovalStatus.Pending
            };
            MockPublicHashingService.Setup(h => h.HashValue(CommitmentView.TransferSender.Id.Value)).Returns("HashedTrnId");

            var result = await EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId");

            Assert.AreEqual("HashedTrnId", result.Data.TransferSenderPublicHashedId);
        }
        public void ThenIfTheCohortWasApprovedByTransferSenderThenShouldThrowAnException()
        {
            CommitmentView.AgreementStatus = AgreementStatus.BothAgreed;
            CommitmentView.EditStatus      = EditStatus.Both;
            CommitmentView.TransferSender  = new TransferSender
            {
                TransferApprovalStatus = TransferApprovalStatus.Approved
            };

            Assert.ThrowsAsync <InvalidStateException>(() =>
                                                       EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId"));
        }
        public async Task ThenPageTitleForTransferRejectedShouldBeReviewYourCohort()
        {
            CommitmentView.AgreementStatus = AgreementStatus.BothAgreed;
            CommitmentView.EditStatus      = EditStatus.EmployerOnly;
            CommitmentView.TransferSender  = new TransferSender
            {
                TransferApprovalStatus = TransferApprovalStatus.Rejected
            };

            var result = await EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId");

            Assert.AreEqual("Review your cohort", result.Data.PageTitle);
        }
        public async Task ThenIfTheCohortIsPendingTransferApprovalThenItIsReadOnly()
        {
            CommitmentView.AgreementStatus = AgreementStatus.BothAgreed;
            CommitmentView.EditStatus      = EditStatus.Both;
            CommitmentView.TransferSender  = new TransferSender
            {
                TransferApprovalStatus = TransferApprovalStatus.Pending
            };

            var result = await EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId");

            Assert.IsTrue(result.Data.IsReadOnly);
        }
        public async Task ThenIfTheCohortIsFundedByATransferThenDeleteButtonShouldBeHidden(TransferApprovalStatus status)
        {
            CommitmentView.AgreementStatus = AgreementStatus.BothAgreed;
            CommitmentView.EditStatus      = EditStatus.EmployerOnly;
            CommitmentView.TransferSender  = new TransferSender
            {
                Id = 123,
                TransferApprovalStatus = status
            };

            var result = await EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId");

            Assert.IsTrue(result.Data.HideDeleteButton);
        }
        public async Task AndApprenticeshipIsOverFundingLimitThenACostWarningShouldBeAddedToViewModel()
        {
            CommitmentView.Apprenticeships = new List <Apprenticeship>
            {
                new Apprenticeship
                {
                    StartDate = new DateTime(2020, 2, 2),
                    Cost      = 500
                }
            };

            MockMediator.Setup(m => m.SendAsync(It.IsAny <GetTrainingProgrammesQueryRequest>()))
            .ReturnsAsync(new GetTrainingProgrammesQueryResponse
            {
                TrainingProgrammes = new List <TrainingProgramme>
                {
                    new TrainingProgramme
                    {
                        FundingPeriods = new List <TrainingProgrammeFundingPeriod>
                        {
                            new TrainingProgrammeFundingPeriod
                            {
                                EffectiveFrom = new DateTime(2020, 2, 1),
                                EffectiveTo   = new DateTime(2020, 3, 1),
                                FundingCap    = 100
                            }
                        },
                        EffectiveFrom = new DateTime(2020, 2, 1),
                        EffectiveTo   = new DateTime(2020, 3, 1),
                        Name          = "Tit"
                    }
                }
            });

            MockMediator.Setup(m => m.SendAsync(It.IsAny <GetOverlappingApprenticeshipsQueryRequest>()))
            .ReturnsAsync(new GetOverlappingApprenticeshipsQueryResponse
            {
                Overlaps = Enumerable.Empty <ApprenticeshipOverlapValidationResult>()
            });

            var result = await EmployerCommitmentOrchestrator.GetCommitmentDetails("HashedAccId", "HashedCmtId", "ExtUserId");

            Assert.IsTrue(TestHelper.EnumerablesAreEqual(new[] { new KeyValuePair <string, string>("0", "Cost for Tit") }, result.Data.Warnings.AsEnumerable()));
        }