private string GetCohortStatus(GetCohortResponse cohort, IReadOnlyCollection <DraftApprenticeshipDto> draftApprenticeships)
        {
            if (cohort.TransferSenderId.HasValue &&
                cohort.TransferApprovalStatus == CommitmentsV2.Types.TransferApprovalStatus.Pending)
            {
                if (cohort.WithParty == CommitmentsV2.Types.Party.TransferSender)
                {
                    return("Pending - with funding employer");
                }
                else if (cohort.WithParty == CommitmentsV2.Types.Party.Employer)
                {
                    return(GetEmployerOnlyStatus(cohort));
                }
                else if (cohort.WithParty == CommitmentsV2.Types.Party.Provider)
                {
                    return(GetProviderOnlyStatus(cohort));
                }
            }
            else if (cohort.IsApprovedByEmployer && cohort.IsApprovedByProvider)
            {
                return("Approved");
            }
            else if (cohort.WithParty == CommitmentsV2.Types.Party.Provider)
            {
                return(GetProviderOnlyStatus(cohort));
            }
            else if (cohort.WithParty == CommitmentsV2.Types.Party.Employer)
            {
                return(GetEmployerOnlyStatus(cohort));
            }

            return("New request");
        }
            public CreateCohortWithOtherPartyControllerTestFixture SetGetCohortResponse(
                GetCohortResponse getCohortResponse)
            {
                CommitmentsApiClientMock.Setup(c => c.GetCohort(It.IsAny <long>(), It.IsAny <CancellationToken>()))
                .ReturnsAsync(getCohortResponse);

                return(this);
            }
        private GetCohortResponse GetCohortResponseMock()
        {
            var response = new GetCohortResponse
            {
                CohortId = _cohortId
            };

            return(response);
        }
        public DetailsTestFixture WithCohort(GetCohortResponse cohortDetails = null)
        {
            var returnValue = cohortDetails ?? CohortDetails;

            CommitmentsApiClientMock
            .Setup(cs => cs.GetCohort(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(returnValue);

            return(this);
        }
コード例 #5
0
        private async Task <TrainingProgramme[]> GetCourses(GetCohortResponse cohortDetails)
        {
            var result = await _mediator.Send(new GetTrainingCoursesQueryRequest
            {
                IncludeFrameworks = (!cohortDetails.IsFundedByTransfer &&
                                     cohortDetails.LevyStatus != ApprenticeshipEmployerType.NonLevy) ||
                                    cohortDetails.IsLinkedToChangeOfPartyRequest
            });

            return(result.TrainingCourses);
        }
コード例 #6
0
        public async Task <AcknowledgementViewModel> Map(AcknowledgementRequest source)
        {
            GetCohortResponse cohort = await _commitmentsApiClient.GetCohort(source.CohortId);

            var result = new AcknowledgementViewModel
            {
                ProviderId      = source.ProviderId,
                CohortReference = source.CohortReference,
                EmployerName    = cohort.LegalEntityName,
                ProviderName    = cohort.ProviderName,
                CohortId        = source.CohortId,
                Message         = string.IsNullOrWhiteSpace(cohort.LatestMessageCreatedByProvider)? "No message added" : cohort.LatestMessageCreatedByProvider,
                WhatHappensNext = new List <string>(),
                WithParty       = cohort.WithParty,
                IsTransfer      = cohort.TransferSenderId.HasValue,

                CohortApproved         = cohort.IsApprovedByProvider && cohort.IsApprovedByEmployer,
                ChangeOfPartyRequestId = cohort.ChangeOfPartyRequestId
            };

            switch (source.SaveStatus)
            {
            case SaveStatus.ApproveAndSend when(cohort.TransferSenderId.HasValue && cohort.ChangeOfPartyRequestId == null):
                result.WhatHappensNext.AddRange(new[]
                {
                    "The employer will review the cohort and either approve or contact you with an update.",
                    "Once the employer approves the cohort, a transfer request will be sent to the funding employer to review.",
                    "You’ll receive a notification when the funding employer approves or rejects the transfer request."
                });

                break;

            case SaveStatus.ApproveAndSend:
                result.WhatHappensNext.Add("The employer will review the cohort and either approve it or contact you with an update.");
                break;

            default:
                result.WhatHappensNext.Add("The updated cohort will appear in the employer’s account for them to review.");
                break;
            }

            if (result.CohortApproved)
            {
                result.PageTitle = "Cohort approved";
            }
            else
            {
                result.PageTitle = source.SaveStatus == SaveStatus.ApproveAndSend
                    ? "Cohort approved and sent to employer"
                    : "Cohort sent to employer for review";
            }

            return(result);
        }
        public DetailsViewModelMapperTestsFixture()
        {
            _autoFixture = new Fixture();

            Cohort = _autoFixture.Build <GetCohortResponse>().Without(x => x.TransferSenderId).Without(x => x.ChangeOfPartyRequestId).Create();
            AccountLegalEntityResponse = _autoFixture.Create <AccountLegalEntityResponse>();
            LegalEntityViewModel       = _autoFixture.Create <LegalEntityViewModel>();

            var draftApprenticeships = CreateDraftApprenticeshipDtos(_autoFixture);

            _autoFixture.Register(() => draftApprenticeships);
            DraftApprenticeshipsResponse = _autoFixture.Create <GetDraftApprenticeshipsResponse>();

            CommitmentsApiClient = new Mock <ICommitmentsApiClient>();
            CommitmentsApiClient.Setup(x => x.GetCohort(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(Cohort);
            CommitmentsApiClient.Setup(x => x.GetDraftApprenticeships(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(DraftApprenticeshipsResponse);
            CommitmentsApiClient.Setup(x => x.GetAccountLegalEntity(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(AccountLegalEntityResponse);

            AccountApiClient = new Mock <IAccountApiClient>();
            AccountApiClient.Setup(x => x.GetLegalEntity(It.IsAny <string>(), It.IsAny <long>())).ReturnsAsync(LegalEntityViewModel);

            _fundingPeriods = new List <TrainingProgrammeFundingPeriod>
            {
                new TrainingProgrammeFundingPeriod {
                    EffectiveFrom = _startFundingPeriod, EffectiveTo = _endFundingPeriod, FundingCap = 1000
                },
                new TrainingProgrammeFundingPeriod {
                    EffectiveFrom = _startFundingPeriod.AddMonths(1), EffectiveTo = _endFundingPeriod.AddMonths(1), FundingCap = 500
                }
            };
            _trainingProgramme = new TrainingProgramme {
                EffectiveFrom = DefaultStartDate, EffectiveTo = DefaultStartDate.AddYears(1), FundingPeriods = _fundingPeriods
            };

            CommitmentsApiClient.Setup(x => x.GetTrainingProgramme(It.Is <string>(c => !string.IsNullOrEmpty(c)), CancellationToken.None))
            .ReturnsAsync(new GetTrainingProgrammeResponse {
                TrainingProgramme = _trainingProgramme
            });
            CommitmentsApiClient.Setup(x => x.GetTrainingProgramme("no-course", CancellationToken.None))
            .ThrowsAsync(new RestHttpClientException(new HttpResponseMessage(HttpStatusCode.NotFound)
            {
                RequestMessage = new HttpRequestMessage(),
                ReasonPhrase   = "Url not found"
            }, "Course not found"));

            EncodingService = new Mock <IEncodingService>();
            SetEncodingOfApprenticeIds();

            Mapper = new DetailsViewModelMapper(CommitmentsApiClient.Object, EncodingService.Object, AccountApiClient.Object);
            Source = _autoFixture.Create <DetailsRequest>();
        }
コード例 #8
0
        public async Task Then_The_Api_Is_Called_With_The_Request_And_The_Cohort_Is_Returned(
            GetCohortQuery query,
            GetCohortResponse apiResponse,
            [Frozen] Mock <ICommitmentsV2ApiClient <CommitmentsV2ApiConfiguration> > apiClient,
            GetCohortQueryHandler handler
            )
        {
            apiClient.Setup(x => x.Get <GetCohortResponse>(It.Is <GetCohortRequest>(x => x.CohortId == query.CohortId))).ReturnsAsync(apiResponse);

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

            actual.Should().BeEquivalentTo((GetCohortResult)apiResponse);
        }
コード例 #9
0
        public async Task Then_Gets_Cohort_From_CommitmentsV2_Api(
            GetCohortQuery query,
            GetCohortResponse apiResponse,
            [Frozen] Mock <ICommitmentsV2ApiClient <CommitmentsV2ApiConfiguration> > mockApiClient,
            GetCohortQueryHandler handler)
        {
            mockApiClient
            .Setup(client => client.Get <GetCohortResponse>(It.Is <GetCohortRequest>(request => request.CohortId == query.CohortId)))
            .ReturnsAsync(apiResponse);

            var result = await handler.Handle(query, CancellationToken.None);

            result.Cohort.Should().BeEquivalentTo(apiResponse);
        }
コード例 #10
0
        public async Task Arrange()
        {
            var autoFixture = new Fixture();

            _allTrainingProgrammes      = autoFixture.CreateMany <TrainingProgramme>().ToList();
            _standardTrainingProgrammes = autoFixture.CreateMany <TrainingProgramme>().ToList();
            _encodedApprenticeshipId    = autoFixture.Create <string>();
            _cohortReference            = autoFixture.Create <string>();

            _encodingService = new Mock <IEncodingService>();
            _encodingService
            .Setup(x => x.Encode(It.IsAny <long>(), It.Is <EncodingType>(e => e == EncodingType.ApprenticeshipId)))
            .Returns(_encodedApprenticeshipId);
            _encodingService
            .Setup(x => x.Encode(It.IsAny <long>(), It.Is <EncodingType>(e => e == EncodingType.CohortReference)))
            .Returns(_cohortReference);

            _draftApprenticeshipResponse = autoFixture.Create <GetDraftApprenticeshipResponse>();
            _draftApprenticeshipResponse.IsContinuation = false;
            _commitmentsApiClient = new Mock <ICommitmentsApiClient>();
            _commitmentsApiClient.Setup(x =>
                                        x.GetDraftApprenticeship(It.IsAny <long>(), It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_draftApprenticeshipResponse);
            _commitmentsApiClient
            .Setup(x => x.GetAllTrainingProgrammeStandards(It.IsAny <CancellationToken>()))
            .ReturnsAsync(new GetAllTrainingProgrammeStandardsResponse
            {
                TrainingProgrammes = _standardTrainingProgrammes
            });

            _commitmentsApiClient
            .Setup(x => x.GetAllTrainingProgrammes(It.IsAny <CancellationToken>()))
            .ReturnsAsync(new GetAllTrainingProgrammesResponse
            {
                TrainingProgrammes = _allTrainingProgrammes
            });

            _cohort           = autoFixture.Create <GetCohortResponse>();
            _cohort.WithParty = Party.Employer;
            _cohort.ChangeOfPartyRequestId = null;
            _commitmentsApiClient.Setup(x => x.GetCohort(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_cohort);

            _source        = autoFixture.Create <EditDraftApprenticeshipRequest>();
            _source.Cohort = _cohort;
            _mapper        = new EditDraftApprenticeshipViewModelMapper(_commitmentsApiClient.Object, _encodingService.Object);

            _result = await _mapper.Map(TestHelper.Clone(_source)) as EditDraftApprenticeshipViewModel;
        }
 private static string GetEmployerOnlyStatus(GetCohortResponse cohort)
 {
     if (cohort.LastAction == CommitmentsV2.Types.LastAction.None)
     {
         return("New request");
     }
     else if (cohort.LastAction == CommitmentsV2.Types.LastAction.Amend)
     {
         return("Under review with employer");
     }
     else if (cohort.LastAction == CommitmentsV2.Types.LastAction.Approve)
     {
         return("With Employer for approval");
     }
     else
     {
         return("Under review with employer");
     }
 }
        public ApprovedViewModelMapperTestsFixture()
        {
            _autoFixture = new Fixture();

            Cohort = _autoFixture.Create <GetCohortResponse>();

            DraftApprenticeshipsResponse = _autoFixture.Create <GetDraftApprenticeshipsResponse>();

            CommitmentsApiClient = new Mock <ICommitmentsApiClient>();
            CommitmentsApiClient.Setup(x => x.GetCohort(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(Cohort);

            CommitmentsApiClient.Setup(x => x.GetDraftApprenticeships(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(DraftApprenticeshipsResponse);

            EncodingService = new Mock <IEncodingService>();

            Mapper = new ApprovedViewModelMapper(CommitmentsApiClient.Object, EncodingService.Object);
            Source = _autoFixture.Create <ApprovedRequest>();
        }
        public ConfirmDeleteViewModelMapperTestsFixture()
        {
            _autoFixture = new Fixture();

            Cohort = _autoFixture.Build <GetCohortResponse>().Create();

            var draftApprenticeships = CreateDraftApprenticeshipDtos(_autoFixture);

            _autoFixture.Register(() => draftApprenticeships);
            DraftApprenticeshipsResponse = _autoFixture.Create <GetDraftApprenticeshipsResponse>();

            CommitmentsApiClient = new Mock <ICommitmentsApiClient>();
            CommitmentsApiClient.Setup(x => x.GetCohort(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(Cohort);
            CommitmentsApiClient.Setup(x => x.GetDraftApprenticeships(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(DraftApprenticeshipsResponse);

            Sut    = new ConfirmDeleteViewModelMapper(CommitmentsApiClient.Object);
            Source = _autoFixture.Create <DetailsRequest>();
        }
コード例 #14
0
        public DetailsTestFixture()
        {
            ViewModel = new Mock <IDraftApprenticeshipViewModel>();
            CommitmentsApiClientMock = new Mock <ICommitmentsApiClient>();

            DetailsRequest = new DetailsRequest
            {
                AccountHashedId             = AccountHashedId,
                CohortId                    = CohortId,
                CohortReference             = CohortReference,
                DraftApprenticeshipId       = DraftApprenticeshipId,
                DraftApprenticeshipHashedId = DraftApprenticeshipHashedId
            };
            CohortDetails = new GetCohortResponse
            {
                CohortId     = CohortId,
                ProviderName = "ProviderName",
                WithParty    = Party.Employer
            };
            EditDraftApprenticeshipDetails = new GetDraftApprenticeshipResponse
            {
                Id = DraftApprenticeshipId
            };
            ApiErrors = new List <ErrorDetail> {
                new ErrorDetail("Field1", "Message1")
            };

            ModelMapperMock = new Mock <IModelMapper>();
            ModelMapperMock.Setup(x => x.Map <IDraftApprenticeshipViewModel>(It.IsAny <DetailsRequest>()))
            .ReturnsAsync(ViewModel.Object);

            AuthorizationServiceMock = new Mock <IAuthorizationService>();
            AuthorizationServiceMock.Setup(x => x.IsAuthorized(EmployerFeature.EnhancedApproval)).Returns(false);

            Sut = new DraftApprenticeshipController(
                ModelMapperMock.Object,
                CommitmentsApiClientMock.Object,
                AuthorizationServiceMock.Object,
                Mock.Of <IEncodingService>());
        }
コード例 #15
0
        public async Task Arrange()
        {
            var autoFixture = new Fixture();

            _allTrainingProgrammes      = autoFixture.CreateMany <TrainingProgramme>().ToList();
            _standardTrainingProgrammes = autoFixture.CreateMany <TrainingProgramme>().ToList();

            _cohort               = autoFixture.Create <GetCohortResponse>();
            _cohort.WithParty     = Party.Employer;
            _commitmentsApiClient = new Mock <ICommitmentsApiClient>();
            _commitmentsApiClient.Setup(x => x.GetCohort(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_cohort);

            _commitmentsApiClient
            .Setup(x => x.GetAllTrainingProgrammeStandards(It.IsAny <CancellationToken>()))
            .ReturnsAsync(new GetAllTrainingProgrammeStandardsResponse
            {
                TrainingProgrammes = _standardTrainingProgrammes
            });

            _commitmentsApiClient
            .Setup(x => x.GetAllTrainingProgrammes(It.IsAny <CancellationToken>()))
            .ReturnsAsync(new GetAllTrainingProgrammesResponse
            {
                TrainingProgrammes = _allTrainingProgrammes
            });

            _encodedTransferSenderId = autoFixture.Create <string>();
            _encodingService         = new Mock <IEncodingService>();
            _encodingService
            .Setup(x => x.Encode(It.IsAny <long>(), It.Is <EncodingType>(e => e == EncodingType.PublicAccountId)))
            .Returns(_encodedTransferSenderId);

            _mapper = new AddDraftApprenticeshipViewModelMapper(_commitmentsApiClient.Object, _encodingService.Object);

            _source = autoFixture.Create <AddDraftApprenticeshipRequest>();
            _source.StartMonthYear = "092020";

            _result = await _mapper.Map(TestHelper.Clone(_source));
        }
コード例 #16
0
        public void Arrange()
        {
            var autoFixture = new Fixture();

            _cohort = autoFixture.Create <GetCohortResponse>();

            _request = autoFixture.Create <DraftApprenticeshipRequest>();

            _apiClient = new Mock <ICommitmentsApiClient>();

            _apiClient.Setup(x => x.GetCohort(It.IsAny <long>(), It.IsAny <CancellationToken>())).ReturnsAsync(_cohort);

            _modelMapper = new Mock <IModelMapper>();

            _modelMapper.Setup(x => x.Map <IDraftApprenticeshipViewModel>(It.IsAny <EditDraftApprenticeshipRequest>()))
            .ReturnsAsync(new EditDraftApprenticeshipViewModel());

            _modelMapper.Setup(x => x.Map <ViewDraftApprenticeshipViewModel>(It.IsAny <DraftApprenticeshipRequest>()))
            .ReturnsAsync(new ViewDraftApprenticeshipViewModel());

            _mapper = new IDraftApprenticeshipDetailsViewModelMapper(_apiClient.Object, _modelMapper.Object);
        }
        private static string GetProviderOnlyStatus(GetCohortResponse cohort)
        {
            if (cohort.LastAction == CommitmentsV2.Types.LastAction.None)
            {
                return("New request");
            }
            else if (cohort.LastAction == CommitmentsV2.Types.LastAction.Amend)
            {
                return("Ready for review");
            }
            else if (cohort.LastAction == CommitmentsV2.Types.LastAction.Approve)
            {
                if (!cohort.IsApprovedByProvider && !cohort.IsApprovedByEmployer)
                {
                    return("Ready for review");
                }

                return("Ready for approval");
            }
            else
            {
                return("New request");
            }
        }
        public async Task GetFinished_ValidModel_ShouldReturnFinishedViewModelWithMappedValues(FinishedRequest request, GetCohortResponse getCohortResponse)
        {
            _fixture.SetGetCohortResponse(getCohortResponse);

            var response = await _fixture.Sut.Finished(request);

            var model = response.VerifyReturnsViewModel().WithModel <FinishedViewModel>();

            Assert.AreEqual(model.CohortReference, request.CohortReference);
            Assert.AreEqual(model.LegalEntityName, getCohortResponse.LegalEntityName);
            Assert.AreEqual(model.ProviderName, getCohortResponse.ProviderName);
            Assert.AreEqual(model.Message, getCohortResponse.LatestMessageCreatedByEmployer);
        }
        private async Task <IReadOnlyCollection <DetailsViewCourseGroupingModel> > GroupCourses(IEnumerable <DraftApprenticeshipDto> draftApprenticeships, List <ApprenticeshipEmailOverlap> emailOverlaps, GetCohortResponse cohortResponse)
        {
            var groupedByCourse = draftApprenticeships
                                  .GroupBy(a => new { a.CourseCode, a.CourseName })
                                  .Select(course => new DetailsViewCourseGroupingModel
            {
                CourseCode           = course.Key.CourseCode,
                CourseName           = course.Key.CourseName,
                DraftApprenticeships = course
                                       // Sort before on raw properties rather than use displayName property post select for performance reasons
                                       .OrderBy(a => a.FirstName)
                                       .ThenBy(a => a.LastName)
                                       .Select(a => new CohortDraftApprenticeshipViewModel
                {
                    Id = a.Id,
                    DraftApprenticeshipHashedId = _encodingService.Encode(a.Id, EncodingType.ApprenticeshipId),
                    FirstName           = a.FirstName,
                    LastName            = a.LastName,
                    Cost                = a.Cost,
                    DateOfBirth         = a.DateOfBirth,
                    EndDate             = a.EndDate,
                    StartDate           = a.StartDate,
                    OriginalStartDate   = a.OriginalStartDate,
                    HasOverlappingEmail = emailOverlaps.Any(x => x.Id == a.Id),
                    ULN        = a.Uln,
                    IsComplete = IsDraftApprenticeshipComplete(a, cohortResponse)
                })
                                       .ToList()
            })
                                  .OrderBy(c => c.CourseName)
                                  .ToList();

            PopulateFundingBandExcessModels(groupedByCourse);
            await CheckUlnOverlap(groupedByCourse);

            PopulateEmailOverlapsModel(groupedByCourse);

            return(groupedByCourse);
        }
 private bool IsDraftApprenticeshipComplete(DraftApprenticeshipDto draftApprenticeship, GetCohortResponse cohortResponse) =>
 !(
     string.IsNullOrWhiteSpace(draftApprenticeship.FirstName) || string.IsNullOrWhiteSpace(draftApprenticeship.LastName) ||
     draftApprenticeship.DateOfBirth == null || string.IsNullOrWhiteSpace(draftApprenticeship.CourseName) ||
     draftApprenticeship.StartDate == null || draftApprenticeship.EndDate == null || draftApprenticeship.Cost == null ||
     (cohortResponse.ApprenticeEmailIsRequired && string.IsNullOrWhiteSpace(draftApprenticeship.Email) && !cohortResponse.IsLinkedToChangeOfPartyRequest)
     );
コード例 #21
0
        public EditApprenticeshipRequestToViewModelMapperTestsFixture()
        {
            //Arrange
            var autoFixture = new Fixture();

            _request = autoFixture.Build <EditApprenticeshipRequest>()
                       .With(x => x.AccountHashedId, "123")
                       .With(x => x.ApprenticeshipHashedId, "456")
                       .Create();
            ApprenticeshipResponse = autoFixture.Build <GetApprenticeshipResponse>()
                                     .With(x => x.CourseCode, "ABC")
                                     .With(x => x.Version, "1.0")
                                     .With(x => x.DateOfBirth, autoFixture.Create <DateTime>())
                                     .Create();
            _priceEpisodesResponse = autoFixture.Build <GetPriceEpisodesResponse>()
                                     .With(x => x.PriceEpisodes, new List <PriceEpisode> {
                new PriceEpisode {
                    Cost = 1000, ToDate = DateTime.Now.AddMonths(-1)
                }
            })
                                     .Create();

            _cohortResponse  = autoFixture.Create <GetCohortResponse>();
            _accountResponse = autoFixture.Create <AccountResponse>();
            _allTrainingProgrammeStandardsResponse = autoFixture.Create <GetAllTrainingProgrammeStandardsResponse>();
            _allTrainingProgrammeResponse          = autoFixture.Create <GetAllTrainingProgrammesResponse>();

            _trainingProgrammeResponse = autoFixture.Build <GetTrainingProgrammeResponse>().Create();

            _mockCommitmentsApiClient = new Mock <ICommitmentsApiClient>();
            _mockCommitmentsApiClient.Setup(r => r.GetApprenticeship(It.IsAny <long>(), CancellationToken.None))
            .ReturnsAsync(ApprenticeshipResponse);
            _mockCommitmentsApiClient.Setup(c => c.GetPriceEpisodes(It.IsAny <long>(), CancellationToken.None))
            .ReturnsAsync(_priceEpisodesResponse);

            _mockCommitmentsApiClient.Setup(t => t.GetTrainingProgramme(ApprenticeshipResponse.CourseCode, It.IsAny <CancellationToken>()))
            .ReturnsAsync(_trainingProgrammeResponse);

            _mockCommitmentsApiClient.Setup(t => t.GetCohort(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => _cohortResponse);

            _mockCommitmentsApiClient.Setup(t => t.GetAccount(_request.AccountId, It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => _accountResponse);

            _mockCommitmentsApiClient.Setup(t => t.GetAllTrainingProgrammeStandards(It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => {
                _courses = _allTrainingProgrammeStandardsResponse.TrainingProgrammes;
                return(_allTrainingProgrammeStandardsResponse);
            });

            _mockCommitmentsApiClient.Setup(t => t.GetAllTrainingProgrammes(It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => {
                _courses = _allTrainingProgrammeResponse.TrainingProgrammes;
                return(_allTrainingProgrammeResponse);
            });

            _mockAcademicYearDateProvider = new Mock <IAcademicYearDateProvider>();

            _mockCurrentDateTimeProvider = new Mock <ICurrentDateTime>();

            _mapper = new EditApprenticeshipRequestToViewModelMapper(_mockCommitmentsApiClient.Object, _mockAcademicYearDateProvider.Object, _mockCurrentDateTimeProvider.Object);
        }
        public DraftApprenticeshipControllerTestFixture()
        {
            var autoFixture = new Fixture();

            _cohortId = autoFixture.Create <long>();
            _draftApprenticeshipId       = autoFixture.Create <long>();
            _providerId                  = autoFixture.Create <int>();
            _cohortReference             = autoFixture.Create <string>();
            _draftApprenticeshipHashedId = autoFixture.Create <string>();

            _editDraftApprenticeshipRequest = autoFixture.Build <EditDraftApprenticeshipRequest>()
                                              .With(x => x.CohortId, _cohortId)
                                              .With(x => x.DraftApprenticeshipId, _draftApprenticeshipId)
                                              .Create();

            _editDraftApprenticeshipDetails = autoFixture.Build <GetDraftApprenticeshipResponse>()
                                              .Create();

            _createAddDraftApprenticeshipRequest = new AddDraftApprenticeshipRequest();
            _updateDraftApprenticeshipRequest    = new UpdateDraftApprenticeshipRequest();

            _reservationsAddDraftApprenticeshipRequest = autoFixture.Build <ReservationsAddDraftApprenticeshipRequest>()
                                                         .With(x => x.ProviderId, _providerId)
                                                         .With(x => x.CohortId, _cohortId)
                                                         .With(x => x.CohortReference, _cohortReference)
                                                         .With(x => x.StartMonthYear, "012019")
                                                         .Create();

            _courseResponse = new GetTrainingCoursesQueryResponse
            {
                TrainingCourses = new TrainingProgramme[0]
            };

            _addModel = new AddDraftApprenticeshipViewModel
            {
                ProviderId      = _providerId,
                CohortId        = _cohortId,
                CohortReference = _cohortReference
            };

            _editModel = new EditDraftApprenticeshipViewModel
            {
                ProviderId                  = _providerId,
                CohortId                    = _cohortId,
                CohortReference             = _cohortReference,
                DraftApprenticeshipId       = _draftApprenticeshipId,
                DraftApprenticeshipHashedId = _draftApprenticeshipHashedId
            };

            _cohortResponse = autoFixture.Build <GetCohortResponse>()
                              .With(x => x.LevyStatus, ApprenticeshipEmployerType.Levy)
                              .With(x => x.ChangeOfPartyRequestId, default(long?))
                              .Create();

            _apiModelException = new CommitmentsApiModelException(new List <ErrorDetail>()
            {
                new ErrorDetail("Name", "Cannot be more than...")
            });

            _mediator = new Mock <IMediator>();
            _mediator.Setup(x => x.Send(It.IsAny <GetTrainingCoursesQueryRequest>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_courseResponse);

            _modelMapper = new Mock <IModelMapper>();
            _modelMapper.Setup(x => x.Map <AddDraftApprenticeshipRequest>(It.IsAny <AddDraftApprenticeshipViewModel>()))
            .ReturnsAsync(_createAddDraftApprenticeshipRequest);

            _modelMapper.Setup(x => x.Map <EditDraftApprenticeshipViewModel>(It.IsAny <EditDraftApprenticeshipRequest>()))
            .ReturnsAsync(_editModel);

            _modelMapper.Setup(x => x.Map <UpdateDraftApprenticeshipRequest>(It.IsAny <EditDraftApprenticeshipViewModel>()))
            .ReturnsAsync(_updateDraftApprenticeshipRequest);

            _linkGenerator = new Mock <ILinkGenerator>();
            _linkGenerator.Setup(x => x.ProviderApprenticeshipServiceLink(It.IsAny <string>()))
            .Returns <string>(input => input);

            _commitmentsApiClient = new Mock <ICommitmentsApiClient>();
            _commitmentsApiClient.Setup(x => x.GetCohort(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_cohortResponse);

            _controller = new DraftApprenticeshipController(_mediator.Object,
                                                            _linkGenerator.Object, _commitmentsApiClient.Object, _modelMapper.Object);
        }
 private bool IsWaitingToStartAndHasHadDataLockSuccessAndIsFundedByTransfer(GetApprenticeshipResponse apprenticeship, GetCohortResponse commitment)
 {
     return(commitment.IsFundedByTransfer &&
            HasHadDataLockSuccess(apprenticeship) &&
            IsWaitingToStart(apprenticeship));
 }