public async Task RemoveFromCart_RemovesItemFromCart() { // Arrange var cartId = "CartId_A"; var cartItemId = 3; var numberOfItem = 5; var unitPrice = 10; var httpContext = new DefaultHttpContext(); // Session and cart initialization httpContext.Session = new TestSession(); httpContext.Session.SetString("Session", cartId); // DbContext initialization var dbContext = _fixture.Context; var cartItems = CreateTestCartItems(cartId, unitPrice, numberOfItem); dbContext.AddRange(cartItems.Select(n => n.Album).Distinct()); dbContext.AddRange(cartItems); dbContext.SaveChanges(); // ServiceProvder initialization var serviceProviderFeature = new ServiceProvidersFeature(); httpContext.Features.Set <IServiceProvidersFeature>(serviceProviderFeature); // AntiForgery initialization serviceProviderFeature.RequestServices = _fixture.ServiceProvider; var antiForgery = serviceProviderFeature.RequestServices.GetRequiredService <IAntiforgery>(); var tokens = antiForgery.GetTokens(httpContext); // Header initialization for AntiForgery var headers = new KeyValuePair <string, StringValues>( "RequestVerificationToken", new string[] { tokens.CookieToken + ":" + tokens.RequestToken }); httpContext.Request.Headers.Add(headers); // Cotroller initialization var controller = new ShoppingCartController( dbContext, _fixture.ServiceProvider.GetService <ILogger <ShoppingCartController> >()); controller.ControllerContext.HttpContext = httpContext; // Act var result = await controller.RemoveFromCart(cartItemId, CancellationToken.None); // Assert var jsonResult = Assert.IsType <JsonResult>(result); var viewModel = Assert.IsType <ShoppingCartRemoveViewModel>(jsonResult.Value); Assert.Equal(numberOfItem - 1, viewModel.CartCount); Assert.Equal((numberOfItem - 1) * 10, viewModel.CartTotal); Assert.Equal("Greatest Hits has been removed from your shopping cart.", viewModel.Message); var cart = ShoppingCart.GetCart(dbContext, httpContext); Assert.DoesNotContain((await cart.GetCartItems()), c => c.CartItemId == cartItemId); }
public ModuleHttpContext(IFeatureCollection features, IServiceProvider requestServices, PathString pathBase) : base(new FeatureCollection(features)) { Features[typeof(IServiceProvidersFeature)] = new ServiceProvidersFeature() { RequestServices = requestServices }; var httpRequestFeature = Features.Get <IHttpRequestFeature>(); Features[typeof(IHttpRequestFeature)] = new HttpRequestFeature() { Body = httpRequestFeature.Body, Headers = httpRequestFeature.Headers, Method = httpRequestFeature.Method, Path = httpRequestFeature.Path, PathBase = new PathString(httpRequestFeature.PathBase).Add(pathBase), Protocol = httpRequestFeature.Protocol, QueryString = httpRequestFeature.QueryString, RawTarget = httpRequestFeature.RawTarget, Scheme = httpRequestFeature.Scheme }; Features[typeof(IItemsFeature)] = new ItemsFeature(); }
private async ValueTask <ResponseMessage> ProgressPipeline( HttpContext context, RequestDelegate next, RequestMessage requestMessage, ResponseMessage responseMessage, CancellationToken cancellationToken ) { var requestFeature = new RequestFeature(requestMessage); var responseFeature = new ResponseFeature(responseMessage); var requestLifetimeFeature = new HttpRequestLifetimeFeature { RequestAborted = cancellationToken }; var serviceProviderFeature = context.Features.Get <IServiceProvidersFeature>(); var requestAuthenticationFeature = context.Features.Get <IHttpAuthenticationFeature>(); var formFeature = context.Features.Get <IFormFeature>(); var responseTrailersFeature = context.Features.Get <IHttpResponseTrailersFeature>(); //var httpResponseBodyFeature = context.Features.Get<IHttpResponseBodyFeature>(); //var httpBodyControlFeature = context.Features.Get<IHttpResponseBodyPipeFeature>(); //var httpResponseBodyFeature = context.Features.Get<IHttpResponseFeature>(); GC.KeepAlive(context.Features); var features = new FeatureCollection(); features.Set <IHttpRequestFeature>(new HttpRequestFeature()); features.Set <IHttpResponseFeature>(new HttpResponseFeature()); // features.Set<IHttpRequestFeature>(requestFeature); // features.Set<IHttpResponseFeature>(responseFeature); features.Set <IHttpRequestLifetimeFeature>(requestLifetimeFeature); features.Set <IHttpAuthenticationFeature>(requestAuthenticationFeature); features.Set <IServiceProvidersFeature>(serviceProviderFeature); features.Set <IFormFeature>(formFeature); features.Set <IHttpResponseTrailersFeature>(responseTrailersFeature); //features.Set<IHttpBodyControlFeature>(httpBodyControlFeature); //features.Set<IHttpResponseBodyFeature>(httpResponseBodyFeature); //features.Set<IHttpResponseBodyPipeFeature>(null); var ctx = new DefaultHttpContext(features); await MessageConverter.CopyRequestMessageToTarget(ctx.Request, requestMessage, cancellationToken); IServiceProvider serviceProvider; if (Configuration.InProcessScopeMode != RedTransportInProcessScopeMode.UseRootScope) { //creating a new scope for IServiceProvider. var factory = serviceProviderFeature.RequestServices.GetRequiredService <IServiceScopeFactory>(); serviceProvider = factory.CreateScope().ServiceProvider; serviceProviderFeature = new ServiceProvidersFeature { RequestServices = serviceProvider }; features.Set <IServiceProvidersFeature>(serviceProviderFeature); } else { serviceProvider = serviceProviderFeature.RequestServices; } var memStream = new MemoryStream(); ctx.Response.Body = memStream; //GC.KeepAlive(ctx.Response.Body); ctx.Response.RegisterForDispose(memStream); await next(ctx); return(await MessageConverter.FromResponseAsync(ctx.Response, cancellationToken)); }
public ServiceProvidersMiddleware(RequestDelegate next, IServiceProvider serviceProvider) { _serviceProvidersFeature = new ServiceProvidersFeature(serviceProvider); _next = next; }
public async Task RemoveFromCart_RemovesItemFromCart() { // Arrange var cartId = "CartId_A"; var cartItemId = 3; var numberOfItem = 5; var unitPrice = 10; var httpContext = new DefaultHttpContext(); // Session and cart initialization httpContext.Session = new TestSession(); httpContext.Session.SetString("Session", cartId); // DbContext initialization var dbContext = _serviceProvider.GetRequiredService<MusicStoreContext>(); var cartItems = CreateTestCartItems(cartId, unitPrice, numberOfItem); dbContext.AddRange(cartItems.Select(n => n.Album).Distinct()); dbContext.AddRange(cartItems); dbContext.SaveChanges(); // ServiceProvder initialization var serviceProviderFeature = new ServiceProvidersFeature(); httpContext.Features.Set<IServiceProvidersFeature>(serviceProviderFeature); // AntiForgery initialization serviceProviderFeature.RequestServices = _serviceProvider; var antiForgery = serviceProviderFeature.RequestServices.GetRequiredService<IAntiforgery>(); var tokens = antiForgery.GetTokens(httpContext); // Header initialization for AntiForgery var headers = new KeyValuePair<string, StringValues>( "RequestVerificationToken", new string[] { tokens.CookieToken + ":" + tokens.RequestToken }); httpContext.Request.Headers.Add(headers); // Cotroller initialization var controller = new ShoppingCartController(dbContext); controller.ControllerContext.HttpContext = httpContext; // Act var result = await controller.RemoveFromCart(cartItemId, CancellationToken.None); // Assert var jsonResult = Assert.IsType<JsonResult>(result); var viewModel = Assert.IsType<ShoppingCartRemoveViewModel>(jsonResult.Value); Assert.Equal(numberOfItem - 1, viewModel.CartCount); Assert.Equal((numberOfItem - 1) * 10, viewModel.CartTotal); Assert.Equal(" has been removed from your shopping cart.", viewModel.Message); var cart = ShoppingCart.GetCart(dbContext, httpContext); Assert.False((await cart.GetCartItems()).Any(c => c.CartItemId == cartItemId)); }