public void CanViewProductsFromASingleCategory()
        {
            // Arrange: if two products are in two different categories...
            IProductsRepository repository = UnitTestHelpers.MockProductsRepository(
                new Product { Name = "Artemis", Category = "Greek" },
                new Product { Name = "Neptune", Category = "Roman" }
                );
            var controller = new ProductsController(repository);

            var result = controller.List("Roman", 1);

            var viewModel = (ProductsListViewModel)result.ViewData.Model;
            viewModel.Products.Count.ShouldEqual(1);
            viewModel.Products[0].Name.ShouldEqual("Neptune");
            viewModel.CurrentCategory.ShouldEqual("Roman");
        }
        public void CanViewProductsFromAllCategories()
        {
            // Arrange: if two products are in two different categories...
            IProductsRepository repository = UnitTestHelpers.MockProductsRepository(
                new Product { Name = "Artemis", Category = "Greek" },
                new Product { Name = "Neptune", Category = "Roman" }
                );
            var controller = new ProductsController(repository);

            // act: ... then we ask for the all products category
            var result = controller.List(null, 1);

            // assert: we get both products
            var viewModel = (ProductsListViewModel)result.ViewData.Model;
            viewModel.Products.Count.ShouldEqual(2);
            viewModel.Products[0].Name.ShouldEqual("Artemis");
            viewModel.Products[1].Name.ShouldEqual("Neptune");
        }
        public void ProductListsIncludeCorrectPageNumbers()
        {
            // Arrange: If there are five products in the repository...
            var mockRepository = UnitTestHelpers.MockProductsRepository(
                new Product { Name = "P1" }, new Product { Name = "P2" },
                new Product { Name = "P3" }, new Product { Name = "P4" },
                new Product { Name = "P5" }
            );
            var controller = new ProductsController(mockRepository) { PageSize = 3 };

            // Act: ... then when the user asks for the second page (PageSize=3)...
            var result = controller.List(null, 2);

            // Assert: ... they'll see page links matching the following
            var viewModel = (ProductsListViewModel)result.ViewData.Model;
            PagingInfo pagingInfo = viewModel.PagingInfo;
            pagingInfo.CurrentPage.ShouldEqual(2);
            pagingInfo.ItemsPerPage.ShouldEqual(3);
            pagingInfo.TotalItems.ShouldEqual(5);
            pagingInfo.TotalPages.ShouldEqual(2);
        }
        public void CanViewASinglePageOfProducts()
        {
            // arrange: if there are 5 products in the repository
            IProductsRepository repository = UnitTestHelpers.MockProductsRepository(
                new Product { Name = "P1" }, new Product { Name = "P2" },
                new Product { Name = "P3" }, new Product { Name = "P4" },
                new Product { Name = "P5" }
            );

            var controller = new ProductsController(repository);
            controller.PageSize = 3;

            // act: then when the user asks for the second page (pagesize=3)...
            var result = controller.List(null, 2);

            // Assert: they will just see the last two products
            var viewModel = (ProductsListViewModel)result.ViewData.Model;
            var displayedProducts = viewModel.Products;
            displayedProducts.Count.ShouldEqual(2);
            displayedProducts[0].Name.ShouldEqual("P4");
            displayedProducts[1].Name.ShouldEqual("P5");
        }