public int AddScoreRecordToStorage (ScoreRecord record)
		{
			var stopWatch = Stopwatch.StartNew ();
			var id = m_dataStorage.AddScoreRecordToStorage(record);
			stopWatch.Stop ();
			m_logger.Info(string.Format ("{0} AddScoreRecordToStorage: Call took {1} Ms", m_dataStorage.GetType(), stopWatch.ElapsedMilliseconds));
			return(id);
		}
		public void AddScoreRecordToStorage_GivenGameNameAndSingleScoreRecord_RecordGetsAddedToCache()
		{
			var record = new ScoreRecord { PlayerName = "Player1", Score = 3000, GameName = "game1"};
			string gameName = "Game1";

			m_gameScoreBoardCache.AddScoreRecordToStorage(record);

			Assert.AreEqual(m_gameScoreBoardCache.GetAllScoresForGame(gameName).FirstOrDefault().PlayerName, record.PlayerName);
		}
		public void GetAllScoresForUsername_GivenValidUsername_ReturnsScoreForUsername()
		{
			var exampleRecord = new ScoreRecord { GameName = m_gameName, PlayerName = m_playerName, Score = 1000 };
			m_mysqlConnection.AddScoreRecordToStorage (exampleRecord); 

			var resultFromDb = m_mysqlConnection.GetAllScoresForUsername (m_playerName); 
			var playerRecord = resultFromDb.FirstOrDefault (); 

			Assert.IsTrue (resultFromDb.Count() > 0); 
			Assert.AreEqual (m_playerName, playerRecord.PlayerName);  
			Assert.AreEqual (1000, playerRecord.Score	); 
		}
		public int AddScoreRecordToStorage(ScoreRecord record)
        {
			List<ScoreRecord> gameScoreRecords;
			m_gameScoreBoardCache.TryGetValue (record.GameName.ToLower (), out gameScoreRecords); 
			if (gameScoreRecords == null) 
			{
				gameScoreRecords = new List<ScoreRecord> (); 	
			}
			gameScoreRecords.Add(record); 
      
			m_gameScoreBoardCache.AddOrUpdate(record.GameName, gameScoreRecords, (id, oldScoreList) => gameScoreRecords);
			return m_gameScoreBoardCache.Count(); 

        }
		public int AddScoreRecordToStorage (ScoreRecord record)
		{
			var sql = @"INSERT INTO GameScoreBoard(GameName,PlayerName,Score) VALUES (@GameName, @PlayerName, @Score);
			SELECT LAST_INSERT_ID();"; 

			using (var connection = m_connectionFactory.GetOpenConnection())
			{
				try
				{
					return connection.Query<int>(sql, record).FirstOrDefault(); 

				}
				catch(MySqlException e)
				{
					Console.WriteLine (e);
					return -1; 
				}
				finally
				{
					connection.Close();
				}
			}
		}
		public TestStringCipher ()
		{
			m_chiper = new StringCipher (); 
			m_scoreRecord = new ScoreRecord { PlayerName = "player1", GameName = "Game1", Score = 5000 }; 
		}
		public void AddScoreBoardData_GivenValidGameRecordObjectAsJson_ReturnsCorrectObjectFromStorage()
		{
			IDataStorage cache = new GameScoreBoardDataCache (); 
			TestDataProvider.ProvideTestData (cache); 
			var bootstrapper = new TestableLightInjectNancyBootstrapper (cache);
			var browser = new Browser(bootstrapper, defaults: to => to.Accept("application/json"));
			string expectedGameName = "game5";
			int expectedCount = 1;
			var scoreRecordObject = new ScoreRecord {
				GameName = expectedGameName,
				PlayerName = expectedCount.ToString(),
				Score = 5000
			};

			var post = browser.Post ("/api/v1/addScoreBoardData", with => {
				with.Header("Content-Type", "application/json");
				with.JsonBody (scoreRecordObject);
			});

			var response = browser.Get("/api/v1/gameScoreBoard", with =>
				{
					with.HttpRequest();
					with.Query("gameName", expectedGameName);
					with.Query("count", expectedCount.ToString());
				});
			var postRespons = JsonConvert.DeserializeObject<int> (post.Body.AsString ());
			var responseModels = JsonConvert.DeserializeObject<IEnumerable<ScoreRecord>> (response.Body.AsString());

			Assert.IsTrue (postRespons > -1); 
			Assert.IsTrue (responseModels.Count() == expectedCount);
			Assert.AreEqual (expectedGameName, responseModels.FirstOrDefault ().GameName);


		}
		public void AddScoreBoardData_GivenValidGameRecordObjectAsJson_ReturnsHttpCreated()
		{
			IDataStorage cache = new GameScoreBoardDataCache (); 
			TestDataProvider.ProvideTestData (cache); 
			var bootstrapper = new TestableLightInjectNancyBootstrapper (cache);
			var browser = new Browser(bootstrapper, defaults: to => to.Accept("application/json"));
			var scoreRecordObject = new ScoreRecord {
				GameName = "game5",
				PlayerName = "player5",
				Score = 5000
			};

			var response = browser.Post ("/api/v1/addScoreBoardData", with => {
				with.Header("Content-Type", "application/json");
				with.JsonBody (scoreRecordObject);
			});

			Assert.AreEqual (HttpStatusCode.Created, response.StatusCode);

		}
		public void AddScoreRecordToStorage_GivenValidScoreRecord_ReturnsIdFromDataStorage()
		{
			var exampleRecord = new ScoreRecord { GameName = m_gameName, PlayerName = m_playerName, Score = 1000 };

			Assert.IsTrue (m_mysqlConnection.AddScoreRecordToStorage (exampleRecord) > -1);
		}