public CourseSearchServiceTests()
        {
            configuration = new ConfigurationBuilder()
                            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                            .Build();

            var courseSearchClientSettings = new CourseSearchClientSettings
            {
                CourseSearchSvcSettings           = configuration.GetSection("Configuration:CourseSearchClient:CourseSearchSvc").Get <CourseSearchSvcSettings>() ?? new CourseSearchSvcSettings(),
                CourseSearchAuditCosmosDbSettings = configuration.GetSection("Configuration:CourseSearchClient:CosmosAuditConnection").Get <CourseSearchAuditCosmosDbSettings>() ?? new CourseSearchAuditCosmosDbSettings(),
                PolicyOptions = configuration.GetSection("Configuration:CourseSearchClient:Policies").Get <PolicyOptions>() ?? new PolicyOptions(),
            };

            var serviceProvider = new ServiceCollection()
                                  .AddFindACourseServices(courseSearchClientSettings);

            serviceProvider.AddSingleton(sp =>
            {
                return(new MapperConfiguration(cfg =>
                {
                    cfg.AddProfile(typeof(FindACourseProfile));
                    cfg.AddProfile(typeof(TLevelDetailsProfile));
                }).CreateMapper());
            });

            var services = serviceProvider.BuildServiceProvider();

            findACourseClient = services.GetService <IFindACourseClient>();
            auditService      = services.GetService <IAuditService>();
            mapper            = services.GetService <IMapper>();
        }
Exemplo n.º 2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure <CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddAutoMapper(typeof(Startup).Assembly, typeof(DFC.FindACourseClient.FindACourseProfile).Assembly);
            services.AddScoped <ICorrelationIdProvider, CorrelationIdProvider>();
            services.AddScoped <IFindACourseService, FindACourseService>();
            services.AddScoped <IFindACourseRepository, FindACourseRepository>();

            services.AddApplicationInsightsTelemetry();
            services.AddDFCLogging(Configuration["ApplicationInsights:InstrumentationKey"]);
            var courseSearchSettings = Configuration.GetSection(CourseSearchAppSettings).Get <CourseSearchSettings>();

            services.AddSingleton(courseSearchSettings ?? new CourseSearchSettings());

            var courseSearchClientSettings = new CourseSearchClientSettings
            {
                CourseSearchSvcSettings           = Configuration.GetSection(CourseSearchClientSvcSettings).Get <CourseSearchSvcSettings>() ?? new CourseSearchSvcSettings(),
                CourseSearchAuditCosmosDbSettings = Configuration.GetSection(CourseSearchClientAuditSettings).Get <CourseSearchAuditCosmosDbSettings>() ?? new CourseSearchAuditCosmosDbSettings(),
                PolicyOptions = Configuration.GetSection(CourseSearchClientPolicySettings).Get <PolicyOptions>() ?? new PolicyOptions(),
            };

            services.AddSingleton(courseSearchClientSettings);
            services.AddScoped <ICourseSearchApiService, CourseSearchApiService>();
            services.AddFindACourseServicesWithoutFaultHandling(courseSearchClientSettings);

            services.AddSingleton(Configuration.GetSection(nameof(CmsApiClientOptions)).Get <CmsApiClientOptions>() ?? new CmsApiClientOptions());
            var staticContentDbConnection = Configuration.GetSection(StaticCosmosDbConfigAppSettings).Get <CosmosDbConnection>();

            services.AddDocumentServices <StaticContentItemModel>(staticContentDbConnection, env.IsDevelopment());
            services.AddTransient <IStaticContentReloadService, StaticContentReloadService>();
            services.AddTransient <IApiService, ApiService>();
            services.AddTransient <ICmsApiService, CmsApiService>();
            services.AddTransient <IApiDataProcessorService, ApiDataProcessorService>();
            services.AddTransient <IApiCacheService, ApiCacheService>();
            services.AddTransient <IWebhooksService, WebhooksService>();
            services.AddTransient <IViewHelper, ViewHelper>();
            services.AddTransient <MemoryCache>();

            var policyRegistry = services.AddPolicyRegistry();

            services.AddFindACourseTransientFaultHandlingPolicies(courseSearchClientSettings, policyRegistry);

            services.AddHostedServiceTelemetryWrapper();
            services.AddSubscriptionBackgroundService(Configuration);
            services.AddHostedService <StaticContentReloadBackgroundService>();

            services.AddApiServices(Configuration, policyRegistry);

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Latest);
        }
