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);
        }
Beispiel #3
0
        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);
        }