コード例 #1
0
        public async Task Then_Do_Not_Delete_Opportunity(
            [Frozen] IOpportunityRepository opportunityRepo,
            [Frozen] IRepository <OpportunityItem> opportunityItemRepo,
            [Frozen] IRepository <Domain.Models.Referral> referralRepo,
            [Frozen] IRepository <ProvisionGap> provisionGapRepo,
            OpportunityItem opportunityItem,
            OpportunityService sut)
        {
            //Arrange
            opportunityItem.IsSaved = true;

            opportunityItemRepo.GetManyAsync(Arg.Any <Expression <Func <OpportunityItem, bool> > >()).Returns(new List <OpportunityItem>
            {
                opportunityItem
            }.AsQueryable());

            referralRepo.GetManyAsync(Arg.Any <Expression <Func <Domain.Models.Referral, bool> > >()).Returns(opportunityItem.Referral.AsQueryable());
            provisionGapRepo.GetManyAsync(Arg.Any <Expression <Func <ProvisionGap, bool> > >()).Returns(opportunityItem.ProvisionGap.AsQueryable());

            //Act
            await sut.DeleteOpportunityItemAsync(opportunityItem.OpportunityId, opportunityItem.OpportunityId);

            //Assert
            await opportunityRepo.DidNotReceive().DeleteAsync(Arg.Any <int>());
        }
        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 When_MatchingServiceOpportunityReport_Is_Called_For_Pipeline_Opportunity()
        {
            _dbContext = new TestConfiguration().GetDbContext();

            _opportunityBuilder                = new OpportunityBuilder(_dbContext);
            _providerBuilder                   = new ProviderBuilder(_dbContext);
            _employerBuilder                   = new EmployerBuilder(_dbContext);
            _postcodeLookupBuilder             = new PostcodeLookupBuilder(_dbContext);
            _localEnterprisePartnershipBuilder = new LocalEnterprisePartnershipBuilder(_dbContext);

            ClearData();

            var employer = _employerBuilder.CreateEmployer(Guid.NewGuid());
            var provider = _providerBuilder.CreateProvider();

            _localEnterprisePartnershipBuilder.CreateLocalEnterprisePartnership();
            _postcodeLookupBuilder.CreatePostcodeLookup();

            _savedReferralOpportunityItem     = _opportunityBuilder.CreateReferralOpportunityItem(true, false, provider.ProviderVenue.First().Id);
            _savedProvisionGapOpportunityItem = _opportunityBuilder.CreateProvisionGapOpportunityItem(true, false);

            _opportunityBuilder.CreateOpportunity(employer.CrmId, new List <OpportunityItem> {
                _savedReferralOpportunityItem, _savedProvisionGapOpportunityItem
            });

            _result = _dbContext.MatchingServiceOpportunityReport.ToList();
        }
        public When_OpportunityService_Is_Called_To_Save_PlacementInformation_With_Empty_Job_Title()
        {
            var config = new MapperConfiguration(c => c.AddMaps(typeof(OpportunityMapper).Assembly));
            var mapper = new Mapper(config);

            _opportunityItemRepository = Substitute.For <IRepository <OpportunityItem> >();
            var opportunityRepository           = Substitute.For <IOpportunityRepository>();
            var provisionGapRepository          = Substitute.For <IRepository <ProvisionGap> >();
            var referralRepository              = Substitute.For <IRepository <Domain.Models.Referral> >();
            var googleMapApiClient              = Substitute.For <IGoogleMapApiClient>();
            var opportunityPipelineReportWriter = Substitute.For <IFileWriter <OpportunityReportDto> >();
            var dateTimeProvider = Substitute.For <IDateTimeProvider>();

            var opportunityItem = new OpportunityItem {
                Id = OpportunityItemId, Postcode = Postcode, SearchRadius = Distance, RouteId = RouteId
            };

            _opportunityItemRepository.GetSingleOrDefaultAsync(Arg.Any <Expression <Func <OpportunityItem, bool> > >()).Returns(opportunityItem);

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

            var dto = new PlacementInformationSaveDto
            {
                OpportunityItemId = OpportunityItemId,
                JobRole           = JobRole,
                PlacementsKnown   = PlacementsKnown,
                Placements        = Placements
            };

            opportunityService.UpdateOpportunityItemAsync(dto).GetAwaiter().GetResult();
        }
