private bool TryReadTrip(IDataReader reader, out TripWithSpoilDetails trip) { trip = null; while (reader.Read()) { trip = new TripWithSpoilDetails(); trip.SpoilDuration = (int)reader["Spoil Duration in Minutes"]; trip.SpoilTemperature = (decimal)reader["Spoil Temperature"]; trip.Id = (long)reader["Id"]; return(true); } return(false); }
public bool TryGetTripDetails(long tripId, out TripWithSpoilDetails trip) { using (var connection = new SqlConnection(connectionString)) using (var command = new SqlCommand("Get Trip", connection)) { connection.Open(); command.CommandType = CommandType.StoredProcedure; command.Parameters.Add("@id", SqlDbType.BigInt); command.Parameters["@id"].Value = tripId; var reader = command.ExecuteReader(); var found = TryReadTrip(reader, out trip); return(found); } }
public void GetsTrip() { // Arrange var tripId = 123456L; var dalfacade = MockRepository.GenerateMock <IDalFacade>(); var tripDetails = new TripWithSpoilDetails { Id = tripId, SpoilDuration = 3, SpoilTemperature = 27m }; var container1 = new ContainerCreationDetails { ProductCount = 1035, 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 container2 = new ContainerCreationDetails { ProductCount = 1039, Measurements = new[] { new TemperatureRecord { Time = new DateTime(2018, 6, 26, 12, 30, 2), Value = 29.6m }, new TemperatureRecord { Time = new DateTime(2018, 6, 26, 12, 35, 7), Value = 26.2m }, new TemperatureRecord { Time = new DateTime(2018, 6, 26, 12, 36, 5), Value = 22.3m }, } }; dalfacade.Stub(x => x.TryGetTripDetails(tripId, out _)) .OutRef(tripDetails) .Return(true); dalfacade.Stub(x => x.GetContainers(tripId)).Return(new[] { container1, container2 }); var containerSpoilage = new ContainerSpoilage(dalfacade); // Act var trip = containerSpoilage.GetTrip(tripId.ToString()); // Assert Assert.AreEqual(tripId, trip.Id); Assert.AreEqual(2, trip.ContainerCount); Assert.AreEqual(29.60m, trip.MaxTemperature); var roundedMeanTemperature = decimal.Round(GetMeanTemperature(container1, container2), 2); Assert.AreEqual(roundedMeanTemperature, trip.MeanTemperature); Assert.AreEqual(1, trip.SpoiledContainerCount); Assert.AreEqual(1039, trip.SpoiledProductCount); }