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); }
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); }
public Task InvokeAsync(CommandResultContext context, CommandResultDelegate next) { _singletonDependency.Invoked = true; return(next(context)); }
static Task resultDelegate(CommandResultContext ctx) => Task.CompletedTask;