예제 #1
0
        public void Can_Delete_Valid_Products()
        {
            // Arrange - create a Product
            Product prod = new Product { ProductID = 2, Name = "Test" };

            // Arrange - create the mock repository
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(
                new Product[] {
                    new Product {ProductID = 1, Name = "P1"},
                    prod,
                    new Product {ProductID = 3, Name = "P3"},
                }
            );

            // Arrange - create the controller
            AdminController target = new AdminController(mock.Object);

            // Act - delete the product
            target.Delete(prod.ProductID);

            // Assert - ensure that the repository delete method was
            // called with the correct Product
            mock.Verify(m => m.DeleteProduct(prod.ProductID));
        }
예제 #2
0
        public void Cannot_Save_Invalid_Changes()
        {
            // Arrange
            // - Create a mock repository
            Mock<IProductRepository> mock = new Mock<IProductRepository>();

            // Arrange
            // - Crete the controller
            AdminController target = new AdminController(mock.Object);

            // Arrange
            // - Create a product
            Product product = new Product { Name = "Test" };

            // Arrange
            // - Add an error to the model state
            target.ModelState.AddModelError("error", "error");

            // Act
            // - Try to save the product
            ActionResult result = target.Edit(product, null);

            // Assert
            // - Check that the repository was not called
            mock.Verify(m => m.SaveProduct(It.IsAny<Product>()), Times.Never());

            // Assert
            // - Check the method result type
            Assert.IsInstanceOfType(result, typeof(ViewResult));
        }
예제 #3
0
        public void Can_Edit_Product()
        {
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(new[]
                {
                    new Product{ProductId = 1, Name = "P1"},
                    new Product{ProductId = 2, Name = "P2"},
                    new Product{ProductId = 3, Name = "P3"}
                }.AsQueryable());

            AdminController target = new AdminController(mock.Object);

            var p1 = target.Edit(1).ViewData.Model as Product;
            var p2 = target.Edit(2).ViewData.Model as Product;
            var p3 = target.Edit(3).ViewData.Model as Product;

            target = new AdminController(mock.Object);
            var p4 = (Product)target.Edit(4).ViewData.Model;

            Assert.AreEqual(1, p1.ProductId);
            Assert.AreEqual(2, p2.ProductId);
            Assert.AreEqual(3, p3.ProductId);

            Assert.IsNull(p4);
        }
        public void Delete_product_called_with_right_parameters()
        {
            var mock = CreateRepositoryMock();
            var controller = new AdminController(mock.Object);

            controller.Delete(2);

            mock.Verify(m => m.Delete(2));
        }
        public void Index_contains_all_products()
        {
            var controller = new AdminController(CreateRepositoryMock().Object);

            var result = ((IEnumerable<Product>)controller.Index().ViewData.Model).ToArray();

            Assert.AreEqual(3, result.Length);
            Assert.AreEqual("P1", result[0].Name);
        }
예제 #6
0
 public void Can_Save_Valid_Changed()
 {
     var mock = new Mock<IProductRepository>();
     var target = new AdminController(mock.Object);
     var product = new Product {Name = "test"};
     var result = target.Edit(product);
     mock.Verify(m => m.SaveProduct(product));
     Assert.IsNotInstanceOfType(result, typeof(ViewResult));
 }
예제 #7
0
 public void Cannot_Save_Invalid_Changes()
 {
     Mock<IProductRepository> mock = new Mock<IProductRepository>();
     AdminController target = new AdminController(mock.Object);
     Product product = new Product{Name = "Test"};
     target.ModelState.AddModelError("error", "error");
     ActionResult result = target.Edit(product);
     mock.Verify(m => m.SaveProduct(It.IsAny<Product>()), Times.Never);
     Assert.IsInstanceOfType(result, typeof(ViewResult));
 }
예제 #8
0
        public void Can_Save_Valid_Changes()
        {
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            AdminController target = new AdminController(mock.Object);
            Product prod = new Product() { Name = "Test" };

            ActionResult res = target.Edit(prod);

            mock.Verify(m => m.SaveProduct(prod));
            Assert.IsNotInstanceOfType(res, typeof(ViewResult));
        }
예제 #9
0
        public void Cannot_Edit_NonExistent_Product()
        {
            // arrange
            var mock = InitializeMock();

            // arrange
            AdminController target = new AdminController(mock.Object);

            Product result = target.Edit(4).ViewData.Model as Product;

            Assert.IsNull(result);
        }
        public void Can_edit_product()
        {
            var mock = new Mock<IProductRepository>();
            var controller = new AdminController(mock.Object);

            var product = new Product { Name = "Test" };

            var result = controller.Edit(product, null);
            mock.Verify(m => m.Save(product));

            Assert.IsNotInstanceOfType(result, typeof(ViewResult));
        }
