mirror of
https://github.com/kierankihn/uno-game.git
synced 2025-12-27 02:13:18 +08:00
test(network): simplify and consolidate NetworkClientTest
- Removed redundant tests and merged similar cases in `NetworkClientTest`. - Updated `Connect` and `Send` tests to streamline functionality. - Enhanced `MessageSerializerTest` to validate `playerId` in `InitGamePayload`.
This commit is contained in:
@@ -195,7 +195,7 @@ TEST(MessageSerializerTest, SerializeInitGameMessage)
|
||||
handCard.draw(Card(CardColor::GREEN, CardType::NUM3));
|
||||
handCard.draw(Card(CardColor::YELLOW, CardType::REVERSE));
|
||||
|
||||
InitGamePayload payload{discardPile, handCard.getCards(), 2};
|
||||
InitGamePayload payload{1, discardPile, handCard.getCards(), 2};
|
||||
Message message(MessageStatus::OK, MessagePayloadType::INIT_GAME, payload);
|
||||
|
||||
std::string result = MessageSerializer::serialize(message);
|
||||
@@ -203,6 +203,7 @@ TEST(MessageSerializerTest, SerializeInitGameMessage)
|
||||
|
||||
EXPECT_EQ(json["status_code"], "OK");
|
||||
EXPECT_EQ(json["payload_type"], "INIT_GAME");
|
||||
EXPECT_EQ(json["payload"]["player_id"], 1);
|
||||
EXPECT_EQ(json["payload"]["current_player"], 2);
|
||||
EXPECT_TRUE(json["payload"]["discard_pile"].is_array());
|
||||
EXPECT_TRUE(json["payload"]["hand_card"].is_array());
|
||||
@@ -215,7 +216,7 @@ TEST(MessageSerializerTest, SerializeInitGameMessageWithEmptyPiles)
|
||||
DiscardPile discardPile;
|
||||
HandCard handCard;
|
||||
|
||||
InitGamePayload payload{discardPile, handCard.getCards(), 0};
|
||||
InitGamePayload payload{0, discardPile, handCard.getCards(), 0};
|
||||
Message message(MessageStatus::OK, MessagePayloadType::INIT_GAME, payload);
|
||||
|
||||
std::string result = MessageSerializer::serialize(message);
|
||||
@@ -223,6 +224,7 @@ TEST(MessageSerializerTest, SerializeInitGameMessageWithEmptyPiles)
|
||||
|
||||
EXPECT_EQ(json["status_code"], "OK");
|
||||
EXPECT_EQ(json["payload_type"], "INIT_GAME");
|
||||
EXPECT_EQ(json["payload"]["player_id"], 0);
|
||||
EXPECT_EQ(json["payload"]["current_player"], 0);
|
||||
EXPECT_TRUE(json["payload"]["discard_pile"].is_array());
|
||||
EXPECT_TRUE(json["payload"]["hand_card"].is_array());
|
||||
@@ -386,6 +388,7 @@ TEST(MessageSerializerTest, DeserializeInitGameMessage)
|
||||
"status_code":"OK",
|
||||
"payload_type":"INIT_GAME",
|
||||
"payload":{
|
||||
"player_id":42,
|
||||
"discard_pile":[{"card_color":"Red","card_type":"5"}],
|
||||
"hand_card":[{"card_color":"Blue","card_type":"Skip"}],
|
||||
"current_player":2
|
||||
@@ -397,6 +400,7 @@ TEST(MessageSerializerTest, DeserializeInitGameMessage)
|
||||
EXPECT_EQ(message.getMessageStatus(), MessageStatus::OK);
|
||||
EXPECT_EQ(message.getMessagePayloadType(), MessagePayloadType::INIT_GAME);
|
||||
auto payload = std::get<InitGamePayload>(message.getMessagePayload());
|
||||
EXPECT_EQ(payload.playerId, 42);
|
||||
EXPECT_EQ(payload.currentPlayerIndex, 2);
|
||||
}
|
||||
|
||||
@@ -862,105 +866,139 @@ TEST(MessageSerializerTest, DeserializeInitGameWithArrayPayload)
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithMissingPlayerId)
|
||||
{
|
||||
std::string json = R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithNullPlayerId)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":null,"discard_pile":[],"hand_card":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithStringPlayerId)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":"0","discard_pile":[],"hand_card":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithNegativePlayerId)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":-1,"discard_pile":[],"hand_card":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithFloatPlayerId)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":1.5,"discard_pile":[],"hand_card":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithMissingDiscardPile)
|
||||
{
|
||||
std::string json = R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"hand_card":[],"current_player":0}})";
|
||||
std::string json = R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"hand_card":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithMissingHandCard)
|
||||
{
|
||||
std::string json = R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"current_player":0}})";
|
||||
std::string json = R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithMissingCurrentPlayer)
|
||||
{
|
||||
std::string json = R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":[]}})";
|
||||
std::string json = R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[],"hand_card":[]}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithNullDiscardPile)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":null,"hand_card":[],"current_player":0}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":null,"hand_card":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithNullHandCard)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":null,"current_player":0}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[],"hand_card":null,"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithStringDiscardPile)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":"test","hand_card":[],"current_player":0}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":"test","hand_card":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithStringHandCard)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":"test","current_player":0}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[],"hand_card":"test","current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithStringCurrentPlayer)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":[],"current_player":"0"}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[],"hand_card":[],"current_player":"0"}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithNullCurrentPlayer)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":[],"current_player":null}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[],"hand_card":[],"current_player":null}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithNegativeCurrentPlayer)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":[],"current_player":-1}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[],"hand_card":[],"current_player":-1}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithFloatCurrentPlayer)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":[],"current_player":1.5}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[],"hand_card":[],"current_player":1.5}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithInvalidCardInDiscardPile)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[{"card_color":"Invalid","card_type":"5"}],"hand_card":[],"current_player":0}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[{"card_color":"Invalid","card_type":"5"}],"hand_card":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithInvalidCardInHandCard)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":[{"card_color":"Red","card_type":"Invalid"}],"current_player":0}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[],"hand_card":[{"card_color":"Red","card_type":"Invalid"}],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithNonObjectCardInDiscardPile)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":["string"],"hand_card":[],"current_player":0}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":["string"],"hand_card":[],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
TEST(MessageSerializerTest, DeserializeInitGameWithNonObjectCardInHandCard)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":[123],"current_player":0}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":0,"discard_pile":[],"hand_card":[123],"current_player":0}})";
|
||||
EXPECT_THROW(MessageSerializer::deserialize(json), std::invalid_argument);
|
||||
}
|
||||
|
||||
@@ -1021,9 +1059,10 @@ TEST(MessageSerializerTest, DeserializeLargeDrawCount)
|
||||
TEST(MessageSerializerTest, DeserializeLargeCurrentPlayer)
|
||||
{
|
||||
std::string json =
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"discard_pile":[],"hand_card":[],"current_player":4294967295}})";
|
||||
R"({"status_code":"OK","payload_type":"INIT_GAME","payload":{"player_id":7,"discard_pile":[],"hand_card":[],"current_player":4294967295}})";
|
||||
Message message = MessageSerializer::deserialize(json);
|
||||
auto payload = std::get<InitGamePayload>(message.getMessagePayload());
|
||||
EXPECT_EQ(payload.playerId, 7);
|
||||
EXPECT_EQ(payload.currentPlayerIndex, 4294967295);
|
||||
}
|
||||
|
||||
@@ -1114,6 +1153,7 @@ TEST(MessageSerializerTest, DeserializeHugeArray)
|
||||
nlohmann::json json;
|
||||
json["status_code"] = "OK";
|
||||
json["payload_type"] = "INIT_GAME";
|
||||
json["payload"]["player_id"] = 0;
|
||||
json["payload"]["discard_pile"] = nlohmann::json::array();
|
||||
for (int i = 0; i < 10000; ++i) {
|
||||
json["payload"]["discard_pile"].push_back({{"card_color", "Red"}, {"card_type", "5"}});
|
||||
@@ -1161,4 +1201,3 @@ TEST(MessageSerializerTest, DeserializePathTraversalAttempt)
|
||||
auto payload = std::get<JoinGamePayload>(message.getMessagePayload());
|
||||
EXPECT_EQ(payload.playerName, "../../etc/passwd");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user