public void GetHighestid_ReturnsZero_WhenThereAreNoProductReceipts()
        {
            // Arrange
            var productReceipts = new List <ProductReceipt>().AsQueryable();

            var productReceiptMockSet = new Mock <DbSet <ProductReceipt> >();

            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Provider).Returns(productReceipts.Provider);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Expression).Returns(productReceipts.Expression);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.ElementType).Returns(productReceipts.ElementType);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.GetEnumerator()).Returns(productReceipts.GetEnumerator());

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(c => c.ProductsReceipts).Returns(productReceiptMockSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act
            int actualHighestId = productReceiptBusiness.GetHighestId();

            // Assert
            int expectedHighestId = 0;

            Assert.AreEqual(expectedHighestId, actualHighestId, "Highest Ids do not match");
        }
        public void GetProductReceipt_ReturnsACountry_WhichIsNotNull()
        {
            // Arrange
            var productReceipts = new List <ProductReceipt>
            {
                new ProductReceipt {
                    Id = 1, ReceiptId = 1, ProductCode = "000001", Quantity = 1, DiscountPercentage = 0
                },
            }.AsQueryable();

            var productReceiptMockSet = new Mock <DbSet <ProductReceipt> >();

            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Provider).Returns(productReceipts.Provider);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Expression).Returns(productReceipts.Expression);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.ElementType).Returns(productReceipts.ElementType);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.GetEnumerator()).Returns(productReceipts.GetEnumerator());

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(c => c.ProductsReceipts).Returns(productReceiptMockSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act
            int idToGet        = 1;
            var productReceipt = productReceiptBusiness.Get(idToGet);

            // Assert
            Assert.IsNotNull(productReceipt, "ProductReceipt could not be extracted succesfully");
        }
        public void Delete_DeletesProductReceiptSuccessfully_WhenIdIsCorrect()
        {
            // Arrange
            var productReceipts = new List <ProductReceipt>()
            {
                new ProductReceipt()
                {
                    Id = 1, ReceiptId = 1, ProductCode = "000001", Quantity = 1, DiscountPercentage = 0
                },
            }.AsQueryable();

            var productReceiptMockDbSet = new Mock <DbSet <ProductReceipt> >();

            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Provider).Returns(productReceipts.Provider);
            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Expression).Returns(productReceipts.Expression);
            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.ElementType).Returns(productReceipts.ElementType);
            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.GetEnumerator()).Returns(productReceipts.GetEnumerator());

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(x => x.ProductsReceipts).Returns(productReceiptMockDbSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act
            int idToDelete = 1;

            productReceiptBusiness.Delete(idToDelete);

            // Assert
            productReceiptMockDbSet.Verify(x => x.Remove(It.IsAny <ProductReceipt>()), Times.Once);
            mockContext.Verify(x => x.SaveChanges(), Times.Once);
        }
        public void Add_SuccessfullyAddsProducts_WhenDataIsCorrect()
        {
            // Arrange
            var products = new List <Product>()
            {
                new Product()
                {
                    Code          = "000001", CategoryId = 1, SupplierId = 1, Quantity = 1,
                    DeliveryPrice = 1, SellingPrice = 1, Name = "TestProduct", UnitId = 1
                }
            }.AsQueryable();

            var receiptDateTime = DateTime.Parse("2009/02/26 18:37:58");
            var receipts        = new List <Receipt>()
            {
                new Receipt()
                {
                    Id = 1, GrandTotal = 0, TimeOfPurchase = receiptDateTime
                },
            }.AsQueryable();

            var productReceipts = new List <ProductReceipt>().AsQueryable();

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

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

            var receiptMockDbSet = new Mock <DbSet <Receipt> >();

            receiptMockDbSet.As <IQueryable <Receipt> >().Setup(m => m.Provider).Returns(receipts.Provider);
            receiptMockDbSet.As <IQueryable <Receipt> >().Setup(m => m.Expression).Returns(receipts.Expression);
            receiptMockDbSet.As <IQueryable <Receipt> >().Setup(m => m.ElementType).Returns(receipts.ElementType);
            receiptMockDbSet.As <IQueryable <Receipt> >().Setup(m => m.GetEnumerator()).Returns(receipts.GetEnumerator());

            var productReceiptMockDbSet = new Mock <DbSet <ProductReceipt> >();

            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Provider).Returns(productReceipts.Provider);
            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Expression).Returns(productReceipts.Expression);
            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.ElementType).Returns(productReceipts.ElementType);
            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.GetEnumerator()).Returns(productReceipts.GetEnumerator());

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(m => m.Products).Returns(productMockDbSet.Object);
            mockContext.Setup(m => m.ProductsReceipts).Returns(productReceiptMockDbSet.Object);
            mockContext.Setup(m => m.Receipts).Returns(receiptMockDbSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act
            productReceiptBusiness.Add(1, "000001", "1", "0");

            // Assert
            productReceiptMockDbSet.Verify(m => m.Add(It.IsAny <ProductReceipt>()), Times.Once());
            mockContext.Verify(m => m.SaveChanges(), Times.Once());
        }
        // The following methods are responsible for updating information when it is changed.
        /// <summary>
        /// Updates the user control every time it is loaded.
        /// </summary>
        public void UpdateUserControl()
        {
            var eazyCartContext = new EazyCartContext();

            this.categoryBusiness       = new CategoryBusiness(eazyCartContext);
            this.productBusiness        = new ProductBusiness(eazyCartContext);
            this.productReceiptBusiness = new ProductReceiptBusiness(eazyCartContext);
            this.receiptBusiness        = new ReceiptBusiness(eazyCartContext);
            this.UpdateSelectProductTab();
            this.UpdateReceiptTab();
            this.UpdatePaidAmountAndChange(0);
            this.SetButtonAvailability();
            this.highestProductReceiptId = this.productReceiptBusiness.GetHighestId();
            this.currentProductReceiptId = this.highestProductReceiptId + 1;

            searchBoxTextBox.Focus();
        }
        public void GetHighestId_ReturnsBiggestId_WhenThereAreProductReceipts()
        {
            // Arrange
            var productReceipts = new List <ProductReceipt>
            {
                new ProductReceipt {
                    Id = 1, ReceiptId = 1, ProductCode = "000001", Quantity = 1, DiscountPercentage = 0
                },
                new ProductReceipt {
                    Id = 2, ReceiptId = 1, ProductCode = "000001", Quantity = 1, DiscountPercentage = 0
                },
                new ProductReceipt {
                    Id = 3, ReceiptId = 1, ProductCode = "000001", Quantity = 1, DiscountPercentage = 0
                },
                new ProductReceipt {
                    Id = 4, ReceiptId = 1, ProductCode = "000001", Quantity = 1, DiscountPercentage = 0
                },
                new ProductReceipt {
                    Id = 5, ReceiptId = 1, ProductCode = "000001", Quantity = 1, DiscountPercentage = 0
                }
            }.AsQueryable();

            var productReceiptMockSet = new Mock <DbSet <ProductReceipt> >();

            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Provider).Returns(productReceipts.Provider);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Expression).Returns(productReceipts.Expression);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.ElementType).Returns(productReceipts.ElementType);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.GetEnumerator()).Returns(productReceipts.GetEnumerator());

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(c => c.ProductsReceipts).Returns(productReceiptMockSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act
            int actualHighestId = productReceiptBusiness.GetHighestId();

            // Assert
            int expectedHighestId = 5;

            Assert.AreEqual(expectedHighestId, actualHighestId, "Highest Ids do not match");
        }
        public void GetAllByReceiptId_ReturnsCorrectCountOfItems()
        {
            var productReceipts = new List <ProductReceipt>
            {
                new ProductReceipt {
                    Id = 1, ReceiptId = 1, ProductCode = "000001", Quantity = 1, DiscountPercentage = 0
                },
                new ProductReceipt {
                    Id = 2, ReceiptId = 1, ProductCode = "000002", Quantity = 1, DiscountPercentage = 0
                },
                new ProductReceipt {
                    Id = 3, ReceiptId = 2, ProductCode = "000003", Quantity = 1, DiscountPercentage = 0
                },
                new ProductReceipt {
                    Id = 4, ReceiptId = 2, ProductCode = "000001", Quantity = 1, DiscountPercentage = 0
                },
                new ProductReceipt {
                    Id = 5, ReceiptId = 2, ProductCode = "000002", Quantity = 1, DiscountPercentage = 0
                }
            }.AsQueryable();

            var productReceiptMockSet = new Mock <DbSet <ProductReceipt> >();

            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Provider).Returns(productReceipts.Provider);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Expression).Returns(productReceipts.Expression);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.ElementType).Returns(productReceipts.ElementType);
            productReceiptMockSet.As <IQueryable <ProductReceipt> >().Setup(m => m.GetEnumerator()).Returns(productReceipts.GetEnumerator());

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(c => c.ProductsReceipts).Returns(productReceiptMockSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act
            int searchedReceiptId           = 1;
            var productsReceiptsWithGivenId = productReceiptBusiness.GetAllByReceiptId(searchedReceiptId);

            // Assert
            int expectedCount = 2;

            Assert.AreEqual(expectedCount, productsReceiptsWithGivenId.Count, "Count of productReceipts does not match.");
        }
        public void Update_ThrowsArgumentException_WhenAFloatingPointNumberIsEntered_WhenItShouldBeAWholeNumber()
        {
            // Arrange
            var products = new List <Product>()
            {
                new Product()
                {
                    Code          = "000001", CategoryId = 1, SupplierId = 1, Quantity = 2,
                    DeliveryPrice = 1, SellingPrice = 1, Name = "TestProduct", UnitId = 1
                }
            }.AsQueryable();

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

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

            var productReceiptMockDbSet = new Mock <DbSet <ProductReceipt> >();
            var mockContext             = new Mock <EazyCartContext>();

            mockContext.Setup(m => m.Products).Returns(productMockDbSet.Object);
            mockContext.Setup(m => m.ProductsReceipts).Returns(productReceiptMockDbSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act & Assert
            try
            {
                productReceiptBusiness.Update(1, "000001", "1.22", "0");
                Assert.Fail("No exception is thrown");
            }
            catch (ArgumentException exc)
            {
                var expectedMessage = "Quantity must be a whole number";
                Assert.AreEqual(expectedMessage, exc.Message, "Different exception was thrown");
            }
        }
        public void Update_ThrowsArgumentException_WhenRequiredQuantityIsMoreThanAvailableQuantity()
        {
            // Arrange
            var products = new List <Product>()
            {
                new Product()
                {
                    Code          = "000001", CategoryId = 1, SupplierId = 1, Quantity = 0,
                    DeliveryPrice = 1, SellingPrice = 1, Name = "TestProduct", UnitId = 1
                }
            }.AsQueryable();

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

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

            var productReceiptMockDbSet = new Mock <DbSet <ProductReceipt> >();
            var mockContext             = new Mock <EazyCartContext>();

            mockContext.Setup(m => m.Products).Returns(productMockDbSet.Object);
            mockContext.Setup(m => m.ProductsReceipts).Returns(productReceiptMockDbSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act & Assert
            try
            {
                productReceiptBusiness.Update(1, "000001", "1", "0");
                Assert.Fail("No exception is thrown");
            }
            catch (ArgumentException exc)
            {
                var expectedMessage = "Insufficient quantity";
                Assert.AreEqual(expectedMessage, exc.Message, "Different exception was thrown");
            }
        }
        public void Update_ThrowsArgumentException_WhenDiscountPercentageIsNegative()
        {
            // Arrange
            var productReceiptMockDbSet = new Mock <DbSet <ProductReceipt> >();

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(m => m.ProductsReceipts).Returns(productReceiptMockDbSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act & Assert
            try
            {
                productReceiptBusiness.Update(1, "000001", "1", "-1");
                Assert.Fail("No exception was thrown");
            }
            catch (ArgumentException exc)
            {
                string expectedMessage = "Discount must NOT be negative.";
                Assert.AreEqual(expectedMessage, exc.Message, "Different exception was thrown");
            }
        }
        public void Update_ThrowsArgumentException_WhenQuantityCannotBeParsed()
        {
            // Arrange
            var productReceiptMockDbSet = new Mock <DbSet <ProductReceipt> >();

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(m => m.ProductsReceipts).Returns(productReceiptMockDbSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act & Assert
            try
            {
                productReceiptBusiness.Update(1, "000001", "Quantity", "0");
                Assert.Fail("No exception was thrown");
            }
            catch (ArgumentException exc)
            {
                string expectedMessage = "Wrong values for quantity/discount";
                Assert.AreEqual(expectedMessage, exc.Message, "Different exception was thrown");
            }
        }
        public void Add_ThrowsArgumentException_WhenQuantityIsNotPositive()
        {
            // Arrange
            var productReceiptMockDbSet = new Mock <DbSet <ProductReceipt> >();

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(m => m.ProductsReceipts).Returns(productReceiptMockDbSet.Object);

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act & Assert
            try
            {
                productReceiptBusiness.Add(1, "000001", "-1", "0");
                Assert.Fail("No exception was thrown");
            }
            catch (ArgumentException exc)
            {
                string expectedMessage = "Quantity must be positive.";
                Assert.AreEqual(expectedMessage, exc.Message, "Different exception was thrown");
            }
        }
        public void Add_ThrowsArgumentException_WhenSuchProductReceiptAlreadyExists()
        {
            // Arrange
            var products = new List <Product>()
            {
                new Product()
                {
                    Code          = "000001", CategoryId = 1, SupplierId = 1, Quantity = 1,
                    DeliveryPrice = 1, SellingPrice = 1, Name = "TestProduct", UnitId = 1
                }
            }.AsQueryable();

            var receiptDateTime = DateTime.Parse("2009/02/26 18:37:58");
            var receipts        = new List <Receipt>()
            {
                new Receipt()
                {
                    Id = 1, GrandTotal = 0, TimeOfPurchase = receiptDateTime
                },
            }.AsQueryable();

            var productReceipts = new List <ProductReceipt>
            {
                new ProductReceipt {
                    Id = 1, ProductCode = "000001", Quantity = 1, DiscountPercentage = 0
                },
            }.AsQueryable();

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

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

            var receiptMockDbSet = new Mock <DbSet <Receipt> >();

            receiptMockDbSet.As <IQueryable <Receipt> >().Setup(m => m.Provider).Returns(receipts.Provider);
            receiptMockDbSet.As <IQueryable <Receipt> >().Setup(m => m.Expression).Returns(receipts.Expression);
            receiptMockDbSet.As <IQueryable <Receipt> >().Setup(m => m.ElementType).Returns(receipts.ElementType);
            receiptMockDbSet.As <IQueryable <Receipt> >().Setup(m => m.GetEnumerator()).Returns(receipts.GetEnumerator());

            var productReceiptMockDbSet = new Mock <DbSet <ProductReceipt> >();

            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Provider).Returns(productReceipts.Provider);
            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.Expression).Returns(productReceipts.Expression);
            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.ElementType).Returns(productReceipts.ElementType);
            productReceiptMockDbSet.As <IQueryable <ProductReceipt> >().Setup(m => m.GetEnumerator()).Returns(productReceipts.GetEnumerator());

            var mockContext = new Mock <EazyCartContext>();

            mockContext.Setup(m => m.Products).Returns(productMockDbSet.Object);
            mockContext.Setup(m => m.ProductsReceipts).Returns(productReceiptMockDbSet.Object);
            mockContext.Setup(m => m.Receipts).Returns(receiptMockDbSet.Object);
            mockContext.Setup(m => m.SaveChanges()).Throws(new ArgumentException());

            var productReceiptBusiness = new ProductReceiptBusiness(mockContext.Object);

            // Act & Assert
            try
            {
                productReceiptBusiness.Add(1, "000001", "1", "0");
                Assert.Fail("No exception was thrown");
            }
            catch (ArgumentException exc)
            {
                var expectedMessage = "Such productReceipt is already added.";
                Assert.AreEqual(expectedMessage, exc.Message, "Different exception is thrown.");
            }
        }