예제 #11
0
 public void Cannot_Edit_Nonexistent_Product()
 {
     var mock = new Mock<IProductRepository>();
     mock.Setup(x => x.Products).Returns(new List<Product>
     {
         new Product {Name = "P1", ProductId = 1, Category = "Apples"},
         new Product {Name = "P2", ProductId = 2, Category = "Apples"},
         new Product {Name = "P3", ProductId = 3, Category = "Plum"},
     });
     var target = new AdminController(mock.Object);
     var product = target.Edit(4).ViewData.Model as Product;
     Assert.IsNull(product);
 }
        public void AjaxDelete_PassesProductIdToRepositoryRemoveMethod_DeletesProduct()
        {
            // Arrange
            Mock<IProductRepository> mock = new Mock<IProductRepository>();

            AdminController target = new AdminController(mock.Object);

            // Act
            var result = target.AjaxDelete(new Product{ProductID = 3});

            // Assert
            mock.Verify(m => m.RemoveProduct(3), Times.Once());
        }
예제 #13
0
        public void Can_Access_Product_Editing_Screen()
        {
            // Arrange: Repository that can return any IQueryable<Product>
            var testProducts = new[] { new Product { ProductId = 12 }, new Product { ProductId = 17 } };
            var mockRepository = UnitTestHelpers.MockProductsRepository(testProducts);

            // Act
            var result = new AdminController(mockRepository).Edit(17);

            // Assert
            result.ShouldBeDefaultView();
            ((Product)result.ViewData.Model).ProductId.ShouldEqual(17);
        }
        public void Cannot_save_invalid_changes()
        {
            var mock = new Mock<IProductRepository>();
            var controller = new AdminController(mock.Object);
            var product = new Product { Name = "Test" };

            controller.ModelState.AddModelError("error", "error");

            var result = controller.Edit(product, null);
            mock.Verify(m => m.Save(product), Times.Never());

            Assert.IsInstanceOfType(result, typeof(ViewResult));
        }
예제 #15
0
        public void Can_Edit_Nonexistint_Product()
        {
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(new Product[]{
            new Product{ProductID=1,Name="p1"},
            new Product{ProductID=2,Name="p2"},
            new Product{ProductID=3,Name="p3"},
            }.AsQueryable());
            AdminController target = new AdminController(mock.Object);

            Product result = target.Edit(4).ViewData.Model as Product;
            Assert.IsNull(result);
        }
예제 #16
0
        public void AdminController_IndexAction_Retuns_Products()
        {
            //Arrange
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(products.AsQueryable());
            AdminController target = new AdminController(mock.Object);

            //Act
            Product[] result = ((IEnumerable<Product>)target.Index().Model).ToArray();

            //Assert
            Assert.AreEqual(6, result.Length);
            Assert.AreEqual(1, result[0].ProductID);
        }
예제 #17
0
        public void Cant_Edit_NonExistent_Product()
        {
            //Arrange
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(products.AsQueryable());

            AdminController target = new AdminController(mock.Object);

            //Act
            Product result = target.Edit(8).Model as Product;

            //Assert
            Assert.IsNull(result);
        }
예제 #18
0
        public void Can_Delete_Product()
        {
            var mockRepository = new Mock<IProductsRepository>();
            var product = new Product {ProductId = 24, Name = "P24"};

            mockRepository.Setup(x => x.Products).Returns(new[] {product}.AsQueryable());

            var controller = new AdminController(mockRepository.Object);
            var result = controller.Delete(24);

            mockRepository.Verify(x=>x.DeleteProduct(product));
            result.ShouldBeRedirectionTo(new {action = "Index"});
            controller.TempData["message"].ShouldEqual("P24 was deleted");
        }
예제 #19
0
        public void Cannot_Edit_Nonexistent_Product()
        {
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(new Product[] { new Product { ProductID= 1, Name="P1"},
                                                                new Product { ProductID= 2, Name="P2"},
                                                                new Product { ProductID= 3, Name="P3"}
            });

            AdminController target = new AdminController(mock.Object);

            Product result = (Product)target.Edit(4).ViewData.Model;

            Assert.IsNull(result);
        }
예제 #20
0
        public void CannotEditNonExistentProduct()
        {
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(new[]
            {
                new Product {ProductID = 1, Name = "P1"},
                new Product {ProductID = 2, Name = "P2"},
                new Product {ProductID = 3, Name = "P3"}
            });
            var target = new AdminController(mock.Object);

            var result = target.Edit(4).ViewData.Model as Product;

            Assert.IsNull(result);
        }
예제 #21
0
        public void Cant_Delete_InValid_Products()
        {
            // Arrange - create the mock repository
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(products.AsQueryable());

            // Arrange - create the controller
            AdminController target = new AdminController(mock.Object);

            // Act - delete the product
            target.Delete(100);
            // Assert - ensure that the repository delete method was
            // called with the correct Product
            mock.Verify(m => m.DeleteProduct(It.IsAny<Product>()), Times.Never());
        }
예제 #22
0
        public void Can_Delete_Valid_Products()
        {
            Product prod = new Product {ProductID = 2, Name = "Test"};
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(new Product[]
            {
                new Product {ProductID = 1, Name = "P1"},
                prod,
                new Product {ProductID = 3, Name = "P3"}
            });

            AdminController target = new AdminController(mock.Object);
            target.Delete(prod.ProductID);
            mock.Verify(m => m.DeleteProduct(prod.ProductID));
        }
