public void PartialDataNotSpoiledNegative() { var now = DateTime.UtcNow; var data = new List <TemperatureRecord>() { new TemperatureRecord(now, 1), new TemperatureRecord(now.AddSeconds(2), -1), new TemperatureRecord(now.AddSeconds(3), -1), new TemperatureRecord(now.AddSeconds(4), -2), new TemperatureRecord(now.AddSeconds(5), -1), new TemperatureRecord(now.AddSeconds(7), -2), new TemperatureRecord(now.AddSeconds(9), -1), }; var isSpoiled = SpoilageHelpers.IsSpoiled(data, -2.5, 5); Assert.False(isSpoiled); }
public void PartialDataSpoiledPositive() { var now = DateTime.UtcNow; var data = new List <TemperatureRecord>() { new TemperatureRecord(now, 1), new TemperatureRecord(now.AddSeconds(1), 1), new TemperatureRecord(now.AddSeconds(2), 1), new TemperatureRecord(now.AddSeconds(3), 5), new TemperatureRecord(now.AddSeconds(7), 5), new TemperatureRecord(now.AddSeconds(8), 1), new TemperatureRecord(now.AddSeconds(9), 1), }; var isSpoiled = SpoilageHelpers.IsSpoiled(data, 5, 5); Assert.True(isSpoiled); }
public virtual IActionResult CreateContainer([FromRoute][Required] string tripId, [FromBody] ContainerCreationDetails containerCreationDetails) { var trip = GetTripById(tripId); if (trip == null) { return(StatusCode(404)); } // Has the container already been created? var container = _repo.Containers.FirstOrDefault(x => x.ContainerId.Equals(containerCreationDetails.Id)); if (container != null) { return(StatusCode(400)); } // No, then let's create it var model = new Models.Container() { ContainerId = containerCreationDetails.Id, TripId = trip.Id, ProductCount = containerCreationDetails.ProductCount, // Use projection to convert from view model to DTO // Note. We don't need to populate ContainerID as EF will take care of referential integrity for us Temperatures = containerCreationDetails.Measurements.Select(tr => new Models.TemperatureRecord() { Time = tr.Time, Value = tr.Value, TripId = trip.Id }).ToList() }; model.IsSpoiled = SpoilageHelpers.IsSpoiled(model.Temperatures, trip.SpoilTemperature, trip.SpoilDuration); model.MaxTemperature = model.Temperatures.Max(x => x.Value); trip.Updated = DateTime.UtcNow; _repo.Containers.Add(model); _repo.SaveChanges(); return(StatusCode(201)); }
public void ConsecutiveDataNotSpoiledPositive() { var now = DateTime.UtcNow; var data = new List <TemperatureRecord>() { new TemperatureRecord(now, 1), new TemperatureRecord(now.AddSeconds(1), 1), new TemperatureRecord(now.AddSeconds(2), 1), new TemperatureRecord(now.AddSeconds(3), 1), new TemperatureRecord(now.AddSeconds(4), 1), new TemperatureRecord(now.AddSeconds(5), 1), new TemperatureRecord(now.AddSeconds(6), 1), new TemperatureRecord(now.AddSeconds(7), 1), new TemperatureRecord(now.AddSeconds(8), 1), new TemperatureRecord(now.AddSeconds(9), 1), }; var isSpoiled = SpoilageHelpers.IsSpoiled(data, 5, 5); Assert.False(isSpoiled); }
public void OutOfOrderNotSpoiledNegative() { var now = DateTime.UtcNow; var data = new List <TemperatureRecord>() { new TemperatureRecord(now.AddSeconds(2), -1), new TemperatureRecord(now.AddSeconds(7), -3), new TemperatureRecord(now.AddSeconds(8), -1), new TemperatureRecord(now.AddSeconds(3), 1), new TemperatureRecord(now.AddSeconds(4), 4), new TemperatureRecord(now.AddSeconds(1), 16), new TemperatureRecord(now.AddSeconds(5), 10), new TemperatureRecord(now.AddSeconds(6), -1), new TemperatureRecord(now.AddSeconds(9), -1), new TemperatureRecord(now, 1), }; var isSpoiled = SpoilageHelpers.IsSpoiled(data, -5, 5); Assert.False(isSpoiled); }