Пример #1
0
        public void AddToCart_ValidItem_Succeeds()
        {
            // Get a product to load the details page for.
            var album = storeDB.Albums
                .Take(1)
                .First();

            var settings = new ExecutorSettings("ShoppingCart/AddToCart/" + album.AlbumId)
            {
                User = new GenericPrincipal(new GenericIdentity("GenghisKahn"), null)
            };

            using (var scope = new MvcExecutorScope(settings))
            {
                Assert.AreEqual(302, scope.HttpContext.Response.StatusCode);
                Assert.AreEqual("/ShoppingCart", scope.HttpContext.Response.RedirectLocation);

                // Now verify that the cart contains the item we just added.
                var cart = MvcMusicStore.Models.ShoppingCart.GetCart(scope.HttpContext);
                var cartItems = cart.GetCartItems();
                Assert.AreEqual(1, cartItems.Count);
                Assert.AreEqual(album.AlbumId, cartItems[0].AlbumId);

                // Finally clear the cart.
                cart.EmptyCart();
            }
        }
Пример #2
0
        public void Index_Load_ExpectedHtml()
        {
            // Get a product to load the details page for.
            var album = storeDB.Albums
                .Take(1)
                .First();

            using (var scope = new MvcExecutorScope("Store/Details/" + album.AlbumId))
            {
                Assert.AreEqual(200, scope.HttpContext.Response.StatusCode);
                Assert.IsTrue(scope.Controller is StoreController);
                Assert.AreEqual("Details", scope.Action);

                var model = scope.Controller.ViewData.Model as Album;
                Assert.IsNotNull(model);
                Assert.AreEqual(album.AlbumId, model.AlbumId);

                Assert.IsFalse(String.IsNullOrEmpty(scope.ResponseText));

                // Load the ResponseText into an HtmlDocument
                var html = new HtmlDocument();
                html.LoadHtml(scope.ResponseText);

                // Use ScrappySharp CSS selector to make assertions about the rendered HTML
                Assert.AreEqual(album.Title, html.DocumentNode.CssSelect("#main h2").First().InnerText);
            }
        }
Пример #3
0
        public void Register_InvalidPassword_Fails()
        {
            string invalidPassword = "******";
            var formData = new HttpValueCollection {
                {"UserName", "Bill"},
                {"Email", "*****@*****.**"},
                {"Password", invalidPassword},
                {"ConfirmPassword", invalidPassword}
            };

            using (var scope = new MvcExecutorScope(new ExecutorSettings("Account/Register") { Form = formData }))
            {
                var responseText = scope.ResponseText;

                Assert.IsFalse(scope.ViewData.ModelState.IsValid);

                var errors = new List<string>();
                foreach (var modelState in scope.ViewData.ModelState.Values)
                    errors.AddRange(modelState.Errors.Select<ModelError, string>(e => e.ErrorMessage));

                Assert.AreEqual(1, errors.Count);

                string passwordError = "The Password must be at least 6 characters long.";
                Assert.AreEqual(passwordError, errors[0]);

                var html = new HtmlDocument();
                html.LoadHtml(scope.ResponseText);

                var passwordErrorSpan = html.DocumentNode.CssSelect("span.field-validation-error");
                Assert.AreEqual(1, passwordErrorSpan.Count());
                Assert.AreEqual(passwordError, passwordErrorSpan.ElementAt(0).InnerText);
            }
        }
Пример #4
0
        public void ControllerEvents_DoExecute()
        {
            using (var scope = new MvcExecutorScope("Store"))
            {
                var model = scope.ViewData.Model as IList<Genre>;
                Assert.IsNotNull(model);

                Assert.IsTrue((bool)scope.HttpContext.Items["OnActionExecuting"]);
                Assert.IsTrue((bool)scope.HttpContext.Items["OnActionExecuted"]);
                Assert.IsTrue((bool)scope.HttpContext.Items["OnResultExecuting"]);
                Assert.IsTrue((bool)scope.HttpContext.Items["OnResultExecuted"]);
            }
        }
Пример #5
0
        public void Checkout_Success()
        {
            string userName = "******";
            int numItemsInCart = 2;

            var cart = TestUtil.AddItemsToCart(userName, storeDB.Albums.Take(numItemsInCart));

            var form = new HttpValueCollection
            {
             { "FirstName","Miles"},
             {"LastName","Davis"},
             {"Address","100 Broadway Ave."},
             {"City","New York"},
             {"State","NY"},
             {"PostalCode","12345"},
             {"Country","United States"},
             {"Phone","111-111-1111"},
             {"Email","*****@*****.**"},
             {"PromoCode","FREE"}
            };

            var settings = new ExecutorSettings("Checkout/AddressAndPayment") {
                Form=form,
                HttpMethod="POST",
                User=TestUtil.CreateUser(userName)
            };

            Order order;
            using (var scope = new MvcExecutorScope(settings))
            {
                Assert.AreEqual(302, scope.HttpContext.Response.StatusCode);

                var match = new Regex("/Checkout/Complete/(\\d+)").Match(scope.HttpContext.Response.RedirectLocation);
                Assert.IsTrue(match.Success);

                var orderId = Int32.Parse(match.Groups[1].Value);

                order = storeDB.Orders.Single(o=>o.OrderId==orderId);
                Assert.AreEqual(form["FirstName"], order.FirstName);
                Assert.AreEqual(form["Email"], order.Email);

                var orderDetails = storeDB.OrderDetails.Where(od => od.OrderId == orderId);
                Assert.AreEqual(numItemsInCart, orderDetails.Count());
            }

            // Cleanup
            storeDB.Orders.Remove(order);
            storeDB.SaveChanges();
        }
