#include #include #include #include "Event.h" #include "RoomEvent.h" #include "StateEvent.h" #include "AliasesEventContent.h" #include "AvatarEventContent.h" #include "CanonicalAliasEventContent.h" #include "CreateEventContent.h" #include "HistoryVisibilityEventContent.h" #include "JoinRulesEventContent.h" #include "MemberEventContent.h" #include "NameEventContent.h" #include "PowerLevelsEventContent.h" #include "TopicEventContent.h" using namespace matrix::events; TEST(EventCollection, Deserialize) { auto events = QJsonArray{ QJsonObject{ {"content", QJsonObject{{"name", "Name"}}}, {"event_id", "$asdfafdf8af:matrix.org"}, {"prev_content", QJsonObject{{"name", "Previous Name"}}}, {"room_id", "!aasdfaeae23r9:matrix.org"}, {"sender", "@alice:matrix.org"}, {"origin_server_ts", 1323238293289323LL}, {"state_key", ""}, {"type", "m.room.name"}}, QJsonObject{ {"content", QJsonObject{{"topic", "Topic"}}}, {"event_id", "$asdfafdf8af:matrix.org"}, {"prev_content", QJsonObject{{"topic", "Previous Topic"}}}, {"room_id", "!aasdfaeae23r9:matrix.org"}, {"state_key", ""}, {"sender", "@alice:matrix.org"}, {"origin_server_ts", 1323238293289323LL}, {"type", "m.room.topic"}}, }; for (const auto &event : events) { EventType ty = extractEventType(event.toObject()); if (ty == EventType::RoomName) { StateEvent name_event; name_event.deserialize(event); EXPECT_EQ(name_event.content().name(), "Name"); EXPECT_EQ(name_event.previousContent().name(), "Previous Name"); } else if (ty == EventType::RoomTopic) { StateEvent topic_event; topic_event.deserialize(event); EXPECT_EQ(topic_event.content().topic(), "Topic"); EXPECT_EQ(topic_event.previousContent().topic(), "Previous Topic"); } else { ASSERT_EQ(false, true); } } } TEST(EventCollection, DeserializationException) { // Using wrong event types. auto events = QJsonArray{ QJsonObject{ {"content", QJsonObject{{"name", "Name"}}}, {"event_id", "$asdfafdf8af:matrix.org"}, {"prev_content", QJsonObject{{"name", "Previous Name"}}}, {"room_id", "!aasdfaeae23r9:matrix.org"}, {"sender", "@alice:matrix.org"}, {"origin_server_ts", 1323238293289323LL}, {"state_key", ""}, {"type", "m.room.topic"}}, QJsonObject{ {"content", QJsonObject{{"topic", "Topic"}}}, {"event_id", "$asdfafdf8af:matrix.org"}, {"prev_content", QJsonObject{{"topic", "Previous Topic"}}}, {"room_id", "!aasdfaeae23r9:matrix.org"}, {"state_key", ""}, {"sender", "@alice:matrix.org"}, {"origin_server_ts", 1323238293289323LL}, {"type", "m.room.name"}}, }; for (const auto &event : events) { EventType ty = extractEventType(event.toObject()); if (ty == EventType::RoomName) { StateEvent name_event; try { name_event.deserialize(event); } catch (const DeserializationException &e) { ASSERT_STREQ("name key is missing", e.what()); } } else if (ty == EventType::RoomTopic) { StateEvent topic_event; try { topic_event.deserialize(event); } catch (const DeserializationException &e) { ASSERT_STREQ("topic key is missing", e.what()); } } else { ASSERT_EQ(false, true); } } }