Example #1
0
        public IHttpActionResult CreateTrip(TripCreationDetails tripCreationDetails)
        {
            var validation = containerSpoilage.ValidateTripCreationDetails(tripCreationDetails);

            if (!validation.isValid)
            {
                return(BadRequest(validation.errorMessage));
            }
            var tripId = containerSpoilage.CreateTrip(tripCreationDetails);

            return(Created <Trip>($"/trips/{tripId}", null));
        }
        public void CreatesAndGetsContainers()
        {
            // Arrange
            var dalFacade = new DalFacade(connectionString);
            var container = new ContainerCreationDetails
            {
                Id           = Guid.NewGuid().ToString(),
                ProductCount = 10_000,
                Measurements = new []
                {
                    new TemperatureRecord {
                        Time = new DateTime(2018, 6, 26, 12, 0, 0), Value = 24.6m
                    },
                    new TemperatureRecord {
                        Time = new DateTime(2018, 6, 26, 12, 1, 1), Value = 26.2m
                    },
                    new TemperatureRecord {
                        Time = new DateTime(2018, 6, 26, 12, 3, 9), Value = 27.3m
                    },
                }
            };
            var tripCreationDetails = new TripCreationDetails
            {
                Name             = "NZ to GB",
                SpoilDuration    = 30,
                SpoilTemperature = 28.3m
            };

            // Act
            var tripId = dalFacade.AddTrip(tripCreationDetails);

            dalFacade.AddContainer(tripId, container);
            var containers = dalFacade.GetContainers(tripId);

            // Assert
            Assert.AreEqual(1, containers.Count());
            var retrievedContainer = containers.First();

            Assert.AreEqual(container.Id, retrievedContainer.Id);
            Assert.AreEqual(container.ProductCount, retrievedContainer.ProductCount);
            Assert.AreEqual(3, retrievedContainer.Measurements.Length);
            var measurements = retrievedContainer.Measurements;

            Assert.AreEqual(1, measurements.Count(x => x.Time == container.Measurements[0].Time && x.Value == container.Measurements[0].Value));
            Assert.AreEqual(1, measurements.Count(x => x.Time == container.Measurements[1].Time && x.Value == container.Measurements[1].Value));
            Assert.AreEqual(1, measurements.Count(x => x.Time == container.Measurements[2].Time && x.Value == container.Measurements[2].Value));
        }
    }
Example #3
0
        public void CreateTrip_ValidatesTripDetails()
        {
            // Arrange
            var tripCreationDetails = new TripCreationDetails();
            var containerSpoilage   = MockRepository.GenerateMock <IContainerSpoilage>();

            containerSpoilage.Stub(x => x.ValidateTripCreationDetails(tripCreationDetails))
            .Return((false, "error"));
            var controller = new ContainerSpoilageController(containerSpoilage);

            // Act
            var response = controller.CreateTrip(tripCreationDetails);

            // Assert
            Assert.AreEqual(typeof(BadRequestErrorMessageResult), response.GetType());
        }
Example #4
0
        public void CreatesTrip()
        {
            // Arrange
            var tripCreationDetails = new TripCreationDetails();
            var containerSpoilage   = MockRepository.GenerateMock <IContainerSpoilage>();

            containerSpoilage.Stub(x => x.ValidateTripCreationDetails(tripCreationDetails))
            .Return((true, ""));
            containerSpoilage.Stub(x => x.CreateTrip(tripCreationDetails)).Return(1234);
            var controller = new ContainerSpoilageController(containerSpoilage);

            // Act
            var response = controller.CreateTrip(tripCreationDetails);

            // Assert
            Assert.AreEqual(typeof(CreatedNegotiatedContentResult <Trip>), response.GetType());
        }
Example #5
0
        public void TripCreation_UnsetNameInvalid(string name, bool isValid)
        {
            // Arrange
            var tripCreationDetails = new TripCreationDetails
            {
                Name          = name,
                SpoilDuration = 30,
            };
            var containerSpoilage = new ContainerSpoilage(null);

            // Act
            var validation = containerSpoilage.ValidateTripCreationDetails(tripCreationDetails);

            // Assert
            Assert.AreEqual(isValid, validation.isValid);
            Assert.AreEqual(isValid, string.IsNullOrEmpty(validation.errorMessage));
        }
Example #6
0
        public void TripCreation_NegativeSpoilDurationInvalid(int spoilDuration, bool isValid)
        {
            // Arrange
            var tripCreationDetails = new TripCreationDetails
            {
                Name             = "NZ to GB",
                SpoilDuration    = spoilDuration,
                SpoilTemperature = 26.7m
            };
            var containerSpoilage = new ContainerSpoilage(null);

            // Act
            var validation = containerSpoilage.ValidateTripCreationDetails(tripCreationDetails);

            Assert.AreEqual(isValid, validation.isValid);
            Assert.AreEqual(isValid, string.IsNullOrEmpty(validation.errorMessage));
        }
        public long AddTrip(TripCreationDetails tripCreationDetails)
        {
            using (var connection = new SqlConnection(connectionString))
                using (var command = new SqlCommand("Add Trip", connection))
                {
                    connection.Open();
                    command.CommandType = CommandType.StoredProcedure;

                    command.Parameters.Add("@name", SqlDbType.NVarChar);
                    command.Parameters["@name"].Value = tripCreationDetails.Name;
                    command.Parameters.Add("@spoilTemperature", SqlDbType.Decimal);
                    command.Parameters["@spoilTemperature"].Value = tripCreationDetails.SpoilTemperature;
                    command.Parameters.Add("@spoilDurationInMinutes", SqlDbType.BigInt);
                    command.Parameters["@spoilDurationInMinutes"].Value = tripCreationDetails.SpoilDuration;

                    return((long)command.ExecuteScalar());
                }
        }
        public void CreatesAndGetsTripCreationDetails()
        {
            // Arrange
            var dalFacade           = new DalFacade(connectionString);
            var tripCreationDetails = new TripCreationDetails
            {
                Name             = "NZ to GB",
                SpoilDuration    = 30,
                SpoilTemperature = 28.3m
            };

            // Act
            var tripId    = dalFacade.AddTrip(tripCreationDetails);
            var tripFound = dalFacade.TryGetTripDetails(tripId, out var trip);

            // Assert
            Assert.AreEqual(true, tripFound);
            Assert.AreEqual(tripId, trip.Id);
            Assert.AreEqual(tripCreationDetails.SpoilDuration, trip.SpoilDuration);
            Assert.AreEqual(tripCreationDetails.SpoilTemperature, trip.SpoilTemperature);
        }
Example #9
0
        public virtual IActionResult CreateTrip([FromBody] TripCreationDetails tripCreationDetails)
        {
            var trip = _repo.Trips.FirstOrDefault(x => x.Name.Equals(tripCreationDetails.Name));

            if (trip != null)
            {
                return(StatusCode(400));
            }

            trip = new Models.Trip()
            {
                Name             = tripCreationDetails.Name,
                SpoilDuration    = tripCreationDetails.SpoilDuration,
                SpoilTemperature = tripCreationDetails.SpoilTemperature
            };

            _repo.Trips.Add(trip);
            _repo.SaveChanges();

            Response.Headers.Add("Location", new Microsoft.Extensions.Primitives.StringValues($"/trips/{trip.Id}"));
            return(StatusCode(201));
        }