public void Delete_Product_ShouldRemoveProduct()
        {
            //arrange
            SqlProductRepository productRepository = new SqlProductRepository(connectionString);
            //act
            bool deleted = productRepository.Delete("p1");

            //assert
            Assert.True(deleted);
            Assert.DoesNotContain(productRepository.SelectAll(), p => p.Id == "p1");
            Assert.Equal(8, productRepository.SelectAll().Count);
        }
        public void Update_Product_ShouldUpdateProduct()
        {
            //arrange
            SqlProductRepository productRepository = new SqlProductRepository(connectionString);
            Product product = productRepository.SelectAll().First(p => p.Id == "p1");

            product.CostPrice = 1.6;
            //act
            bool updated = productRepository.Update(product);

            //assert
            Assert.True(updated);
            Assert.Equal(1.6, productRepository.SelectAll().First(p => p.Id == "p1").CostPrice);
        }
        public void SelectAll_Should_Return_All_Products()
        {
            SqlProductRepository  productRepository = new SqlProductRepository(connectionString);
            ICollection <Product> products          = productRepository.SelectAll();

            Assert.Equal(9, products.Count);
        }
        public void Create_Product_ShouldAddProduct()
        {
            //arrange
            SqlProductRepository productRepository = new SqlProductRepository(connectionString);
            Product product = new Product("p11", "Hammer", 2.20);
            //act
            bool created = productRepository.Create(product);

            //assert
            Assert.True(created);
            Assert.Contains(product, productRepository.SelectAll());
        }
        public void Update_ContrivedOptimisticConcurrencyConflict()
        {
            //arrange
            SqlProductRepository productRepository = new SqlProductRepository(connectionString);
            Product product1 = productRepository.SelectAll().First(p => p.Id == "p1");
            Product product2 = productRepository.SelectAll().First(p => p.Id == "p1");

            product1.RetailPrice = 1.50;
            product2.RetailPrice = 1.55;

            //act

            //modifying a row will update the RowVersion column value
            bool updatedProduct1 = productRepository.Update(product1);

            //product1 RowVersion property and database RowVersion
            //column values are now unequal, so the update will fail
            bool updatedProduct2 = productRepository.Update(product2);

            //assert
            Assert.True(updatedProduct1);
            Assert.False(updatedProduct2);
        }