public async Task Invoke_ReplacesRequestServices() { var accessor = Mock.Of <IHttpContextAccessor>(); var originalFeature = Mock.Of <IServiceProvidersFeature>(); var next = new RequestDelegate(ctx => { // When the next delegate is invoked, it should get // an updated request services feature. var currentFeature = ctx.Features.Get <IServiceProvidersFeature>(); Assert.NotSame(originalFeature, currentFeature); return(Task.FromResult(0)); }); var context = CreateContext(); context.Features.Set <IServiceProvidersFeature>(originalFeature); var mtc = CreateServiceProvider().GetRequiredService <MultitenantContainer>(); var mw = new MultitenantRequestServicesMiddleware(next, accessor, mtc); await mw.Invoke(context); // The original request services feature should have been replaced // after the middleware finished. var revertedFeature = context.Features.Get <IServiceProvidersFeature>(); Assert.Same(originalFeature, revertedFeature); }
public async Task Invoke_NoMultitenantContainer() { var accessor = Mock.Of <IHttpContextAccessor>(); var next = new RequestDelegate(ctx => Task.FromResult(0)); var context = CreateContext(); var mw = new MultitenantRequestServicesMiddleware(next, () => null, accessor); await Assert.ThrowsAsync <InvalidOperationException>(() => mw.Invoke(context)); }
public async Task Invoke_SetsHttpContextOnAccessor() { var accessor = Mock.Of <IHttpContextAccessor>(); var next = new RequestDelegate(ctx => Task.FromResult(0)); var context = CreateContext(); var mtc = CreateServiceProvider().GetRequiredService <MultitenantContainer>(); var mw = new MultitenantRequestServicesMiddleware(next, accessor, mtc); await mw.Invoke(context); Assert.Same(context, accessor.HttpContext); }
public async Task Invoke_DoesNotOverrideExistingHttpContextOnAccessor() { var accessor = Mock.Of <IHttpContextAccessor>(); accessor.HttpContext = new DefaultHttpContext(); var mtc = CreateContainer(); var next = new RequestDelegate(ctx => Task.FromResult(0)); var context = CreateContext(); var mw = new MultitenantRequestServicesMiddleware(next, () => mtc, accessor); await mw.Invoke(context); Assert.NotSame(context, accessor.HttpContext); }