Example #1
0
        public When_Proximity_BackFillProviderPostTown_Function_Fires()
        {
            var opportunityItemRepository = Substitute.For <IRepository <OpportunityItem> >();

            _providerVenueRepository = Substitute.For <IRepository <ProviderVenue> >();
            _providerVenueRepository.GetManyAsync(Arg.Any <Expression <Func <ProviderVenue, bool> > >())
            .Returns(new List <ProviderVenue> {
                new ProviderVenue
                {
                    Postcode = "CV1 2WT",
                    Town     = null
                }
            }.AsQueryable());

            _functionLogRepository = Substitute.For <IRepository <FunctionLog> >();

            _googleMapsApiClient = Substitute.For <IGoogleMapApiClient>();
            _googleMapsApiClient.GetAddressDetailsAsync("CV1 2WT").Returns("Coventry");

            var locationApiClient = Substitute.For <ILocationApiClient>();

            var proximityFunctions = new Functions.Proximity(
                locationApiClient,
                _googleMapsApiClient,
                opportunityItemRepository,
                _providerVenueRepository,
                _functionLogRepository);

            proximityFunctions.BackFillProviderPostTownAsync(
                new TimerInfo(new ConstantSchedule(TimeSpan.Zero), null),
                new ExecutionContext(),
                new NullLogger <Functions.Proximity>()
                ).GetAwaiter().GetResult();
        }
        public async Task Then_Reasons_Should_Have_Only_Related_To_No_Suitable_Students(
            MatchingDbContext dbContext,
            OpportunityItem opportunityItem,
            IMapper mapper,
            [Frozen] ILogger <OpportunityRepository> logger,
            [Frozen] IRepository <OpportunityItem> opportunityItemRepository,
            [Frozen] IRepository <ProvisionGap> provisionGapRepository,
            [Frozen] IRepository <Domain.Models.Referral> referralRepository,
            [Frozen] IGoogleMapApiClient googleMapApiClient,
            [Frozen] IFileWriter <OpportunityReportDto> opportunityPipelineReportWriter,
            [Frozen] IDateTimeProvider dateTimeProvider
            )
        {
            await SetProvisionGapData(dbContext, opportunityItem, false, true, false);

            var opportunityRepository = new OpportunityRepository(logger, dbContext);

            var sut = new OpportunityService(mapper, opportunityRepository, opportunityItemRepository,
                                             provisionGapRepository, referralRepository, googleMapApiClient,
                                             opportunityPipelineReportWriter, dateTimeProvider);

            var result = await sut.GetOpportunityBasketAsync(opportunityItem.OpportunityId);

            result.ProvisionGapItems.Should().Contain(model => model.OpportunityType == "ProvisionGap").Which.Reason
            .Should().Contain("Providers do not have students doing the right course");

            result.ProvisionGapItems.Should().Contain(model => model.OpportunityType == "ProvisionGap").Which.Reason
            .Should().NotContain("Employer had a bad experience with them");
        }
 public ProviderVenueService(IMapper mapper,
                             IProviderVenueRepository providerVenueRepository,
                             ILocationApiClient locationApiClient,
                             IGoogleMapApiClient googleMapApiClient)
 {
     _mapper                  = mapper;
     _locationApiClient       = locationApiClient;
     _googleMapApiClient      = googleMapApiClient;
     _providerVenueRepository = providerVenueRepository;
 }