Exemplo n.º 3
0
 public FindACourseClientTests()
 {
     defaultLogger   = A.Fake <ILogger <IFindACourseClient> >();
     defaultSettings = new CourseSearchClientSettings
     {
         CourseSearchSvcSettings = new CourseSearchSvcSettings
         {
             ServiceEndpoint       = new Uri("http://someurl.com"),
             ApiKey                = "SomeAPIMSubscriptionKey",
             RequestTimeOutSeconds = 10,
         },
     };
 }
        public FindACourseClientTests()
        {
            configuration = new ConfigurationBuilder()
                            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                            .Build();

            var courseSearchClientSettings = new CourseSearchClientSettings
            {
                CourseSearchSvcSettings           = configuration.GetSection("Configuration:CourseSearchClient:CourseSearchSvc").Get <CourseSearchSvcSettings>() ?? new CourseSearchSvcSettings(),
                CourseSearchAuditCosmosDbSettings = configuration.GetSection("Configuration:CourseSearchClient:CosmosAuditConnection").Get <CourseSearchAuditCosmosDbSettings>() ?? new CourseSearchAuditCosmosDbSettings(),
                PolicyOptions = configuration.GetSection("Configuration:CourseSearchClient:Policies").Get <PolicyOptions>() ?? new PolicyOptions(),
            };

            var serviceProvider = new ServiceCollection()
                                  .AddFindACourseServices(courseSearchClientSettings);

            var services = serviceProvider.BuildServiceProvider();

            findACourseClient = services.GetService <IFindACourseClient>();
        }