Пример #6
0
        public void Index_Load_ExpectedHtml()
        {
            using (var scope = new MvcExecutorScope(""))
            {
                var controller = scope.Controller as HomeController;
                Assert.IsNotNull(controller);
                Assert.AreEqual(scope.Action, "Index");

                var model = controller.ViewData.Model as List<MvcMusicStore.Models.Album>;
                Assert.IsNotNull(model, "Expected the Model to be a list of Albums.");

                var html = new HtmlDocument();
                html.LoadHtml(scope.ResponseText);

                AssertCategoryMenuValid(html);
                AssertAlbumListValid(html);
            }
        }
Пример #7
0
        public void Autofac_ResolveHttpRequest_UsesCorrectLifetimeScope()
        {
            using (var scope = new MvcExecutorScope("Meta", "testparam=1"))
            {
                //var context = DependencyResolver.Current.GetService<HttpContextBase>();

                var request = DependencyResolver.Current.GetService<HttpRequestBase>();
                Assert.AreEqual("1", request.QueryString["testparam"]);
            }

            using (var scope = new MvcExecutorScope("Meta", "testparam=2"))
            {
                //var context = DependencyResolver.Current.GetService<HttpContextBase>();

                var request = DependencyResolver.Current.GetService<HttpRequestBase>();
                Assert.AreEqual("2", request.QueryString["testparam"]);
            }

            // Now that we are outside the executor scope, resolving the HttpRequestBase should return to the
            // actual HttpRequest.
            //Assert.IsNullOrEmpty(DependencyResolver.Current.GetService<HttpRequestBase>().QueryString["scope"]);
        }
Пример #8
0
        public void Register_ValidInput_Redirects()
        {
            var formData = new HttpValueCollection {
                {"UserName", "ChrisColumbus"},
                {"Email", "*****@*****.**"},
                {"Password", "explore_1492"},
                {"ConfirmPassword", "explore_1492"}
            };

            try
            {
                using (var scope = new MvcExecutorScope(new ExecutorSettings("Account/Register") { Form = formData }))
                {
                    Assert.IsTrue(scope.ViewData.ModelState.IsValid);
                    Assert.AreEqual(302, scope.HttpContext.Response.StatusCode);
                    Assert.AreEqual("/", scope.HttpContext.Response.RedirectLocation);
                }
            }
            finally
            {
                // Cleanup
                Membership.DeleteUser(formData["UserName"]);
            }
        }
Пример #9
0
        public void ViewCart_ExpectedHtml()
        {
            var albumsToCart = storeDB.Albums.Take(2);
            string userName = "******";

            var cart = TestUtil.AddItemsToCart(userName, albumsToCart);

            var settings = new ExecutorSettings("ShoppingCart/Index")
            {
                User = TestUtil.CreateUser(userName)
            };

            using (var scope = new MvcExecutorScope(settings))
            {
                var viewModel = scope.ViewData.Model as ShoppingCartViewModel;
                Assert.IsNotNull(viewModel);
                Assert.AreEqual(albumsToCart.Count(), viewModel.CartItems.Count);
                foreach (var album in albumsToCart)
                    Assert.IsTrue(viewModel.CartItems.Any(c => c.AlbumId == album.AlbumId));

                Assert.IsFalse(String.IsNullOrEmpty(scope.ResponseText));
            }

            // Cleanup
            cart.EmptyCart();
        }
Пример #10
0
        public void RemoveFromCart_ValidJson()
        {
            // Add an item to the cart so we have something to remove.
            string userName = "******";
            MvcMusicStore.Models.ShoppingCart cart = TestUtil.AddItemsToCart(
                userName, storeDB.Albums.Take(1));
            var recordId = cart.GetCartItems().First().RecordId;

            var settings = new ExecutorSettings("ShoppingCart/RemoveFromCart/" + recordId)
            {
                User = TestUtil.CreateUser(userName),
                HttpMethod = "POST"
            };

            using (var scope = new MvcExecutorScope(settings))
            {
                Assert.AreEqual("application/json", scope.HttpContext.Response.ContentType, "Expected json to be returned.");

                var deserializedResponse = JsonConvert.DeserializeObject<ShoppingCartRemoveViewModel>(scope.ResponseText);
                Assert.AreEqual(0.0d, deserializedResponse.CartTotal, "The shopping cart total should be $0.00.");
                Assert.AreEqual(0, deserializedResponse.ItemCount, "The shopping cart should have 0 items left.");
                Assert.AreEqual(recordId, deserializedResponse.DeleteId);
            }
        }