Example #4
0
 public Proximity(
     ILocationApiClient locationApiClient,
     IGoogleMapApiClient googleMapApiClient,
     IRepository <OpportunityItem> opportunityItemRepository,
     IRepository <ProviderVenue> providerVenueRepository,
     IRepository <FunctionLog> functionLogRepository)
 {
     _googleMapApiClient        = googleMapApiClient;
     _locationApiClient         = locationApiClient;
     _opportunityItemRepository = opportunityItemRepository;
     _providerVenueRepository   = providerVenueRepository;
     _functionLogRepository     = functionLogRepository;
 }
 public OpportunityService(
     IMapper mapper,
     IOpportunityRepository opportunityRepository,
     IRepository <OpportunityItem> opportunityItemRepository,
     IRepository <ProvisionGap> provisionGapRepository,
     IRepository <Referral> referralRepository,
     IGoogleMapApiClient googleMapApiClient,
     IFileWriter <OpportunityReportDto> opportunityPipelineReportWriter,
     IDateTimeProvider dateTimeProvider)
 {
     _mapper = mapper;
     _opportunityRepository           = opportunityRepository;
     _opportunityItemRepository       = opportunityItemRepository;
     _provisionGapRepository          = provisionGapRepository;
     _referralRepository              = referralRepository;
     _googleMapApiClient              = googleMapApiClient;
     _opportunityPipelineReportWriter = opportunityPipelineReportWriter;
     _dateTimeProvider = dateTimeProvider;
 }
        public When_ProviderVenueService_Is_Called_To_Create_Venue()
        {
            var httpContextAccessor = Substitute.For <IHttpContextAccessor>();

            var config = new MapperConfiguration(c =>
            {
                c.AddMaps(typeof(ProviderVenueMapper).Assembly);
                c.ConstructServicesUsing(type =>
                                         type.Name.Contains("LoggedInUserEmailResolver") ?
                                         new LoggedInUserEmailResolver <AddProviderVenueViewModel, Domain.Models.ProviderVenue>(httpContextAccessor) :
                                         type.Name.Contains("LoggedInUserNameResolver") ?
                                         (object)new LoggedInUserNameResolver <AddProviderVenueViewModel, Domain.Models.ProviderVenue>(httpContextAccessor) :
                                         type.Name.Contains("UtcNowResolver") ?
                                         new UtcNowResolver <AddProviderVenueViewModel, Domain.Models.ProviderVenue>(new DateTimeProvider()) :
                                         null);
            });
            var mapper = new Mapper(config);

            _providerVenueRepository = Substitute.For <IProviderVenueRepository>();

            _providerVenueRepository.GetSingleOrDefaultAsync(Arg.Any <Expression <Func <Domain.Models.ProviderVenue, bool> > >())
            .Returns(new Domain.Models.ProviderVenue());

            _locationApiClient = Substitute.For <ILocationApiClient>();
            _locationApiClient.GetGeoLocationDataAsync(UnFormattedPostcode, true).Returns(new PostcodeLookupResultDto
            {
                Postcode  = FormattedPostcode,
                Longitude = "1.2",
                Latitude  = "1.2"
            });

            _googleMapApiClient = Substitute.For <IGoogleMapApiClient>();
            _googleMapApiClient.GetAddressDetailsAsync(Arg.Is <string>(s => s == FormattedPostcode)).Returns("Coventry");

            var providerVenueService = new ProviderVenueService(mapper, _providerVenueRepository, _locationApiClient, _googleMapApiClient);

            var viewModel = new AddProviderVenueViewModel
            {
                Postcode = UnFormattedPostcode
            };

            providerVenueService.CreateVenueAsync(viewModel).GetAwaiter().GetResult();
        }
        public When_OpportunityService_Is_Called_To_Create_Opportunity_Item()
        {
            var httpContextAccessor = Substitute.For <IHttpContextAccessor>();

            httpContextAccessor.HttpContext.Returns(new DefaultHttpContext
            {
                User = new ClaimsPrincipal(new ClaimsIdentity(new[]
                {
                    new Claim(ClaimTypes.GivenName, "adminUserName")
                }))
            });

            var config = new MapperConfiguration(c =>
            {
                c.AddMaps(typeof(OpportunityMapper).Assembly);
                c.ConstructServicesUsing(type =>
                                         type.Name.Contains("LoggedInUserEmailResolver") ?
                                         new LoggedInUserEmailResolver <OpportunityItemDto, OpportunityItem>(httpContextAccessor) :
                                         type.Name.Contains("LoggedInUserNameResolver") ?
                                         (object)new LoggedInUserNameResolver <OpportunityItemDto, OpportunityItem>(httpContextAccessor) :
                                         type.Name.Contains("UtcNowResolver") ?
                                         new UtcNowResolver <OpportunityItemDto, OpportunityItem>(new DateTimeProvider()) :
                                         null);
            });
            var mapper = new Mapper(config);

            _opportunityItemRepository = Substitute.For <IRepository <OpportunityItem> >();

            _googleMapApiClient = Substitute.For <IGoogleMapApiClient>();
            _googleMapApiClient.GetAddressDetailsAsync(Arg.Is <string>(s => s == "AA1 1AA")).Returns("Coventry");

            var opportunityPipelineReportWriter = Substitute.For <IFileWriter <OpportunityReportDto> >();
            var dateTimeProvider = Substitute.For <IDateTimeProvider>();

            var opportunityRepository  = Substitute.For <IOpportunityRepository>();
            var provisionGapRepository = Substitute.For <IRepository <ProvisionGap> >();
            var referralRepository     = Substitute.For <IRepository <Domain.Models.Referral> >();

            _opportunityItemRepository.CreateAsync(Arg.Any <OpportunityItem>())
            .Returns(OpportunityItemId);

            var opportunityService = new OpportunityService(mapper, opportunityRepository, _opportunityItemRepository,
                                                            provisionGapRepository, referralRepository, _googleMapApiClient,
                                                            opportunityPipelineReportWriter, dateTimeProvider);

            var dto = new OpportunityItemDto
            {
                OpportunityId             = OpportunityId,
                OpportunityType           = OpportunityType.Referral,
                RouteId                   = 5,
                Postcode                  = "AA1 1AA",
                SearchRadius              = 10,
                JobRole                   = "Test Title",
                PlacementsKnown           = true,
                Placements                = 3,
                SearchResultProviderCount = 15,
                IsSaved                   = true,
                IsSelectedForReferral     = true,
                IsCompleted               = true,
                EmployerFeedbackSent      = true
            };

            _result = opportunityService.CreateOpportunityItemAsync(dto).GetAwaiter().GetResult();
        }