public async Task<IHttpActionResult> PostCustomer(Customer customer)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            db.Customers.Add(customer);

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (CustomerExists(customer.CustomerID))
                {
                    return Conflict();
                }
                else
                {
                    throw;
                }
            }

            return CreatedAtRoute("DefaultApi", new { id = customer.CustomerID }, customer);
        }
        // PUT api/Customers/5
        public async Task<IHttpActionResult> PutCustomer(string id, Customer customer)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != customer.CustomerID)
            {
                return BadRequest();
            }

            db.Entry(customer).State = EntityState.Modified;

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!CustomerExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return StatusCode(HttpStatusCode.NoContent);
        }
        public async Task ShouldNotAllowUpdatingACustomerAsAnother()
        {
            // Arrange
            var repo = new DummyCustomerRepository();
            var controller = new TestableController(repo);
            var customer = new Customer {CustomerID = "1"};

            // Act
            var result = await controller.PutCustomer("2", customer);

            // Assert
            Assert.IsInstanceOfType(result, typeof (BadRequestResult));
        }
        public async Task<IHttpActionResult> PostCustomer(Customer customer)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            _repo.Add(customer);

            await _repo.SaveChangesAsync();

            return CreatedAtRoute("DefaultApi", new { id = customer.CustomerID }, customer);
        }
        public async Task ShouldAllowUpdatingACustomer()
        {
            // Arrange
            var repo = new DummyCustomerRepository();
            var controller = new TestableController(repo);
            var customer = new Customer {CustomerID = "1"};

            // Act
            var result = await controller.PutCustomer("1", customer) as StatusCodeResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(HttpStatusCode.NoContent, result.StatusCode);
        }
        // PUT api/Customers/5
        public async Task<IHttpActionResult> PutCustomer(string id, Customer customer)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != customer.CustomerID)
            {
                return BadRequest();
            }

            _repo.Update(customer);

            await _repo.SaveChangesAsync();

            return StatusCode(HttpStatusCode.NoContent);
        }
        public async Task ShouldAcceptPostingANewCustomer()
        {
            // Arrange
            var repo = new DummyCustomerRepository();
            var controller = new TestableController(repo);
            var newCustomer = new Customer
            {
                CompanyName = "The new Company"
            };

            // Act  
            var result = await controller.PostCustomer(newCustomer) as CreatedAtRouteNegotiatedContentResult<Customer>;

            // Assert
            Assert.IsNotNull(result);
            var addedCustomer = result.Content;
            Assert.AreEqual("DefaultApi", result.RouteName);
            Assert.AreEqual(addedCustomer.CustomerID, result.RouteValues["Id"]);

            Assert.IsNotNull(addedCustomer.CustomerID);
            Assert.IsNotNull(addedCustomer.CompanyName);
            Assert.IsNull(addedCustomer.ContactName);
        }
 public void Update(Customer customer)
 {
 }
 public Customer Add(Customer customer)
 {
     customer.CustomerID = Environment.TickCount.ToString();
     _data.Add(customer);
     return customer;
 }
 public void Update(Customer customer)
 {
     db.Entry(customer).State = EntityState.Modified;
 }