public void Delete_ThrowsArgumentException_WhenProductsAreRelatedToTheSupplier()
        {
            // Arrange
            var suppliers = new List <Supplier>
            {
                new Supplier {
                    Name = "TestSupplier1", Id = 1, CityId = 1
                },
                new Supplier {
                    Name = "TestSupplier2", Id = 2
                }
            }.AsQueryable();

            var products = new List <Product>
            {
                new Product {
                    Name = "TestProduct1", SupplierId = 1
                }
            }.AsQueryable();

            var mockDbSupplierSet = new Mock <DbSet <Supplier> >();

            mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.Provider).Returns(suppliers.Provider);
            mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.Expression).Returns(suppliers.Expression);
            mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.ElementType).Returns(suppliers.ElementType);
            mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.GetEnumerator()).Returns(suppliers.GetEnumerator());

            var mockDbProductSet = new Mock <DbSet <Product> >();

            mockDbProductSet.As <IQueryable <Product> >().Setup(m => m.Provider).Returns(products.Provider);
            mockDbProductSet.As <IQueryable <Product> >().Setup(m => m.Expression).Returns(products.Expression);
            mockDbProductSet.As <IQueryable <Product> >().Setup(m => m.ElementType).Returns(products.ElementType);
            mockDbProductSet.As <IQueryable <Product> >().Setup(m => m.GetEnumerator()).Returns(products.GetEnumerator());

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(c => c.Suppliers).Returns(mockDbSupplierSet.Object);
            mockContext.Setup(c => c.Products).Returns(mockDbProductSet.Object);

            var supplierBusiness = new SupplierBusiness(mockContext.Object);

            // Act & Assert
            try
            {
                int idToDelete = 1;
                supplierBusiness.Delete(idToDelete);
                Assert.Fail("No exception was thrown.");
            }
            catch (ArgumentException ex)
            {
                string expectedMessage = string.Format("One or more products are related to this supplier.");
                Assert.AreEqual(expectedMessage, ex.Message, "Wrong exception was thrown.");
            }
        }
        public void Delete_SuccessfullyDeletesSupplier_WhenNoProductsAreRelatedToTheSupplier()
        {
            // Arrange
            var suppliers = new List <Supplier>
            {
                new Supplier {
                    Name = "TestSupplier1", Id = 1, CityId = 1
                },
                new Supplier {
                    Name = "TestSupplier2", Id = 2, CityId = 1
                }
            }.AsQueryable();

            var products = new List <Product>
            {
                new Product {
                    Name = "TestProduct1", SupplierId = 1
                }
            }.AsQueryable();

            var mockDbSupplierSet = new Mock <DbSet <Supplier> >();

            mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.Provider).Returns(suppliers.Provider);
            mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.Expression).Returns(suppliers.Expression);
            mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.ElementType).Returns(suppliers.ElementType);
            mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.GetEnumerator()).Returns(suppliers.GetEnumerator());

            var mockDbProductSet = new Mock <DbSet <Product> >();

            mockDbProductSet.As <IQueryable <Product> >().Setup(m => m.Provider).Returns(products.Provider);
            mockDbProductSet.As <IQueryable <Product> >().Setup(m => m.Expression).Returns(products.Expression);
            mockDbProductSet.As <IQueryable <Product> >().Setup(m => m.ElementType).Returns(products.ElementType);
            mockDbProductSet.As <IQueryable <Product> >().Setup(m => m.GetEnumerator()).Returns(products.GetEnumerator());

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(c => c.Suppliers).Returns(mockDbSupplierSet.Object);
            mockContext.Setup(c => c.Products).Returns(mockDbProductSet.Object);

            var supplierBusiness = new SupplierBusiness(mockContext.Object);

            // Act
            int idToDelete = 2;

            supplierBusiness.Delete(idToDelete);

            // Assert
            mockDbSupplierSet.Verify(m => m.Remove(It.IsAny <Supplier>()), Times.Once());
            mockContext.Verify(m => m.SaveChanges(), Times.Once());
        }