Exemplo n.º 5
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure <CookiePolicyOptions>(options =>
            {
                //This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            var aVAPIServiceSettings = configuration.GetSection(AVAPIServiceAppSettings).Get <AVAPIServiceSettings>();

            services.AddSingleton(aVAPIServiceSettings ?? new AVAPIServiceSettings());

            var courseSearchSettings = configuration.GetSection(CourseSearchAppSettings).Get <CourseSearchSettings>();

            services.AddSingleton(courseSearchSettings ?? new CourseSearchSettings());

            var courseSearchClientSettings = new CourseSearchClientSettings
            {
                CourseSearchSvcSettings           = configuration.GetSection(CourseSearchClientSvcSettings).Get <CourseSearchSvcSettings>() ?? new CourseSearchSvcSettings(),
                CourseSearchAuditCosmosDbSettings = configuration.GetSection(CourseSearchClientAuditSettings).Get <CourseSearchAuditCosmosDbSettings>() ?? new CourseSearchAuditCosmosDbSettings(),
                PolicyOptions = configuration.GetSection(CourseSearchClientPolicySettings).Get <PolicyOptions>() ?? new PolicyOptions(),
            };

            services.AddSingleton(courseSearchClientSettings);
            services.AddScoped <ICourseSearchApiService, CourseSearchApiService>();
            services.AddFindACourseServicesWithoutFaultHandling(courseSearchClientSettings);
            var policyRegistry = services.AddPolicyRegistry();

            services.AddFindACourseTransientFaultHandlingPolicies(courseSearchClientSettings, policyRegistry);

            var serviceBusOptions = configuration.GetSection(ServiceBusOptionsAppSettings).Get <ServiceBusOptions>();
            var topicClient       = new TopicClient(serviceBusOptions.ServiceBusConnectionString, serviceBusOptions.TopicName);

            services.AddSingleton <ITopicClient>(topicClient);

            services.AddSingleton <ICosmosRepository <CurrentOpportunitiesSegmentModel>, CosmosRepository <CurrentOpportunitiesSegmentModel> >(s =>
            {
                var cosmosDbConnection = configuration.GetSection(CosmosDbConfigAppSettings).Get <CosmosDbConnection>();
                var documentClient     = new DocumentClient(cosmosDbConnection.EndpointUrl, cosmosDbConnection.AccessKey);

                return(new CosmosRepository <CurrentOpportunitiesSegmentModel>(cosmosDbConnection, documentClient, s.GetService <IWebHostEnvironment>().IsDevelopment()));
            });

            services.AddSingleton <ICosmosRepository <APIAuditRecordAV>, CosmosRepository <APIAuditRecordAV> >(s =>
            {
                var cosmosDbAuditConnection = configuration.GetSection(AVFeedAuditSettings).Get <CosmosDbConnection>();
                var documentClient          = new DocumentClient(cosmosDbAuditConnection.EndpointUrl, cosmosDbAuditConnection.AccessKey);

                return(new CosmosRepository <APIAuditRecordAV>(cosmosDbAuditConnection, documentClient, s.GetService <IWebHostEnvironment>().IsDevelopment()));
            });

            services.AddScoped <ICourseCurrentOpportunitiesRefresh, CourseCurrentOpportunitiesRefresh>();
            services.AddScoped <IAVCurrentOpportunitiesRefresh, AVCurrentOpportuntiesRefresh>();
            services.AddScoped <ICurrentOpportunitiesSegmentService, CurrentOpportunitiesSegmentService>();
            services.AddScoped <ICurrentOpportunitiesSegmentUtilities, CurrentOpportunitiesSegmentUtilities>();
            services.AddScoped <IJobProfileSegmentRefreshService <RefreshJobProfileSegmentServiceBusModel>, JobProfileSegmentRefreshService <RefreshJobProfileSegmentServiceBusModel> >();
            services.AddSingleton(serviceProvider =>
            {
                return(new MapperConfiguration(cfg =>
                {
                    cfg.AddProfiles(
                        new List <Profile>
                    {
                        new CurrentOpportunitiesSegmentModelProfile(),
                        new CoursesProfile(),
                        new ApprenticeshipProfile(),
                        new FindACourseProfile(),
                    });
                }).CreateMapper());
            });

            var corePolicyOptions = configuration.GetSection(AVAPIServiceClientPolicySettings).Get <CorePolicyOptions>() ?? new CorePolicyOptions();

            corePolicyOptions.HttpRateLimitRetry ??= new RateLimitPolicyOptions();
            policyRegistry.AddRateLimitPolicy(nameof(RefreshClientOptions), corePolicyOptions.HttpRateLimitRetry);
            policyRegistry.AddStandardPolicies(nameof(RefreshClientOptions), corePolicyOptions);

            services.BuildHttpClient <IApprenticeshipVacancyApi, ApprenticeshipVacancyApi, RefreshClientOptions>(configuration, nameof(RefreshClientOptions))
            .AddPolicyHandlerFromRegistry($"{nameof(RefreshClientOptions)}_{nameof(CorePolicyOptions.HttpRateLimitRetry)}")
            .AddPolicyHandlerFromRegistry($"{nameof(RefreshClientOptions)}_{nameof(CorePolicyOptions.HttpRetry)}")
            .AddPolicyHandlerFromRegistry($"{nameof(RefreshClientOptions)}_{nameof(CorePolicyOptions.HttpCircuitBreaker)}");

            services.AddScoped <IAVAPIService, AVAPIService>();
            services.AddScoped <Data.Contracts.IAuditService, AuditService>();

            services.AddDFCLogging(configuration["ApplicationInsights:InstrumentationKey"]);

            services.AddHealthChecks()
            .AddCheck <CurrentOpportunitiesSegmentService>("Current Opportunities Segment Service")
            .AddCheck <CourseCurrentOpportunitiesRefresh>("Course Search")
            .AddCheck <AVAPIService>("Apprenticeship Service");

            services.AddMvc().AddNewtonsoftJson().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
        }