public void ItSavesNewCar()
        {
            // Arrange
            var newCar = new Car
                         {
                                 Name = "Hakosuka",
                                 Make = "Nissan",
                                 Model = "Skyline GTR",
                                 Year = 1996
                         };

            var service = new Mock<ICarService>();
            service.Setup( m => m.Create( It.IsAny<Data.Models.Car>() ) )
                    .ReturnsAsync( TestHelpers.Fixture.Create<Data.Models.Car>() );

            // Bind our mock with Ninject
            var kernel = new StandardKernel();
            kernel.Bind<ICarService>().ToConstant( service.Object );
            var container = new ExampleContainer( new Uri( BaseAddress ) );

            using ( WebApp.Start( BaseAddress, app => TestHelpers.ConfigureWebApi( app, kernel ) ) )
            {
                // Act 
                container.AddToCars( newCar );
                ChangeOperationResponse response = container.SaveChanges().Cast<ChangeOperationResponse>().First();
                var entityDescriptor = (EntityDescriptor) response.Descriptor;
                var actual =
                        (Car) entityDescriptor.Entity;

                // Assert 
                Assert.AreEqual( (int) HttpStatusCode.Created, response.StatusCode );
                service.Verify( m => m.Create( It.IsAny<Data.Models.Car>() ), Times.Once );
                Assert.IsNotNull( actual );
            }
        }
        public void IfNewCarHasZeroIdItReturnsBadRequest()
        {
            // Arrange
            var errorCar = TestHelpers.Fixture.Create <Data.Models.Car>();

            errorCar.Id = 0;
            var service = new Mock <ICarService>();

            service.Setup(m => m.Create(It.IsAny <Data.Models.Car>()))
            .ReturnsAsync(errorCar);

            // Bind our mock with Ninject
            var kernel = new StandardKernel();

            kernel.Bind <ICarService>().ToConstant(service.Object);
            var container = new ExampleContainer(new Uri(BaseAddress));

            using (WebApp.Start(BaseAddress, app => TestHelpers.ConfigureWebApi(app, kernel)))
            {
                // Act
                try
                {
                    container.AddToCars(new Car
                    {
                        Name  = "Hakosuka",
                        Make  = "Nissan",
                        Model = "Skyline GTR",
                        Year  = 1996
                    });
                    container.SaveChanges();
                }
                catch (DataServiceRequestException exception)
                {
                    var inner = exception.InnerException as DataServiceClientException;
                    Assert.IsNotNull(inner);
                    Assert.AreEqual((int)HttpStatusCode.BadRequest, inner.StatusCode);
                    return;
                }
                // Assert
                Assert.Fail("Exception not caught.");
            }
        }
        public void ItSavesNewCar()
        {
            // Arrange
            var newCar = new Car
            {
                Name  = "Hakosuka",
                Make  = "Nissan",
                Model = "Skyline GTR",
                Year  = 1996
            };

            var service = new Mock <ICarService>();

            service.Setup(m => m.Create(It.IsAny <Data.Models.Car>()))
            .ReturnsAsync(TestHelpers.Fixture.Create <Data.Models.Car>());

            // Bind our mock with Ninject
            var kernel = new StandardKernel();

            kernel.Bind <ICarService>().ToConstant(service.Object);
            var container = new ExampleContainer(new Uri(BaseAddress));

            using (WebApp.Start(BaseAddress, app => TestHelpers.ConfigureWebApi(app, kernel)))
            {
                // Act
                container.AddToCars(newCar);
                ChangeOperationResponse response = container.SaveChanges().Cast <ChangeOperationResponse>().First();
                var entityDescriptor             = (EntityDescriptor)response.Descriptor;
                var actual =
                    (Car)entityDescriptor.Entity;

                // Assert
                Assert.AreEqual((int)HttpStatusCode.Created, response.StatusCode);
                service.Verify(m => m.Create(It.IsAny <Data.Models.Car>()), Times.Once);
                Assert.IsNotNull(actual);
            }
        }
        public void IfMissingRequiredFieldsItReturnsBadRequest()
        {
            // Arrange
            var badCar = new Car
                         {
                                 Name = "Empty"
                         };

            var service = new Mock<ICarService>();
            service.Setup( m => m.Create( It.IsAny<Data.Models.Car>() ) )
                    .ReturnsAsync( TestHelpers.Fixture.Create<Data.Models.Car>() );

            // Bind our mock with Ninject
            var kernel = new StandardKernel();
            kernel.Bind<ICarService>().ToConstant( service.Object );
            var container = new ExampleContainer( new Uri( BaseAddress ) );

            using ( WebApp.Start( BaseAddress, app => TestHelpers.ConfigureWebApi( app, kernel ) ) )
            {
                // Act
                try
                {
                    container.AddToCars( badCar );
                    container.SaveChanges();
                }
                catch ( DataServiceRequestException exception )
                {
                    var inner = exception.InnerException as DataServiceClientException;
                    Assert.IsNotNull( inner );
                    Assert.AreEqual( (int) HttpStatusCode.BadRequest, inner.StatusCode );
                    return;
                }
                // Assert
                Assert.Fail( "Exception not caught." );
            }
        }