コード例 #5
0
        internal static Opportunity CreateNReferrals(int nItems)
        {
            const int opportunityId     = 3000;
            var       opportunityItemId = 4000;
            var       referralId        = 5000;

            var items = new List <OpportunityItem>();

            for (var nItem = 1; nItem <= nItems; nItem++)
            {
                var item = new OpportunityItem
                {
                    Id                        = opportunityItemId,
                    OpportunityId             = opportunityId,
                    OpportunityType           = OpportunityType.Referral.ToString(),
                    Town                      = "London",
                    Postcode                  = "SW1A 2AA",
                    SearchResultProviderCount = 1,
                    JobRole                   = "Job Role",
                    PlacementsKnown           = true,
                    Placements                = 1,
                    IsSaved                   = true,
                    IsSelectedForReferral     = false,
                    IsCompleted               = false,
                    RouteId                   = 1,
                    CreatedOn                 = new DateTime(2019, 1, 2),
                    CreatedBy                 = "Dev Surname",
                    Referral                  = new List <Referral>
                    {
                        new Referral
                        {
                            Id = referralId,
                            ProviderVenueId      = 1,
                            DistanceFromEmployer = 1.23m,
                            CreatedOn            = new DateTime(2019, 1, 2),
                            CreatedBy            = "Dev Surname",
                        }
                    }
                };

                referralId        += 1;
                opportunityItemId += 1;

                items.Add(item);
            }

            var opportunity = new Opportunity
            {
                Id                   = opportunityId,
                EmployerCrmId        = new Guid("11111111-1111-1111-1111-111111111111"),
                EmployerContact      = "Employer Contact",
                EmployerContactEmail = "*****@*****.**",
                EmployerContactPhone = "01474 787878",
                CreatedOn            = new DateTime(2019, 1, 2),
                CreatedBy            = "Dev Surname",
                OpportunityItem      = items
            };

            return(opportunity);
        }
コード例 #6
0
        public When_MatchingServiceOpportunityReport_Is_Called_For_Saved_OpportunityOpportunities()
        {
            _dbContext = new TestConfiguration().GetDbContext();

            _opportunityBuilder = new OpportunityBuilder(_dbContext);
            _providerBuilder    = new ProviderBuilder(_dbContext);
            _employerBuilder    = new EmployerBuilder(_dbContext);

            ClearData();

            var employer  = _employerBuilder.CreateEmployer(Guid.NewGuid());
            var provider1 = _providerBuilder.CreateProvider();
            var provider2 = _providerBuilder.CreateProvider();

            _savedReferralOpportunityItem     = _opportunityBuilder.CreateReferralOpportunityItem(true, true, provider1.ProviderVenue.First().Id);
            _savedProvisionGapOpportunityItem = _opportunityBuilder.CreateProvisionGapOpportunityItem(true, true);

            _unsavedReferralOpportunityItem     = _opportunityBuilder.CreateReferralOpportunityItem(false, false, provider2.ProviderVenue.First().Id);
            _unsavedProvisionGapOpportunityItem = _opportunityBuilder.CreateProvisionGapOpportunityItem(false, false);

            _opportunityBuilder.CreateOpportunity(employer.CrmId, new List <OpportunityItem> {
                _savedReferralOpportunityItem, _savedProvisionGapOpportunityItem, _unsavedReferralOpportunityItem, _unsavedProvisionGapOpportunityItem
            });

            _result = _dbContext.MatchingServiceOpportunityReport.ToList();
        }
        public async Task Then_Send_Email_And_Save_Email_History(
            MatchingConfiguration configuration,
            [Frozen] MatchingDbContext dbContext,
            IAsyncNotificationClient notificationClient,
            ILogger <GenericRepository <EmailTemplate> > emailTemplateLogger,
            ILogger <GenericRepository <EmailHistory> > emailHistoryLogger,
            ILogger <GenericRepository <FunctionLog> > functionLogLogger,
            ILogger <EmailService> emailServiceLogger,
            [Frozen] Domain.Models.Opportunity opportunity,
            [Frozen] OpportunityItem opportunityItem,
            [Frozen] Domain.Models.Provider provider,
            [Frozen] Domain.Models.ProviderVenue venue,
            [Frozen] BackgroundProcessHistory backgroundProcessHistory,
            [Frozen] EmailHistory emailHistory,
            [Frozen] EmailTemplate emailTemplate,
            [Frozen] EmailNotificationResponse emailNotificationResponse
            )
        {
            //Arrange
            var(templateRepository, emailHistoryRepository, functionLogRepository, mapper)
                = SetUp(dbContext, emailTemplateLogger, emailHistoryLogger, functionLogLogger);

            var sut = new EmailService(configuration, notificationClient, templateRepository, emailHistoryRepository,
                                       functionLogRepository, mapper, emailServiceLogger);

            var tokens = new Dictionary <string, string>
            {
                { "contactname", "name" }
            };

            notificationClient.SendEmailAsync(Arg.Any <string>(), Arg.Any <string>(),
                                              Arg.Any <Dictionary <string, dynamic> >()).Returns(Task.FromResult(emailNotificationResponse));

            await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory);

            await DataBuilder.SetEmailTemplate(dbContext, emailTemplate);

            //Act
            await sut.SendEmailAsync(emailTemplate.TemplateName, "*****@*****.**", opportunity.Id, opportunityItem.Id, tokens, "System");

            //Assert
            Guid.TryParse(emailNotificationResponse.id, out var notificationId);
            var data = dbContext.EmailHistory.AsNoTracking().FirstOrDefault(x => x.NotificationId == notificationId);

            data.Should().NotBeNull();
            data?.EmailTemplateId.Should().Be(emailHistory.EmailTemplateId);
            data?.Status.Should().BeNullOrEmpty();
            data?.NotificationId.Should().Be(emailNotificationResponse.id);
            data?.CreatedBy.Should().Be("System");
            data?.SentTo.Should().Be("*****@*****.**");
        }
 public OpportunityItemBuilder()
 {
     _opportunityItem = new OpportunityItem
     {
         Id              = 1,
         OpportunityId   = 2,
         OpportunityType = OpportunityType.Referral.ToString(),
         CreatedBy       = "CreatedBy",
         Opportunity     = new Domain.Models.Opportunity
         {
             Id        = 2,
             CreatedBy = "CreatedBy"
         }
     };
 }
