public async Task Index_ReturnsNoCartItems_WhenNoItemsInCart() { // Arrange var sessionFeature = new SessionFeature() { Session = CreateTestSession(), }; var httpContext = new DefaultHttpContext(); httpContext.SetFeature<ISessionFeature>(sessionFeature); httpContext.Session.SetString("Session", "CartId_A"); var controller = new ShoppingCartController() { DbContext = _serviceProvider.GetRequiredService<MusicStoreContext>(), }; controller.ActionContext.HttpContext = httpContext; // Act var result = await controller.Index(); // Assert var viewResult = Assert.IsType<ViewResult>(result); Assert.NotNull(viewResult.ViewData); Assert.Null(viewResult.ViewName); var model = Assert.IsType<ShoppingCartViewModel>(viewResult.ViewData.Model); Assert.Equal(0, model.CartItems.Count); Assert.Equal(0, model.CartTotal); }
public void SendFileSupport() { var context = new DefaultHttpContext(); var response = context.Response; Assert.False(response.SupportsSendFile()); context.SetFeature<IHttpSendFileFeature>(new FakeSendFileFeature()); Assert.True(response.SupportsSendFile()); }
public async Task AddressAndPayment_RedirectToCompleteWhenSuccessful() { // Arrange var httpContext = new DefaultHttpContext(); var orderId = 10; var order = new Order() { OrderId = orderId, }; // Session initialization var cartId = "CartId_A"; var sessionFeature = new SessionFeature() { Session = CreateTestSession(), }; httpContext.SetFeature<ISessionFeature>(sessionFeature); httpContext.Session.SetString("Session", cartId); // FormCollection initialization httpContext.Request.Form = new FormCollection( new Dictionary<string, string[]>() { { "PromoCode", new string[] { "FREE" } } } ); // UserName initialization var claims = new List<Claim> { new Claim(ClaimTypes.Name, "TestUserName") }; httpContext.User = new ClaimsPrincipal(new ClaimsIdentity(claims)); // DbContext initialization var dbContext = _serviceProvider.GetRequiredService<MusicStoreContext>(); var cartItems = CreateTestCartItems( cartId, itemPrice: 10, numberOfItem: 1); dbContext.AddRange(cartItems.Select(n => n.Album).Distinct()); dbContext.AddRange(cartItems); dbContext.SaveChanges(); var controller = new CheckoutController() { DbContext = dbContext, }; controller.ActionContext.HttpContext = httpContext; // Act var result = await controller.AddressAndPayment(order, CancellationToken.None); // Assert var redirectResult = Assert.IsType<RedirectToActionResult>(result); Assert.Equal("Complete", redirectResult.ActionName); Assert.Null(redirectResult.ControllerName); Assert.NotNull(redirectResult.RouteValues); Assert.Equal(orderId, redirectResult.RouteValues["Id"]); }
public async Task SendFileWorks() { var context = new DefaultHttpContext(); var response = context.Response; var fakeFeature = new FakeSendFileFeature(); context.SetFeature<IHttpSendFileFeature>(fakeFeature); await response.SendFileAsync("bob", 1, 3, CancellationToken.None); Assert.Equal("bob", fakeFeature.name); Assert.Equal(1, fakeFeature.offset); Assert.Equal(3, fakeFeature.length); Assert.Equal(CancellationToken.None, fakeFeature.token); }
public void GetOnSessionProperty_ReturnsAvailableSession() { // Arrange var context = new DefaultHttpContext(); var session = new TestSession(); session.Set("key1", null); session.Set("key2", null); var feature = new BlahSessionFeature(); feature.Session = session; context.SetFeature<ISessionFeature>(feature); // Act & Assert Assert.Same(session, context.Session); context.Session.Set("key3", null); Assert.Equal(3, context.Session.Keys.Count()); }
public void GetCartId_ReturnsCartIdFromCookies() { // Arrange var cartId = "cartId_A"; var httpContext = new DefaultHttpContext(); httpContext.SetFeature<IRequestCookiesFeature>(new CookiesFeature("Session", cartId)); var cart = new ShoppingCart(new MusicStoreContext()); // Act var result = cart.GetCartId(httpContext); // Assert Assert.NotNull(result); Assert.Equal(cartId, result); }
public void SettingSession_OverridesAvailableSession() { // Arrange var context = new DefaultHttpContext(); var session = new TestSession(); session.Set("key1", null); session.Set("key2", null); var feature = new BlahSessionFeature(); feature.Session = session; context.SetFeature<ISessionFeature>(feature); // Act context.Session = new TestSession(); // Assert Assert.NotSame(session, context.Session); Assert.Empty(context.Session.Keys); }
public void GetOnSessionProperty_ReturnsAvailableSession() { // Arrange var context = new DefaultHttpContext(); var session = new TestSession(); session.Set("key1", null); session.Set("key2", null); var feature = new BlahSessionFeature(); feature.Session = session; context.SetFeature <ISessionFeature>(feature); // Act & Assert Assert.Same(session, context.Session); context.Session.Set("key3", null); Assert.Equal(3, context.Session.Keys.Count()); }
public void SettingSession_OverridesAvailableSession() { // Arrange var context = new DefaultHttpContext(); var session = new TestSession(); session.Set("key1", null); session.Set("key2", null); var feature = new BlahSessionFeature(); feature.Session = session; context.SetFeature <ISessionFeature>(feature); // Act context.Session = new TestSession(); // Assert Assert.NotSame(session, context.Session); Assert.Empty(context.Session.Keys); }
public ManageControllerTest() { var services = new ServiceCollection(); services.AddEntityFramework() .AddInMemoryDatabase() .AddDbContext<MusicStoreContext>(options => options.UseInMemoryDatabase()); services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<MusicStoreContext>(); services.AddLogging(); // IHttpContextAccessor is required for SignInManager, and UserManager var context = new DefaultHttpContext(); context.SetFeature<IHttpAuthenticationFeature>(new HttpAuthenticationFeature() { Handler = new TestAuthHandler() }); services.AddInstance<IHttpContextAccessor>( new HttpContextAccessor() { HttpContext = context, }); _serviceProvider = services.BuildServiceProvider(); }
public async Task ExecuteResultAsync_CallsSendFileAsync_IfIHttpSendFilePresent() { // Arrange var path = Path.GetFullPath(Path.Combine("TestFiles", "FilePathResultTestFile.txt")); var result = new FilePathResult(path, "text/plain") { FileProvider = new PhysicalFileProvider(Path.GetFullPath(".")), }; var sendFileMock = new Mock<IHttpSendFileFeature>(); sendFileMock .Setup(s => s.SendFileAsync(path, 0, null, CancellationToken.None)) .Returns(Task.FromResult<int>(0)); var httpContext = new DefaultHttpContext(); httpContext.SetFeature(sendFileMock.Object); var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); // Act await result.ExecuteResultAsync(context); // Assert sendFileMock.Verify(); }
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.SetFeature<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, string[]>( "RequestVerificationToken", new string[] { tokens.CookieToken + ":" + tokens.FormToken }); httpContext.Request.Headers.Add(headers); // Cotroller initialization var controller = new ShoppingCartController() { DbContext = dbContext, Antiforgery = antiForgery, }; controller.ActionContext.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)); }
internal RequestState(HttpRequestMessage request, PathString pathBase, CancellationToken cancellationToken) { _request = request; _responseTcs = new TaskCompletionSource<HttpResponseMessage>(); if (request.RequestUri.IsDefaultPort) { request.Headers.Host = request.RequestUri.Host; } else { request.Headers.Host = request.RequestUri.GetComponents(UriComponents.HostAndPort, UriFormat.UriEscaped); } FeatureCollection = new FeatureCollection(); HttpContext = new DefaultHttpContext(FeatureCollection); HttpContext.SetFeature<IHttpRequestFeature>(new RequestFeature()); _responseFeature = new ResponseFeature(); HttpContext.SetFeature<IHttpResponseFeature>(_responseFeature); var serverRequest = HttpContext.Request; serverRequest.Protocol = "HTTP/" + request.Version.ToString(2); serverRequest.Scheme = request.RequestUri.Scheme; serverRequest.Method = request.Method.ToString(); var fullPath = PathString.FromUriComponent(request.RequestUri); PathString remainder; if (fullPath.StartsWithSegments(pathBase, out remainder)) { serverRequest.PathBase = pathBase; serverRequest.Path = remainder; } else { serverRequest.PathBase = PathString.Empty; serverRequest.Path = fullPath; } serverRequest.QueryString = QueryString.FromUriComponent(request.RequestUri); // TODO: serverRequest.CallCancelled = cancellationToken; foreach (var header in request.Headers) { serverRequest.Headers.AppendValues(header.Key, header.Value.ToArray()); } var requestContent = request.Content; if (requestContent != null) { foreach (var header in request.Content.Headers) { serverRequest.Headers.AppendValues(header.Key, header.Value.ToArray()); } } _responseStream = new ResponseStream(CompleteResponse); HttpContext.Response.Body = _responseStream; HttpContext.Response.StatusCode = 200; }
private HttpContext GetHttpContext(ISession session, bool sessionEnabled = true) { var httpContext = new DefaultHttpContext(); if(sessionEnabled) { httpContext.SetFeature<ISessionFeature>(new SessionFeature() { Session = session }); } return httpContext; }
public async Task AddToCart_AddsItemToCart() { // Arrange var albumId = 3; var sessionFeature = new SessionFeature() { Session = CreateTestSession(), }; var httpContext = new DefaultHttpContext(); httpContext.SetFeature<ISessionFeature>(sessionFeature); httpContext.Session.SetString("Session", "CartId_A"); // Creates the albums of AlbumId = 1 ~ 10. var dbContext = _serviceProvider.GetRequiredService<MusicStoreContext>(); var albums = CreateTestAlbums(itemPrice: 10); dbContext.AddRange(albums); dbContext.SaveChanges(); var controller = new ShoppingCartController() { DbContext = dbContext }; controller.ActionContext.HttpContext = httpContext; // Act var result = await controller.AddToCart(albumId, CancellationToken.None); // Assert var cart = ShoppingCart.GetCart(dbContext, httpContext); Assert.Equal(1, (await cart.GetCartItems()).Count); Assert.Equal(albumId, (await cart.GetCartItems()).Single().AlbumId); var redirectResult = Assert.IsType<RedirectToActionResult>(result); Assert.Null(redirectResult.ControllerName); Assert.Equal("Index", redirectResult.ActionName); }
public async Task Index_ReturnsCartItems_WhenItemsInCart() { // Arrange var cartId = "CartId_A"; var sessionFeature = new SessionFeature() { Session = CreateTestSession(), }; var httpContext = new DefaultHttpContext(); httpContext.SetFeature<ISessionFeature>(sessionFeature); httpContext.Session.SetString("Session", cartId); var dbContext = _serviceProvider.GetRequiredService<MusicStoreContext>(); var cartItems = CreateTestCartItems( cartId, itemPrice: 10, numberOfItem: 5); dbContext.AddRange(cartItems.Select(n => n.Album).Distinct()); dbContext.AddRange(cartItems); dbContext.SaveChanges(); var controller = new ShoppingCartController() { DbContext = dbContext, }; controller.ActionContext.HttpContext = httpContext; // Act var result = await controller.Index(); // Assert var viewResult = Assert.IsType<ViewResult>(result); Assert.NotNull(viewResult.ViewData); Assert.Null(viewResult.ViewName); var model = Assert.IsType<ShoppingCartViewModel>(viewResult.ViewData.Model); Assert.Equal(5, model.CartItems.Count); Assert.Equal(5 * 10, model.CartTotal); }