public void Should_throw_an_ArgumentNullException_when_pid_plugin_settings_is_null()
            {
                // arrange
                PidPluginSettings pidPluginSettings = null;

                // act & assert
                Assert.Throws <ArgumentNullException>(nameof(pidPluginSettings), () => this.Sut.AddPidPlugin(pidPluginSettings));
            }
        static void AddPidPlugin(IServiceCollection services, IConfiguration configuration)
        {
            PidPluginSettings pidConnectorSettings =
                new PidPluginSettings();

            configuration.GetSection("PidPluginSettings")
            .Bind(pidConnectorSettings);

            services.AddPidPlugin(pidConnectorSettings);
        }
 public TheMethod_AddPidPlugin()
 {
     this.Settings = new PidPluginSettings()
     {
         BaseUrl          = "https://fake-url.com/api/",
         RetryAttempts    = 3,
         SubscriptionKey  = "",
         TimeoutInMinutes = 2,
         CacheSettings    = new CacheSettings()
         {
             BankAccountDetailInMinutes    = 1,
             SpecialRecordsInMinutes       = 2,
             EntityDataBasicInMinutes      = 3,
             BankAccountOwnershipInMinutes = 4,
             EntityDataFullInMinutes       = 5
         }
     };
 }
Exemple #4
0
        public static IServiceCollection AddPidPlugin(this IServiceCollection services, PidPluginSettings pidPluginSettings)
        {
            if (pidPluginSettings == null)
            {
                throw new ArgumentNullException(nameof(pidPluginSettings));
            }

            services.Configure <CacheOptions>(options =>
            {
                options.BankAccountDetailExpiration = TimeSpan.FromMinutes(
                    pidPluginSettings.CacheSettings.BankAccountDetailInMinutes);

                options.BankAccountOwnershipExpiration = TimeSpan.FromMinutes(
                    pidPluginSettings.CacheSettings.BankAccountOwnershipInMinutes);

                options.EntityDataBasicExpiration = TimeSpan.FromMinutes(
                    pidPluginSettings.CacheSettings.EntityDataBasicInMinutes);

                options.EntityDataFullExpiration = TimeSpan.FromMinutes(
                    pidPluginSettings.CacheSettings.EntityDataFullInMinutes);

                options.SpecialRecordsExpiration = TimeSpan.FromMinutes(
                    pidPluginSettings.CacheSettings.SpecialRecordsInMinutes);
            });

            services.AddMemoryCache();
            services.AddTransient <ICacheAccessor, MemoryCacheAccessor>();
            services.AddTransient <HttpClientErrorHandler>();

            services.AddHttpClient <IPidPluginClient, PidPluginClient>()
            .ConfigureHttpClient(builder =>
            {
                builder.BaseAddress =
                    new Uri(pidPluginSettings.BaseUrl);

                builder.Timeout =
                    TimeSpan.FromMinutes(pidPluginSettings.TimeoutInMinutes);

                builder.DefaultRequestHeaders.Add(
                    SubscriptionKeyHeader,
                    pidPluginSettings.SubscriptionKey
                    );
            })
            .AddHttpMessageHandler <HttpClientErrorHandler>()
            .AddTransientHttpErrorPolicy(policy =>
            {
                return(policy.WaitAndRetryAsync(
                           pidPluginSettings.RetryAttempts,
                           _ => TimeSpan.FromMilliseconds(200)
                           ));
            });

            return(services);
        }