public void SaveProduct_WithInvalidExistingProduct_Throws()
        {
            var handler            = Host.Resolve <Api.Handlers.ProductHandler>();
            var nonExistentProduct = new Models.Product {
                Id = int.MaxValue
            };

            Assert.Throws <ArgumentException>(() => handler.Save(nonExistentProduct));
        }
        public void SaveProduct_WithExistingProduct_Updates()
        {
            var handler = Host.Resolve <Api.Handlers.ProductHandler>();

            Models.Product result = null;

            Assert.DoesNotThrow(() => handler.Save(Product.EmptyProduct));
            Assert.DoesNotThrow(() => result = handler.Get(Product.EmptyProduct.Id));
            Assert.DoesNotThrow(
                () =>
                Product.EmptyProduct
                .ThrowIfInequivalentWithAttribute <Models.Product, EqualityCheckAttribute>(result));
        }
        public void SaveProduct_WithNewProduct_Creates()
        {
            var handler = Host.Resolve <Api.Handlers.ProductHandler>();

            Models.Product result     = null;
            var            newProduct = new Models.Product
            {
                Title       = "New product from test",
                Description = "New product from test description"
            };

            Assert.DoesNotThrow(() => newProduct = handler.Save(newProduct));
            Assert.GreaterOrEqual(newProduct.Id, 1);
            Assert.DoesNotThrow(() => result = handler.Get(newProduct.Id));
            Assert.DoesNotThrow(
                () =>
                newProduct.ThrowIfInequivalentWithAttribute <Models.Product, EqualityCheckAttribute>(
                    result));
        }