public void WriteAsyncWhenResultIsValidShouldWriteToDatabase()
        {
            var factory = DatabaseHelper.GetMockConnectionFactory();

            using (var connection = factory.CreateConnectionAsync().Result)
            {
                DatabaseHelper.CreateTablesIfNotExist();
                var deviceId = AddDummyDevviceToInMemoryDatabase();

                var result = new ConveyorSimulator.SimulationResult
                {
                    Id       = deviceId,
                    Speed    = 213,
                    DateTime = DateTime.UtcNow,
                    PackageTrackingAlarmState = PackageTrackingAlarmState.Okay,
                    CurrentRecipeCount        = 2,
                    CurrentBoards             = 3
                };

                var writer = new DatabaseWriter(factory, Mock.Of <ILogger>());

                writer.WriteAsync(result).Wait();

                var results = connection.Query("SELECT * FROM DeviceReadings");

                Assert.AreEqual(1, results.Count());
            }
        }
        public async Task WriteAsync(ConveyorSimulator.SimulationResult result)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            using (var connection = await _connectionFactory.CreateConnectionAsync())
            {
                var sql = "INSERT INTO DeviceReadings (DeviceId, DateTime, Speed," +
                          " PackageTrackingAlarmState, CurrentBoards, CurrentRecipeCount)" +
                          $" VALUES(@{nameof(ConveyorSimulator.SimulationResult.Id)}, @{nameof(ConveyorSimulator.SimulationResult.DateTime)}," +
                          $" @{nameof(ConveyorSimulator.SimulationResult.Speed)}, @{nameof(ConveyorSimulator.SimulationResult.PackageTrackingAlarmState)}," +
                          $" @{nameof(ConveyorSimulator.SimulationResult.CurrentBoards)}, @{nameof(ConveyorSimulator.SimulationResult.CurrentRecipeCount)})";

                await connection.ExecuteAsync(sql, result);

                _logger.Information($"A deviceReading with ID '{result.Id}' added.");
            }
        }