public async Task FiltersDefinitionWasChanged_Should_Rebuild_Delegates()
        {
            // Act
            var services = new ServiceCollection();

            services.AddOptions <MariCommandsOptions>();

            services.Configure <MariCommandsOptions>(options =>
            {
                options.Filters.Add(typeof(TestResultFilter));
            });

            services.AddSingleton <SingletonDependency>();
            services.AddSingleton <ResultFilterFactory>();

            var provider     = services.BuildServiceProvider(true);
            var scopeFactory = provider.GetRequiredService <IServiceScopeFactory>();

            var resultFilterFactory = provider.GetRequiredService <ResultFilterFactory>();

            await using var context = new CommandContext
                        {
                            ServiceScopeFactory = scopeFactory,
                        };

            var result = new SuccessResult();

            var resultContext = new CommandResultContext(context, result);

            var singletonDependency = provider.GetRequiredService <SingletonDependency>();

            // Arrange + Assert
            var resultDelegate = resultFilterFactory.GetFiltersDelegate();

            Assert.NotNull(resultDelegate);

            await resultDelegate(resultContext);

            Assert.True(singletonDependency.Invoked);

            singletonDependency.Invoked = false;

            var filters = Array.Empty <ICommandFilter>();

            resultFilterFactory.FiltersDefinitionWasChanged(filters);

            resultDelegate = resultFilterFactory.GetFiltersDelegate();

            await resultDelegate(resultContext);

            Assert.False(singletonDependency.Invoked);
        }
        public async Task Should_Dispose_When_MariCommandsOptions_AutoDisposeContext_Is_True()
        {
            // Act
            var scopeFactory = new ServiceCollection()
                               .AddSingleton <IOptions <MariCommandsOptions> >(new MariCommandsOptions
            {
                AutoDisposeContext = true,
            })
                               .BuildServiceProvider()
                               .GetRequiredService <IServiceScopeFactory>();

            var context = new CommandContext
            {
                ServiceScopeFactory = scopeFactory
            };

            var filter = new DisposeFilter();

            var resultContext = new CommandResultContext(context, new SuccessResult());
        public async Task Should_Build_Filters_When_Call_GetFiltersDelegate()
        {
            // Act
            var services = new ServiceCollection();

            services.AddOptions <MariCommandsOptions>();

            services.Configure <MariCommandsOptions>(options =>
            {
                options.Filters.Add(typeof(TestResultFilter));
            });

            services.AddSingleton <SingletonDependency>();
            services.AddSingleton <ResultFilterFactory>();

            var provider     = services.BuildServiceProvider(true);
            var scopeFactory = provider.GetRequiredService <IServiceScopeFactory>();

            var resultFilterFactory = provider.GetRequiredService <ResultFilterFactory>();

            await using var context = new CommandContext
                        {
                            ServiceScopeFactory = scopeFactory,
                        };

            var result = new SuccessResult();

            var resultContext = new CommandResultContext(context, result);

            var singletonDependency = provider.GetRequiredService <SingletonDependency>();

            // Arrange + Assert
            var resultDelegate = resultFilterFactory.GetFiltersDelegate();

            Assert.NotNull(resultDelegate);

            await resultDelegate(resultContext);

            Assert.True(singletonDependency.Invoked);
        }
示例#4
0
        public async Task InvokeFiltersAsync_Should_Invoke_ResultFilterFactory_Builded_Delegate()
        {
            // Act
            var services = new ServiceCollection();

            services.AddOptions <MariCommandsOptions>();

            services.Configure <MariCommandsOptions>(options =>
            {
                options.Filters.Add(typeof(TestResultFilter));
            });

            services.AddFilterFactory <ResultFilterFactory, ICommandResultFilter, CommandResultDelegate>();
            services.AddSingleton <SingletonDependency>();
            services.AddSingleton <FilterProvider>();

            var provider     = services.BuildServiceProvider(true);
            var scopeFactory = provider.GetRequiredService <IServiceScopeFactory>();

            var filterProvider = provider.GetRequiredService <FilterProvider>();

            await using var context = new CommandContext
                        {
                            ServiceScopeFactory = scopeFactory,
                        };

            var result        = new SuccessResult();
            var resultContext = new CommandResultContext(context, result);

            var singletonDependency = provider.GetRequiredService <SingletonDependency>();

            // Arrange + Assert
            await filterProvider.InvokeFiltersAsync <CommandResultContext, ICommandResultFilter>(resultContext);

            Assert.True(singletonDependency.Invoked);
        }
示例#5
0
            public Task InvokeAsync(CommandResultContext context, CommandResultDelegate next)
            {
                _singletonDependency.Invoked = true;

                return(next(context));
            }
 static Task resultDelegate(CommandResultContext ctx) => Task.CompletedTask;