예제 #23
0
        public void Cannot_Save_Invalid_Changes()
        {
            //Arrange - create mock repository
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            AdminController target = new AdminController(mock.Object);
            Product product = new Product { Name = "Test" };
            target.ModelState.AddModelError("error", "error");

            //Act - attempt to save the product
            ActionResult result = target.Edit(product, null);

            //Assert - check that the save products method was never called
            mock.Verify(m => m.SaveProduct(It.IsAny<Product>()), Times.Never());
            Assert.IsInstanceOfType(result, typeof(ViewResult));
        }
예제 #24
0
        public void Cannot_Delete_Invalid_Products()
        {
            Mock<IProductRepository> mock = new Mock<IProductRepository>();

            mock.Setup(m => m.Products).Returns(new Product[] {
                new Product{ProductID=1, Name="P1"},
                new Product{ProductID=2, Name="P2"},
                new Product{ProductID=3, Name="P3"}
            }.AsQueryable());

            AdminController target = new AdminController(mock.Object);

            target.Delete(100);

            mock.Verify(m => m.DeleteProduct(It.IsAny<Product>()), Times.Never());
        }
예제 #25
0
        public void CanDeleteValidProducts()
        {
            Product prod = new Product(){Id = 2, Name = "Test"};
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(new Product[]
            {
                new Product(){Id = 1, Name = "P1"},
                prod,
                new Product(){Id = 3, Name = "P3"}
            });
            AdminController controller = new AdminController(mock.Object);

            controller.Delete(prod.Id);

            mock.Verify(m => m.DeleteProduct(prod.Id));
        }
예제 #26
0
 public void Index_Contains_All_Products()
 {
     var mock = new Mock<IProductRepository>();
     mock.Setup(x => x.Products).Returns(new List<Product>
     {
         new Product {Name = "P1", ProductId = 1, Category = "Apples"},
         new Product {Name = "P2", ProductId = 2, Category = "Apples"},
         new Product {Name = "P3", ProductId = 3, Category = "Plum"},
     });
     var target = new AdminController(mock.Object);
     var result = (target.Index().ViewData.Model as IEnumerable<Product>).ToArray();
     Assert.AreEqual(result.Length, 3);
     Assert.AreEqual(result[0].Name, "P1");
     Assert.AreEqual(result[1].Name, "P2");
     Assert.AreEqual(result[2].Name, "P3");
 }
예제 #27
0
 public void Cannot_Edit_Nonexistent_Product()
 {
     // Arrange - create the mock repository
         Mock<IProductRepository> mock = new Mock<IProductRepository>();
         mock.Setup(m => m.Products).Returns(new Product[] {
     new Product {ProductID = 1, Name = "P1"},
     new Product {ProductID = 2, Name = "P2"},
     new Product {ProductID = 3, Name = "P3"},
     }.AsQueryable());
     // Arrange - create the controller
     AdminController target = new AdminController(mock.Object);
     // Act
     Product result = (Product)target.Edit(4).ViewData.Model;
     // Assert
     Assert.IsNull(result);
 }
예제 #28
0
        public void Cannot_Edit_NonExists_ProductId()
        {
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m => m.Products).Returns(new Product[] {
                new Product {ProductID = 1, Name = "P1"},
                new Product {ProductID = 2, Name = "P2"},
                new Product {ProductID = 3, Name = "P3"},
            }.AsQueryable());

            AdminController target = new AdminController(mock.Object);

            HttpNotFoundResult result = target.Edit(4) as HttpNotFoundResult;

            Assert.AreNotEqual(null, result);
            Assert.AreEqual((int)HttpStatusCode.NotFound, result.StatusCode);
        }
예제 #29
0
        public void Can_Edit_Product()
        {
            // arrange - create mock repository
            var mock = InitializeMock();

            // Arrange
            AdminController target = new AdminController(mock.Object);

            // Act
            Product p1 = target.Edit(1).ViewData.Model as Product;
            Product p2 = target.Edit(2).ViewData.Model as Product;
            Product p3 = target.Edit(3).ViewData.Model as Product;

            Assert.AreEqual(1, p1.ProductID);
            Assert.AreEqual(2, p2.ProductID);
            Assert.AreEqual(3, p3.ProductID);
        }
예제 #30
0
        public void Can_Save_Valid_Changes()
        {
            // Arrange - create mock repository
            Mock<IProductsRepository> mock = new Mock<IProductsRepository>();
            // Arrange - create controller
            AdminController target = new AdminController(mock.Object);
            // Arrange - create a product
            Product product = new Product { Name = "Test" };

            // Act - try to save the product
            ActionResult result = target.Edit(product, null);

            // Assert - check that the repository was called
            mock.Verify(m => m.SaveProduct(product));
            // Assert - check the method result type
            Assert.IsNotInstanceOfType(result, typeof(ViewResult));
        }