public void ThenGameDataIsPassedToGateway(string sessionID, string messageID, string cardID, int packVersion, int seed, string cardtoAdd, float probability)
            {
                GameDataGatewaySpy gameDataGatewaySpy = new GameDataGatewaySpy();

                Tuple <string, float>[] cardsToAdd      = { new Tuple <string, float>(cardtoAdd, probability) };
                SaveNewGameData         saveNewGameData =
                    new SaveNewGameData(gameDataGatewaySpy,
                                        new PublishEndPointDummy());

                saveNewGameData.Execute(
                    sessionID,
                    messageID,

                    new GameDataDummy()
                {
                    CurrentCardID = cardID,
                    Seed          = seed,
                    PackVersion   = packVersion,
                    CardsToAdd    = cardsToAdd
                }
                    );
                Assert.True(gameDataGatewaySpy.SaveSessionID == sessionID);
                Assert.True(gameDataGatewaySpy.SaveGameData.CurrentCardID == cardID);
                Assert.True(gameDataGatewaySpy.SaveGameData.Seed == seed);
                Assert.True(gameDataGatewaySpy.SaveGameData.PackVersion == packVersion);
                Assert.True(gameDataGatewaySpy.SaveGameData.CardsToAdd[0].Item1 == cardtoAdd);
                Assert.True(Math.Abs(gameDataGatewaySpy.SaveGameData.CardsToAdd[0].Item2 - probability) < 0.05f);
            }
                public void ThenThrowsInvalidSessionIDException(string sessionID)
                {
                    SaveNewGameData saveNewGameData =
                        new SaveNewGameData(new GameDataGatewayDummy(), new PublishEndPointDummy());

                    Assert.Throws <InvalidSessionIDException>(() => { saveNewGameData.Execute(sessionID, "MessageID", new GameDataDummy()); });
                }
            public void ThenGameResponseIsPublishedWithMessageIDAndSessionID(string sessionID, string messageID, string cardID, int packVersion, int seed, string cardtoAdd, float probability)
            {
                GameDataGatewaySpy gameDataGatewaySpy = new GameDataGatewaySpy();
                PublishEndPointSpy publishEndPointSpy = new PublishEndPointSpy();

                Tuple <string, float>[] cardsToAdd      = { new Tuple <string, float>(cardtoAdd, probability) };
                SaveNewGameData         saveNewGameData =
                    new SaveNewGameData(gameDataGatewaySpy,
                                        publishEndPointSpy);

                saveNewGameData.Execute(
                    sessionID,
                    messageID,
                    new GameDataDummy
                {
                    CurrentCardID = cardID,
                    Seed          = seed,
                    PackVersion   = packVersion,
                    CardsToAdd    = cardsToAdd
                }
                    );
                Assert.True(publishEndPointSpy.MessageObject is IGameResponse);
                IGameResponse gameResponse = (IGameResponse)publishEndPointSpy.MessageObject;

                Assert.True(gameResponse.SessionID == sessionID);
                Assert.True(gameResponse.MessageID == messageID);
            }
                public void ThenThrowsInvalidMessageIDException(string messageID)
                {
                    SaveNewGameData saveNewGameData =
                        new SaveNewGameData(new GameDataGatewayDummy(), new PublishEndPointDummy());

                    Assert.Throws <InvalidMessageIDException>(() => { saveNewGameData.Execute("SessionID", messageID, new GameDataDummy()
                        {
                            CurrentCardID = "CardID"
                        }); });
                }
            public void ThenGameResponseIsPublishedWithCorrectGameData(string sessionID, string messageID, string cardID, int packVersion, int seed, string cardtoAdd, float probability, string statKey, int statValue)
            {
                GameDataGatewaySpy gameDataGatewaySpy = new GameDataGatewaySpy();
                PublishEndPointSpy publishEndPointSpy = new PublishEndPointSpy();

                Tuple <string, float>[] cardsToAdd      = { new Tuple <string, float>(cardtoAdd, probability) };
                SaveNewGameData         saveNewGameData =
                    new SaveNewGameData(gameDataGatewaySpy,
                                        publishEndPointSpy);

                saveNewGameData.Execute(
                    sessionID,
                    messageID,
                    new GameDataDummy
                {
                    CurrentCardID = cardID,
                    Seed          = seed,
                    PackVersion   = packVersion,
                    CardsToAdd    = cardsToAdd,
                    CurrentStats  = new Dictionary <string, int> {
                        { statKey, statValue }
                    }
                }
                    );
                Assert.True(publishEndPointSpy.MessageObject is IGameResponse);
                IGameResponse gameResponse = (IGameResponse)publishEndPointSpy.MessageObject;

                Assert.True(gameResponse.Seed == seed);
                Assert.True(gameResponse.PackVersion == packVersion);
                Assert.True(gameResponse.CurrentCardID == cardID);
                Assert.True(gameResponse.CardsToAdd[0].Item1 == cardtoAdd);
                Assert.True(gameResponse.CardsToAdd[0].Item2 == probability);
                Assert.True(gameResponse.Seed == seed);
                Assert.True(gameResponse.CurrentStats.ContainsKey(statKey));
                Assert.True(gameResponse.CurrentStats[statKey] == statValue);
            }