public void Add_SuccessfullyAddsSupplier_WhenIdIsNotDuplicate() { // Arrange var countries = new List <Country> { new Country { Name = "TestCountry1", Id = 1 } }.AsQueryable(); var cities = new List <City> { new City { Name = "TestCity1", Id = 1, CountryId = 1 } }.AsQueryable(); var supplierData = new List <Supplier>().AsQueryable(); var mockDbCountrySet = new Mock <DbSet <Country> >(); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.Provider).Returns(countries.Provider); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.Expression).Returns(countries.Expression); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.ElementType).Returns(countries.ElementType); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.GetEnumerator()).Returns(countries.GetEnumerator()); var mockDbCitySet = new Mock <DbSet <City> >(); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.Provider).Returns(cities.Provider); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.Expression).Returns(cities.Expression); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.ElementType).Returns(cities.ElementType); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.GetEnumerator()).Returns(cities.GetEnumerator()); var mockDbSupplierSet = new Mock <DbSet <Supplier> >(); mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.Provider).Returns(supplierData.Provider); mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.Expression).Returns(supplierData.Expression); mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.ElementType).Returns(supplierData.ElementType); mockDbSupplierSet.As <IQueryable <Supplier> >().Setup(m => m.GetEnumerator()).Returns(supplierData.GetEnumerator()); var mockContext = new Mock <EazyCartContext>(); mockContext.Setup(c => c.Cities).Returns(mockDbCitySet.Object); mockContext.Setup(c => c.Countries).Returns(mockDbCountrySet.Object); mockContext.Setup(c => c.Suppliers).Returns(mockDbSupplierSet.Object); var supplierBusiness = new SupplierBusiness(mockContext.Object); // Act supplierBusiness.Add("TestSupplier1", 1, "TestCity1", "TestCountry1"); // Assert mockDbSupplierSet.Verify(m => m.Add(It.IsAny <Supplier>()), Times.Once()); mockContext.Verify(m => m.SaveChanges(), Times.Once()); }
public void Add_ThrowsArgumentException_WhenSupplierWithIdAlreadyExists() { // Arrange var countries = new List <Country> { new Country { Name = "TestCountry1", Id = 1 } }.AsQueryable(); var cities = new List <City> { new City { Name = "TestCity1", Id = 1, CountryId = 1 } }.AsQueryable(); var suppliers = new List <Supplier> { new Supplier { Name = "TestSupplier1", Id = 1, CityId = 1 } }.AsQueryable(); var mockDbCountrySet = new Mock <DbSet <Country> >(); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.Provider).Returns(countries.Provider); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.Expression).Returns(countries.Expression); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.ElementType).Returns(countries.ElementType); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.GetEnumerator()).Returns(countries.GetEnumerator()); var mockDbCitySet = new Mock <DbSet <City> >(); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.Provider).Returns(cities.Provider); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.Expression).Returns(cities.Expression); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.ElementType).Returns(cities.ElementType); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.GetEnumerator()).Returns(cities.GetEnumerator()); 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 mockContext = new Mock <EazyCartContext>(); mockContext.Setup(c => c.Cities).Returns(mockDbCitySet.Object); mockContext.Setup(c => c.Countries).Returns(mockDbCountrySet.Object); mockContext.Setup(c => c.Suppliers).Returns(mockDbSupplierSet.Object); mockContext.Setup(c => c.SaveChanges()).Throws(new Exception()); var supplierBusiness = new SupplierBusiness(mockContext.Object); int duplicateId = 1; // Act & Assert try { supplierBusiness.Add("TestSupplier1", 1, "TestCity1", "TestCountry1"); supplierBusiness.Add("TestSupplier2", 1, "TestCity1", "TestCountry1"); Assert.Fail("No exception was thrown"); } catch (ArgumentException ex) { string expectedMessage = string.Format($"Supplier with ID {duplicateId} already exists."); Assert.AreEqual(expectedMessage, ex.Message, "Wrong exception was thrown."); } }
public void Add_ThrowsArgumentException_WhenCountryIdOrCityDoesNotExist() { // Arrange var countries = new List <Country> { new Country { Name = "TestCountry1", Id = 1 } }.AsQueryable(); var cities = new List <City> { new City { Name = "TestCity1", Id = 1, CountryId = 1 } }.AsQueryable(); var suppliers = new List <Supplier> { new Supplier { Name = "TestSupplier1", Id = 1, CityId = 1 } }.AsQueryable(); var mockDbCountrySet = new Mock <DbSet <Country> >(); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.Provider).Returns(countries.Provider); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.Expression).Returns(countries.Expression); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.ElementType).Returns(countries.ElementType); mockDbCountrySet.As <IQueryable <Country> >().Setup(m => m.GetEnumerator()).Returns(countries.GetEnumerator()); var mockDbCitySet = new Mock <DbSet <City> >(); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.Provider).Returns(cities.Provider); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.Expression).Returns(cities.Expression); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.ElementType).Returns(cities.ElementType); mockDbCitySet.As <IQueryable <City> >().Setup(m => m.GetEnumerator()).Returns(cities.GetEnumerator()); 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 mockContext = new Mock <EazyCartContext>(); mockContext.Setup(c => c.Cities).Returns(mockDbCitySet.Object); mockContext.Setup(c => c.Countries).Returns(mockDbCountrySet.Object); mockContext.Setup(c => c.Suppliers).Returns(mockDbSupplierSet.Object); var supplierBusiness = new SupplierBusiness(mockContext.Object); // Act & Assert try { supplierBusiness.Add("TestSupplier1", 1, "InvalidCity", "InvalidCountry"); Assert.Fail("No exception was thrown"); } catch (ArgumentException ex) { string expectedMessage = string.Format("No such country/city exists"); Assert.AreEqual(expectedMessage, ex.Message, "Wrong exception was thrown."); } }