Ejemplo n.º 1
0
        public async Task Arrange()
        {
            var autoFixture = new Fixture();

            _request = autoFixture.Create <ViewDraftApprenticeshipRequest>();

            _draftApprenticeship = autoFixture.Create <GetDraftApprenticeshipResponse>();
            _course = autoFixture.Create <TrainingProgramme>();

            _commitmentsApiClient = new Mock <ICommitmentsApiClient>();
            _commitmentsApiClient
            .Setup(x => x.GetTrainingProgramme(_draftApprenticeship.CourseCode, It.IsAny <CancellationToken>()))
            .ReturnsAsync(new GetTrainingProgrammeResponse
            {
                TrainingProgramme = _course
            });

            _commitmentsApiClient.Setup(x =>
                                        x.GetDraftApprenticeship(It.IsAny <long>(), It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_draftApprenticeship);

            _authorizationService = new Mock <IAuthorizationService>();

            _mapper = new ViewDraftApprenticeshipViewModelMapper(_commitmentsApiClient.Object, _authorizationService.Object);

            _result = await _mapper.Map(_request) as ViewDraftApprenticeshipViewModel;
        }
Ejemplo n.º 2
0
        public void AndSingleApprenticeshipThenApprenticeshipsOverFundingLimitIsCalculatedCorrectly(
            DateTime?apprenticeshipStartDate, decimal apprenticeshipCost,
            DateTime?fundingPeriodFrom, DateTime?fundingPeriodTo, int fundingCap, int expectedApprenticeshipsOverFundingLimit)
        {
            var apprenticeships = new[]
            {
                new ApprenticeshipListItemViewModel
                {
                    StartDate = apprenticeshipStartDate,
                    Cost      = apprenticeshipCost
                }
            };

            var trainingProgram = new TrainingProgramme
            {
                FundingPeriods = new List <TrainingProgrammeFundingPeriod>
                {
                    new TrainingProgrammeFundingPeriod
                    {
                        EffectiveFrom = fundingPeriodFrom,
                        EffectiveTo   = fundingPeriodTo,
                        FundingCap    = fundingCap
                    }
                },
                EffectiveFrom = fundingPeriodFrom,
                EffectiveTo   = fundingPeriodTo
            };

            var group = new ApprenticeshipListItemGroupViewModel(apprenticeships, trainingProgram);

            Assert.AreEqual(expectedApprenticeshipsOverFundingLimit, group.ApprenticeshipsOverFundingLimit);
        }
Ejemplo n.º 3
0
        public void SetUp()
        {
            _singleApprenticeship = new[]
            {
                new ApprenticeshipListItemViewModel
                {
                    StartDate = new DateTime(2020, 2, 2),
                    Cost      = 500
                }
            };

            _testTrainingProgramme = new TrainingProgramme
            {
                FundingPeriods = new List <TrainingProgrammeFundingPeriod>
                {
                    new TrainingProgrammeFundingPeriod
                    {
                        EffectiveFrom = new DateTime(2020, 2, 1),
                        EffectiveTo   = new DateTime(2020, 3, 1),
                        FundingCap    = TestTrainingProgrammeFundingCap
                    }
                },
                EffectiveFrom = new DateTime(2020, 2, 1),
                EffectiveTo   = new DateTime(2020, 3, 1)
            };
        }
Ejemplo n.º 4
0
        public ConfirmViewModelMapperFixture()
        {
            Fixture fixture = new Fixture();

            request                    = fixture.Create <ConfirmRequest>();
            request.StartDate          = "012020";
            request.EndDate            = "112020";
            getApprenticeshipResponse  = fixture.Create <GetApprenticeshipResponse>();
            trainingProgramme          = fixture.Create <TrainingProgramme>();
            accountLegalEntityResponse = fixture.Create <AccountLegalEntityResponse>();
            priceEpisodesResponse      = new GetPriceEpisodesResponse
            {
                PriceEpisodes = new List <GetPriceEpisodesResponse.PriceEpisode>
                {
                    new GetPriceEpisodesResponse.PriceEpisode {
                        Cost = 100, FromDate = DateTime.UtcNow
                    }
                }
            };

            var commitmentAiClient = new Mock <ICommitmentsApiClient>();

            commitmentAiClient.Setup(x => x.GetApprenticeship(request.ApprenticeshipId, It.IsAny <CancellationToken>())).ReturnsAsync(() => getApprenticeshipResponse);
            commitmentAiClient.Setup(x => x.GetAccountLegalEntity(request.AccountLegalEntityId, It.IsAny <CancellationToken>())).ReturnsAsync(() => accountLegalEntityResponse);
            commitmentAiClient.Setup(x => x.GetPriceEpisodes(request.ApprenticeshipId, It.IsAny <CancellationToken>())).ReturnsAsync(() => priceEpisodesResponse);
            commitmentAiClient
            .Setup(y => y.GetTrainingProgramme(getApprenticeshipResponse.CourseCode, CancellationToken.None))
            .ReturnsAsync(() => new
                          GetTrainingProgrammeResponse
            {
                TrainingProgramme = trainingProgramme
            });

            _sut = new ConfirmViewModelMapper(commitmentAiClient.Object, Mock.Of <ILogger <ConfirmViewModelMapper> >());
        }
Ejemplo n.º 5
0
        /// <summary>
        /// If all apprenticeships share the same Funding Cap, this is it.
        /// If they have different funding caps, or there is no trainingprogram or apprenticeships,
        /// or there is not enough data to calculate the funding cap for each apprenticeship, this is null
        /// </summary>
        private int?CalculateCommonFundingCap()
        {
            if (TrainingProgramme == null || !Apprenticeships.Any())
            {
                return(null);
            }

            if (Apprenticeships.Any(a => !a.StartDate.HasValue))
            {
                return(null);
            }

            var firstFundingCap = TrainingProgramme.FundingCapOn(Apprenticeships.First().StartDate.Value);

            // check for magic 0, which means unable to calculate a funding cap (e.g. date out of bounds)
            if (firstFundingCap == 0)
            {
                return(null);
            }

            if (Apprenticeships.Skip(1).Any(a => TrainingProgramme.FundingCapOn(a.StartDate.Value) != firstFundingCap))
            {
                return(null);
            }

            return(firstFundingCap);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// If all apprenticeships share the same Funding Cap, this is it.
        /// If they have different funding caps, or there is no trainingprogram or apprenticeships,
        /// or there is not enough data to calculate the funding cap for each apprenticeship, this is null
        /// </summary>
        private int?CalculateCommonFundingCap()
        {
            if (TrainingProgramme == null || !Apprenticeships.Any())
            {
                return(null);
            }

            if (!IsLinkedToChangeOfPartyRequest && Apprenticeships.Any(a => !a.StartDate.HasValue))
            {
                return(null);
            }

            int firstFundingCap = IsLinkedToChangeOfPartyRequest
                          ? TrainingProgramme.FundingCapOn(Apprenticeships.First().OriginalStartDate.Value)
                          : TrainingProgramme.FundingCapOn(Apprenticeships.First().StartDate.Value);

            // check for magic 0, which means unable to calculate a funding cap (e.g. date out of bounds)
            if (firstFundingCap == 0)
            {
                return(null);
            }

            if (Apprenticeships.Skip(1).Any(a => TrainingProgramme.FundingCapOn(a.StartDate.Value) != firstFundingCap))
            {
                return(null);
            }

            return(firstFundingCap);
        }
Ejemplo n.º 7
0
        public void AndNoApprenticeshipsThenThereAreNoApprenticeshipsOverFundingLimit()
        {
            var trainingProgram = new TrainingProgramme();

            var group = new ApprenticeshipListItemGroupViewModel(new ApprenticeshipListItemViewModel[0], trainingProgram);

            Assert.AreEqual(0, group.ApprenticeshipsOverFundingLimit);
        }
        public void Then_The_Fields_Are_Correctly_Mapped(TrainingProgramme source)
        {
            //Arrange
            var actual = (GetTrainingProgrammeResponse)source;

            //Assert
            actual.Should().BeEquivalentTo(source);
        }
Ejemplo n.º 9
0
        /// <remarks>
        /// ApprenticeshipsOverFundingLimit and CommonFundingCap are only guaraneteed to be correct if the ctor's params are not mutated after instantiation or on another thread during contruction
        /// </remarks>
        public ApprenticeshipListItemGroupViewModel(IList <ApprenticeshipListItemViewModel> apprenticeships, TrainingProgramme trainingProgramme = null)
        {
            TrainingProgramme = trainingProgramme;
            Apprenticeships   = apprenticeships;

            // calculating up-front assumes apprenticeships list and training program are not mutated after being passed to ctor
            ApprenticeshipsOverFundingLimit = CalculateApprenticeshipsOverFundingLimit();
            CommonFundingCap = CalculateCommonFundingCap();
        }
Ejemplo n.º 10
0
        /// <remarks>
        /// ApprenticeshipsOverFundingLimit and CommonFundingCap are only guaraneteed to be correct if the ctor's params are not mutated after instantiation or on another thread during contruction
        /// </remarks>
        public ApprenticeshipListItemGroupViewModel(IList <ApprenticeshipListItemViewModel> apprenticeships, TrainingProgramme trainingProgramme = null, bool isLinkedToChangeOfPartyRequest = false)
        {
            TrainingProgramme = trainingProgramme;
            Apprenticeships   = apprenticeships;
            IsLinkedToChangeOfPartyRequest = isLinkedToChangeOfPartyRequest;

            // calculating up-front assumes apprenticeships list and training program are not mutated after being passed to ctor
            ApprenticeshipsOverFundingLimit = CalculateApprenticeshipsOverFundingLimit();
            CommonFundingCap = CalculateCommonFundingCap();
        }
        public ConfirmEditApprenticeshipRequestToConfirmEditViewModelMapperTestsFixture()
        {
            var autoFixture = new Fixture();

            _apprenticeshipResponse = autoFixture.Build <GetApprenticeshipResponse>()
                                      .With(x => x.CourseCode, "ABC")
                                      .With(x => x.Version, "1.0")
                                      .With(x => x.StartDate, new DateTime(2020, 1, 1))
                                      .With(x => x.EndDate, new DateTime(2021, 1, 1))
                                      .With(x => x.DateOfBirth, new DateTime(1990, 1, 1))
                                      .Create();

            source = new EditApprenticeshipRequestViewModel();
            source.ApprenticeshipId  = _apprenticeshipResponse.Id;
            source.CourseCode        = _apprenticeshipResponse.CourseCode;
            source.FirstName         = _apprenticeshipResponse.FirstName;
            source.LastName          = _apprenticeshipResponse.LastName;
            source.Email             = _apprenticeshipResponse.Email;
            source.DateOfBirth       = new CommitmentsV2.Shared.Models.DateModel(_apprenticeshipResponse.DateOfBirth);
            source.Cost              = 1000;
            source.EmployerReference = _apprenticeshipResponse.EmployerReference;
            source.StartDate         = new CommitmentsV2.Shared.Models.MonthYearModel(_apprenticeshipResponse.StartDate.Month.ToString() + _apprenticeshipResponse.StartDate.Year);
            source.EndDate           = new CommitmentsV2.Shared.Models.MonthYearModel(_apprenticeshipResponse.EndDate.Month.ToString() + _apprenticeshipResponse.EndDate.Year);

            _priceEpisodeResponse = autoFixture.Build <GetPriceEpisodesResponse>()
                                    .With(x => x.PriceEpisodes, new List <PriceEpisode> {
                new PriceEpisode {
                    Cost = 1000, FromDate = DateTime.Now.AddMonths(-1), ToDate = null
                }
            })
                                    .Create();

            _standardSummary = autoFixture.Create <TrainingProgramme>();
            _standardSummary.EffectiveFrom  = new DateTime(2018, 1, 1);
            _standardSummary.EffectiveTo    = new DateTime(2022, 1, 1);
            _standardSummary.FundingPeriods = SetPriceBand(1000);

            _mockCommitmentsApiClient = new Mock <ICommitmentsApiClient>();

            _mockCommitmentsApiClient.Setup(c => c.GetApprenticeship(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_apprenticeshipResponse);
            _mockCommitmentsApiClient.Setup(c => c.GetPriceEpisodes(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_priceEpisodeResponse);
            _mockCommitmentsApiClient.Setup(t => t.GetTrainingProgrammeVersionByCourseCodeAndVersion(source.CourseCode, source.Version, It.IsAny <CancellationToken>()))
            .ReturnsAsync(new GetTrainingProgrammeResponse
            {
                TrainingProgramme = _standardSummary
            });

            _encodingService = new Mock <IEncodingService>();
            _encodingService.Setup(x => x.Decode(It.IsAny <string>(), EncodingType.ApprenticeshipId)).Returns(_apprenticeshipResponse.Id);
            _encodingService.Setup(x => x.Decode(It.IsAny <string>(), EncodingType.AccountId)).Returns(_apprenticeshipResponse.EmployerAccountId);

            _mapper = new ConfirmEditApprenticeshipRequestToConfirmEditViewModelMapper(_mockCommitmentsApiClient.Object, _encodingService.Object);
        }
        public AddDraftApprenticeshipCommandToDraftApprenticeshipDetailsMapperTestsFixture()
        {
            Fixture = new Fixture();
            Command = Fixture.Create <AddDraftApprenticeshipCommand>();
            AuthorizationService    = new Mock <IAuthorizationService>();
            TrainingProgramme       = new TrainingProgramme("TEST", "TEST", ProgrammeType.Framework, DateTime.MinValue, DateTime.MaxValue);
            TrainingProgrammeLookup = new Mock <ITrainingProgrammeLookup>();
            Mapper = new AddDraftApprenticeshipCommandToDraftApprenticeshipDetailsMapper(AuthorizationService.Object, TrainingProgrammeLookup.Object);

            TrainingProgrammeLookup.Setup(l => l.GetTrainingProgramme(It.IsAny <string>())).ReturnsAsync(TrainingProgramme);
        }
        public static int FundingCapOn(this TrainingProgramme course, DateTime date)
        {
            if (!IsActive(course.EffectiveTo, course.EffectiveFrom, date))
            {
                return(0);
            }

            var applicableFundingPeriod = course.FundingPeriods.FirstOrDefault(x => IsActive(x.EffectiveTo, x.EffectiveFrom, date));

            return(applicableFundingPeriod?.FundingCap ?? 0);
        }
        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>();
        }
        public async Task Then_Null_Is_Returned_From_The_Service_When_There_Is_No_Course(
            GetTrainingProgrammeQuery query,
            TrainingProgramme result,
            [Frozen] Mock <ITrainingProgrammeLookup> service,
            GetTrainingProgrammeQueryHandler handler)
        {
            service.Setup(x => x.GetTrainingProgramme(query.Id)).ReturnsAsync((TrainingProgramme)null);

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

            actual.TrainingProgramme.Should().BeNull();
        }
        public async Task Then_If_An_Exception_Is_Thrown_Then_Null_Is_Returned(
            GetTrainingProgrammeQuery query,
            TrainingProgramme result,
            [Frozen] Mock <ITrainingProgrammeLookup> service,
            GetTrainingProgrammeQueryHandler handler)
        {
            service.Setup(x => x.GetTrainingProgramme(query.Id)).ThrowsAsync(new Exception("Course not found"));

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

            actual.TrainingProgramme.Should().BeNull();
        }
Ejemplo n.º 17
0
        public static int FundingCapOn(this TrainingProgramme course, DateTime date)
        {
            //todo: would probably be better to return int? null or throw if out of range
            if (!course.IsActiveOn(date))
            {
                return(0);
            }

            var applicableFundingPeriod = course.FundingPeriods.FirstOrDefault(x => GetStatusOn(x.EffectiveFrom, x.EffectiveTo, date) == TrainingProgrammeStatus.Active);

            return(applicableFundingPeriod?.FundingCap ?? 0);
        }
        public async Task Then_The_Data_Is_Retrieved_From_The_Service(
            GetTrainingProgrammeQuery query,
            TrainingProgramme result,
            [Frozen] Mock <ITrainingProgrammeLookup> service,
            GetTrainingProgrammeQueryHandler handler)
        {
            service.Setup(x => x.GetTrainingProgramme(query.Id)).ReturnsAsync(result);

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

            actual.TrainingProgramme.Should().BeEquivalentTo(result);
        }
        public void ThenIfWithinCourseEffectiveRangeThenIsActive(DateTime?courseStart, DateTime?courseEnd, DateTime effectiveDate, bool expectIsActive)
        {
            //Arrange
            var course = new TrainingProgramme {
                EffectiveFrom = courseStart, EffectiveTo = courseEnd
            };

            //Act
            var result = course.IsActiveOn(effectiveDate);

            //Assert
            Assert.AreEqual(expectIsActive, result);
        }
        public void ThenTheCourseEffectiveDatesAreUsedToDetermineTheStatus(DateTime?courseStart, DateTime?courseEnd, DateTime effectiveDate, bool expectStatus)
        {
            //Arrange
            var course = new TrainingProgramme {
                EffectiveFrom = courseStart, EffectiveTo = courseEnd
            };

            //Act
            var result = course.IsActiveOn(effectiveDate);

            //Assert
            Assert.AreEqual(expectStatus, result);
        }
Ejemplo n.º 21
0
        private async Task <bool> HasNewerVersions(TrainingProgramme trainingProgramme)
        {
            if (trainingProgramme.ProgrammeType == ProgrammeType.Standard)
            {
                var newerVersionsResponse = await _commitmentsApiClient.GetNewerTrainingProgrammeVersions(trainingProgramme.StandardUId);

                if (newerVersionsResponse?.NewerVersions != null && newerVersionsResponse.NewerVersions.Count() > 0)
                {
                    return(true);
                }
            }

            return(false);
        }
        public void Arrange()
        {
            var autoFixture = new Fixture();

            _request = autoFixture.Build <ChangeOfProviderRequest>()
                       .With(x => x.NewStartMonth, 1)
                       .With(x => x.NewStartYear, 2020)
                       .With(x => x.NewEndMonth, 2)
                       .With(x => x.NewEndYear, 2022)
                       .With(x => x.NewPrice, 1500)
                       .Create();

            _apprenticeshipResponse = autoFixture.Build <GetApprenticeshipResponse>()
                                      .With(x => x.CourseCode, "ABC")
                                      .With(x => x.StartDate, new DateTime(2020, 1, 1))
                                      .With(x => x.StartDate, new DateTime(2021, 1, 1))
                                      .Create();

            _priceEpisodeResponse = autoFixture.Build <GetPriceEpisodesResponse>()
                                    .With(x => x.PriceEpisodes, new List <PriceEpisode> {
                new PriceEpisode {
                    Cost = 1000, ToDate = DateTime.Now.AddMonths(-1)
                },
                new PriceEpisode {
                    Cost = 2000, ToDate = null
                }
            })
                                    .Create();

            _standardSummary = autoFixture.Create <TrainingProgramme>();
            _standardSummary.EffectiveFrom  = new DateTime(2018, 1, 1);
            _standardSummary.EffectiveTo    = new DateTime(2022, 1, 1);
            _standardSummary.FundingPeriods = SetPriceBand(1000);

            _mockCommitmentsApiClient = new Mock <ICommitmentsApiClient>();

            _mockCommitmentsApiClient.Setup(c => c.GetApprenticeship(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_apprenticeshipResponse);
            _mockCommitmentsApiClient.Setup(c => c.GetPriceEpisodes(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_priceEpisodeResponse);
            _mockCommitmentsApiClient.Setup(t => t.GetTrainingProgramme(_apprenticeshipResponse.CourseCode, It.IsAny <CancellationToken>()))
            .ReturnsAsync(new GetTrainingProgrammeResponse
            {
                TrainingProgramme = _standardSummary
            });

            _mapper = new ConfirmDetailsAndSendViewModelMapper(_mockCommitmentsApiClient.Object);
        }
 private static DataLockViewModel MapDataLockStatus(DataLock dataLock, TrainingProgramme training)
 {
     return(new DataLockViewModel
     {
         DataLockEventDatetime = dataLock.DataLockEventDatetime,
         PriceEpisodeIdentifier = dataLock.PriceEpisodeIdentifier,
         ApprenticeshipId = dataLock.ApprenticeshipId,
         IlrTrainingCourseCode = dataLock.IlrTrainingCourseCode,
         IlrTrainingCourseName = training.Name,
         IlrActualStartDate = dataLock.IlrActualStartDate,
         IlrEffectiveFromDate = dataLock.IlrEffectiveFromDate,
         IlrPriceEffectiveToDate = dataLock.IlrPriceEffectiveToDate,
         IlrTotalCost = dataLock.IlrTotalCost,
         DataLockErrorCode = dataLock.ErrorCode
     });
 }
        private int?GetFundingBandCap(TrainingProgramme course, DateTime?startDate)
        {
            if (course == null)
            {
                return(null);
            }

            var cap = course.FundingCapOn(startDate.Value);

            if (cap > 0)
            {
                return(cap);
            }

            return(null);
        }
        public bool IsOverFundingLimit(TrainingProgramme trainingProgramme)
        {
            if (trainingProgramme == null)
            {
                return(false);
            }

            if (!StartDate.HasValue)
            {
                return(false);
            }

            var fundingCapAtStartDate = trainingProgramme.FundingCapOn(StartDate.Value);

            return(Cost.HasValue && fundingCapAtStartDate > 0 &&
                   Cost > fundingCapAtStartDate);
        }
Ejemplo n.º 26
0
        public ConfirmViewModelMapperFixture SetPriceBand(int fundingCap, DateTime startDate)
        {
            trainingProgramme = new TrainingProgramme()
            {
                FundingPeriods = new System.Collections.Generic.List <TrainingProgrammeFundingPeriod>
                {
                    new TrainingProgrammeFundingPeriod
                    {
                        EffectiveFrom = startDate.AddDays(-1),
                        EffectiveTo   = startDate.AddDays(1),
                        FundingCap    = fundingCap
                    }
                }
            };

            return(this);
        }
        public bool IsOverFundingLimit(TrainingProgramme trainingProgramme, bool isLinkedToChangeOfPartyRequest = false)
        {
            if (trainingProgramme == null)
            {
                return(false);
            }

            if (!isLinkedToChangeOfPartyRequest && !StartDate.HasValue)
            {
                return(false);
            }

            var fundingCapAtStartDate = trainingProgramme.FundingCapOn(isLinkedToChangeOfPartyRequest ? OriginalStartDate.Value : StartDate.Value);

            return(Cost.HasValue && fundingCapAtStartDate > 0 &&
                   Cost > fundingCapAtStartDate);
        }
Ejemplo n.º 28
0
        public async Task Arrange()
        {
            var autoFixture = new Fixture();

            _course                     = autoFixture.Create <TrainingProgramme>();
            _courseStandard             = autoFixture.Create <TrainingProgramme>();
            _providerResponse           = autoFixture.Create <GetProviderResponse>();
            _accountLegalEntityResponse = autoFixture.Build <AccountLegalEntityResponse>().With(x => x.LevyStatus, ApprenticeshipEmployerType.Levy).Create();
            _source                     = autoFixture.Create <ApprenticeRequest>();
            _source.StartMonthYear      = "062020";
            _source.TransferSenderId    = string.Empty;
            _source.AccountId           = 12345;

            _commitmentsApiClient = new Mock <ICommitmentsApiClient>();
            _commitmentsApiClient.Setup(x => x.GetProvider(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_providerResponse);
            _commitmentsApiClient.Setup(x => x.GetAccountLegalEntity(_source.AccountLegalEntityId, It.IsAny <CancellationToken>()))
            .ReturnsAsync(_accountLegalEntityResponse);
            _standardTrainingProgrammes = new List <TrainingProgramme> {
                _courseStandard
            };
            _commitmentsApiClient
            .Setup(x => x.GetAllTrainingProgrammeStandards(It.IsAny <CancellationToken>()))
            .ReturnsAsync(new GetAllTrainingProgrammeStandardsResponse
            {
                TrainingProgrammes = _standardTrainingProgrammes
            });
            _allTrainingProgrammes = new List <TrainingProgramme> {
                _courseStandard, _course
            };
            _commitmentsApiClient
            .Setup(x => x.GetAllTrainingProgrammes(It.IsAny <CancellationToken>()))
            .ReturnsAsync(new GetAllTrainingProgrammesResponse
            {
                TrainingProgrammes = _allTrainingProgrammes
            });


            _mapper = new ApprenticeViewModelMapper(
                _commitmentsApiClient.Object);

            _result = await _mapper.Map(TestHelper.Clone(_source));
        }
Ejemplo n.º 29
0
        public void AndApprenticeshipsHaveDifferentFundingCapsThenThereIsNoCommonFundingCap()
        {
            var apprenticeships = new[]
            {
                new ApprenticeshipListItemViewModel
                {
                    StartDate = new DateTime(2020, 1, 1)
                },
                new ApprenticeshipListItemViewModel
                {
                    StartDate = new DateTime(2020, 2, 1)
                }
            };

            _testTrainingProgramme = new TrainingProgramme
            {
                FundingPeriods = new List <TrainingProgrammeFundingPeriod>
                {
                    new TrainingProgrammeFundingPeriod
                    {
                        EffectiveFrom = new DateTime(2020, 1, 1),
                        EffectiveTo   = new DateTime(2020, 1, 31),
                        FundingCap    = 100
                    },
                    new TrainingProgrammeFundingPeriod
                    {
                        EffectiveFrom = new DateTime(2020, 2, 1),
                        EffectiveTo   = new DateTime(2020, 2, 28),
                        FundingCap    = 200
                    }
                },
                CourseCode    = "abc-123",
                EffectiveFrom = new DateTime(2020, 1, 1),
                EffectiveTo   = new DateTime(2020, 2, 28)
            };

            var group = new ApprenticeshipListItemGroupViewModel(apprenticeships, _testTrainingProgramme);

            Assert.AreEqual(null, group.CommonFundingCap);
        }
Ejemplo n.º 30
0
        public void Arrange()
        {
            _standards             = new List <TrainingProgramme>();
            _allTrainingProgrammes = new List <TrainingProgramme>();

            var standard = new TrainingProgramme
            {
                EffectiveFrom = new DateTime(2016, 01, 01),
                EffectiveTo   = new DateTime(2016, 12, 31),
                Name          = "Title"
            };

            var framework = new TrainingProgramme
            {
                EffectiveFrom = new DateTime(2017, 01, 01),
                EffectiveTo   = new DateTime(2017, 12, 31),
                Name          = "Title"
            };

            _standards.Add(standard);
            _allTrainingProgrammes = new List <TrainingProgramme> {
                standard, framework
            };

            _iTrainingProgrammeApiClient = new Mock <ICommitmentsApiClient>();

            _iTrainingProgrammeApiClient.Setup(x => x.GetAllTrainingProgrammeStandards(CancellationToken.None))
            .ReturnsAsync(new GetAllTrainingProgrammeStandardsResponse
            {
                TrainingProgrammes = _standards
            });

            _iTrainingProgrammeApiClient.Setup(x => x.GetAllTrainingProgrammes(CancellationToken.None))
            .ReturnsAsync(new GetAllTrainingProgrammesResponse()
            {
                TrainingProgrammes = _allTrainingProgrammes
            });

            _handler = new GetTrainingCoursesQueryHandler(_iTrainingProgrammeApiClient.Object);
        }