コード例 #9
0
        public When_MatchingServiceProviderOpportunityReport_Is_Called_For_Single_Provider_Multiple_Venues()
        {
            _dbContext = new TestConfiguration().GetDbContext();

            _opportunityBuilder = new OpportunityBuilder(_dbContext);
            _providerBuilder    = new ProviderBuilder(_dbContext);
            _employerBuilder    = new EmployerBuilder(_dbContext);

            ClearData();

            var employer = _employerBuilder.CreateEmployer(Guid.NewGuid());
            var provider = _providerBuilder.CreateProvider(2);

            _savedReferralOpportunityItem = _opportunityBuilder.CreateReferralOpportunityItem(true, true, provider.ProviderVenue.Select(pv => pv.Id).ToArray());

            _opportunityBuilder.CreateOpportunity(employer.CrmId, new List <OpportunityItem> {
                _savedReferralOpportunityItem
            });

            _result = _dbContext.MatchingServiceProviderOpportunityReport.ToList();
        }
        private static async Task SetProvisionGapData(
            MatchingDbContext dbContext,
            OpportunityItem opportunityItem,
            bool hasBadExperience,
            bool hasNoSuitableStudent,
            bool areProvidersTooFarAway)
        {
            opportunityItem.OpportunityType = "ProvisionGap";
            opportunityItem.IsSaved         = true;
            opportunityItem.IsCompleted     = false;

            //Need to remove extra referral/provision gap rows created as AutoDomainData
            foreach (var x in opportunityItem.ProvisionGap.Where(pg => pg.Id != opportunityItem.ProvisionGap.First().Id).ToList())
            {
                opportunityItem.ProvisionGap.Remove(x);
            }
            opportunityItem.Referral.Clear();

            await dbContext.OpportunityItem.AddAsync(opportunityItem);

            await dbContext.SaveChangesAsync();

            dbContext.DetachAllEntities();

            //Set up the provision gap record
            var provisionGap = await dbContext.ProvisionGap.AsNoTracking().FirstOrDefaultAsync();

            provisionGap.HadBadExperience    = hasBadExperience;
            provisionGap.NoSuitableStudent   = hasNoSuitableStudent;
            provisionGap.ProvidersTooFarAway = areProvidersTooFarAway;

            dbContext.Entry(provisionGap).Property("HadBadExperience").IsModified    = true;
            dbContext.Entry(provisionGap).Property("NoSuitableStudent").IsModified   = true;
            dbContext.Entry(provisionGap).Property("ProvidersTooFarAway").IsModified = true;

            await dbContext.SaveChangesAsync();

            dbContext.DetachAllEntities();
        }