File indexing completed on 2024-04-28 04:59:30
0001 // SPDX-FileCopyrightText: 2023 James Graham <james.h.graham@protonmail.com> 0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0003 0004 #include <QObject> 0005 #include <QTest> 0006 0007 #include "eventhandler.h" 0008 0009 #include <KFormat> 0010 0011 #include <Quotient/connection.h> 0012 #include <Quotient/quotient_common.h> 0013 #include <Quotient/syncdata.h> 0014 0015 #include "enums/delegatetype.h" 0016 #include "linkpreviewer.h" 0017 #include "models/reactionmodel.h" 0018 #include "neochatroom.h" 0019 #include "utils.h" 0020 0021 #include "testutils.h" 0022 0023 using namespace Quotient; 0024 0025 class EventHandlerTest : public QObject 0026 { 0027 Q_OBJECT 0028 0029 private: 0030 Connection *connection = nullptr; 0031 TestUtils::TestRoom *room = nullptr; 0032 0033 EventHandler emptyHandler = EventHandler(nullptr, nullptr); 0034 0035 private Q_SLOTS: 0036 void initTestCase(); 0037 0038 void eventId(); 0039 void nullEventId(); 0040 void delegateType_data(); 0041 void delegateType(); 0042 void nullDelegateType(); 0043 void author(); 0044 void nullAuthor(); 0045 void authorDisplayName(); 0046 void nullAuthorDisplayName(); 0047 void singleLineSidplayName(); 0048 void nullSingleLineDisplayName(); 0049 void time(); 0050 void nullTime(); 0051 void timeString(); 0052 void nullTimeString(); 0053 void highlighted(); 0054 void nullHighlighted(); 0055 void hidden(); 0056 void nullHidden(); 0057 void body(); 0058 void nullBody(); 0059 void genericBody_data(); 0060 void genericBody(); 0061 void nullGenericBody(); 0062 void subtitle(); 0063 void nullSubtitle(); 0064 void mediaInfo(); 0065 void nullMediaInfo(); 0066 void hasReply(); 0067 void nullHasReply(); 0068 void replyId(); 0069 void nullReplyId(); 0070 void replyDelegateType(); 0071 void nullReplyDelegateType(); 0072 void replyAuthor(); 0073 void nullReplyAuthor(); 0074 void replyBody(); 0075 void nullReplyBody(); 0076 void replyMediaInfo(); 0077 void nullReplyMediaInfo(); 0078 void thread(); 0079 void nullThread(); 0080 void location(); 0081 void nullLocation(); 0082 void readMarkers(); 0083 void nullReadMarkers(); 0084 }; 0085 0086 void EventHandlerTest::initTestCase() 0087 { 0088 connection = Connection::makeMockConnection(QStringLiteral("@bob:kde.org")); 0089 room = new TestUtils::TestRoom(connection, QStringLiteral("#myroom:kde.org"), QLatin1String("test-eventhandler-sync.json")); 0090 } 0091 0092 void EventHandlerTest::eventId() 0093 { 0094 EventHandler eventHandler(room, room->messageEvents().at(0).get()); 0095 QCOMPARE(eventHandler.getId(), QStringLiteral("$153456789:example.org")); 0096 } 0097 0098 void EventHandlerTest::nullEventId() 0099 { 0100 EventHandler noEventHandler(room, nullptr); 0101 QTest::ignoreMessage(QtWarningMsg, "getId called with m_event set to nullptr."); 0102 QCOMPARE(noEventHandler.getId(), QString()); 0103 } 0104 0105 void EventHandlerTest::delegateType_data() 0106 { 0107 QTest::addColumn<int>("eventNum"); 0108 QTest::addColumn<DelegateType::Type>("delegateType"); 0109 0110 QTest::newRow("message") << 0 << DelegateType::Message; 0111 QTest::newRow("state") << 1 << DelegateType::State; 0112 QTest::newRow("message 2") << 2 << DelegateType::Message; 0113 QTest::newRow("reaction") << 3 << DelegateType::Other; 0114 QTest::newRow("video") << 4 << DelegateType::Video; 0115 QTest::newRow("location") << 7 << DelegateType::Location; 0116 } 0117 0118 void EventHandlerTest::delegateType() 0119 { 0120 QFETCH(int, eventNum); 0121 QFETCH(DelegateType::Type, delegateType); 0122 0123 EventHandler eventHandler(room, room->messageEvents().at(eventNum).get()); 0124 QCOMPARE(eventHandler.getDelegateType(), delegateType); 0125 } 0126 0127 void EventHandlerTest::nullDelegateType() 0128 { 0129 EventHandler noEventHandler(room, nullptr); 0130 QTest::ignoreMessage(QtWarningMsg, "getDelegateType called with m_event set to nullptr."); 0131 QCOMPARE(noEventHandler.getDelegateType(), DelegateType::Other); 0132 } 0133 0134 void EventHandlerTest::author() 0135 { 0136 auto event = room->messageEvents().at(0).get(); 0137 auto author = room->user(event->senderId()); 0138 EventHandler eventHandler(room, event); 0139 0140 auto eventHandlerAuthor = eventHandler.getAuthor(); 0141 0142 QCOMPARE(eventHandlerAuthor["isLocalUser"_ls], author->id() == room->localUser()->id()); 0143 QCOMPARE(eventHandlerAuthor["id"_ls], author->id()); 0144 QCOMPARE(eventHandlerAuthor["displayName"_ls], author->displayname(room)); 0145 QCOMPARE(eventHandlerAuthor["avatarSource"_ls], room->avatarForMember(author)); 0146 QCOMPARE(eventHandlerAuthor["avatarMediaId"_ls], author->avatarMediaId(room)); 0147 QCOMPARE(eventHandlerAuthor["color"_ls], Utils::getUserColor(author->hueF())); 0148 QCOMPARE(eventHandlerAuthor["object"_ls], QVariant::fromValue(author)); 0149 } 0150 0151 void EventHandlerTest::nullAuthor() 0152 { 0153 QTest::ignoreMessage(QtWarningMsg, "getAuthor called with m_room set to nullptr."); 0154 QCOMPARE(emptyHandler.getAuthor(), QVariantMap()); 0155 0156 EventHandler noEventHandler(room, nullptr); 0157 QTest::ignoreMessage(QtWarningMsg, "getAuthor called with m_event set to nullptr. Returning empty user."); 0158 QCOMPARE(noEventHandler.getAuthor(), room->getUser(nullptr)); 0159 } 0160 0161 void EventHandlerTest::authorDisplayName() 0162 { 0163 EventHandler eventHandler(room, room->messageEvents().at(1).get()); 0164 QCOMPARE(eventHandler.getAuthorDisplayName(), QStringLiteral("before")); 0165 } 0166 0167 void EventHandlerTest::nullAuthorDisplayName() 0168 { 0169 QTest::ignoreMessage(QtWarningMsg, "getAuthorDisplayName called with m_room set to nullptr."); 0170 QCOMPARE(emptyHandler.getAuthorDisplayName(), QString()); 0171 0172 EventHandler noEventHandler(room, nullptr); 0173 QTest::ignoreMessage(QtWarningMsg, "getAuthorDisplayName called with m_event set to nullptr."); 0174 QCOMPARE(noEventHandler.getAuthorDisplayName(), QString()); 0175 } 0176 0177 void EventHandlerTest::singleLineSidplayName() 0178 { 0179 EventHandler eventHandler(room, room->messageEvents().at(11).get()); 0180 QCOMPARE(eventHandler.singleLineAuthorDisplayname(), QStringLiteral("Look at me I put newlines in my display name")); 0181 } 0182 0183 void EventHandlerTest::nullSingleLineDisplayName() 0184 { 0185 QTest::ignoreMessage(QtWarningMsg, "getAuthorDisplayName called with m_room set to nullptr."); 0186 QCOMPARE(emptyHandler.singleLineAuthorDisplayname(), QString()); 0187 0188 EventHandler noEventHandler(room, nullptr); 0189 QTest::ignoreMessage(QtWarningMsg, "getAuthorDisplayName called with m_event set to nullptr."); 0190 QCOMPARE(noEventHandler.singleLineAuthorDisplayname(), QString()); 0191 } 0192 0193 void EventHandlerTest::time() 0194 { 0195 EventHandler eventHandler(room, room->messageEvents().at(0).get()); 0196 0197 QCOMPARE(eventHandler.getTime(), QDateTime::fromMSecsSinceEpoch(1432735824654, Qt::UTC)); 0198 QCOMPARE(eventHandler.getTime(true, QDateTime::fromMSecsSinceEpoch(1234, Qt::UTC)), QDateTime::fromMSecsSinceEpoch(1234, Qt::UTC)); 0199 } 0200 0201 void EventHandlerTest::nullTime() 0202 { 0203 EventHandler noEventHandler(room, nullptr); 0204 QTest::ignoreMessage(QtWarningMsg, "getTime called with m_event set to nullptr."); 0205 QCOMPARE(noEventHandler.getTime(), QDateTime()); 0206 0207 EventHandler eventHandler(room, room->messageEvents().at(0).get()); 0208 QTest::ignoreMessage(QtWarningMsg, "a value must be provided for lastUpdated for a pending event."); 0209 QCOMPARE(eventHandler.getTime(true), QDateTime()); 0210 } 0211 0212 void EventHandlerTest::timeString() 0213 { 0214 EventHandler eventHandler(room, room->messageEvents().at(0).get()); 0215 0216 KFormat format; 0217 0218 QCOMPARE(eventHandler.getTimeString(false), 0219 QLocale().toString(QDateTime::fromMSecsSinceEpoch(1432735824654, Qt::UTC).toLocalTime().time(), QLocale::ShortFormat)); 0220 QCOMPARE(eventHandler.getTimeString(true), 0221 format.formatRelativeDate(QDateTime::fromMSecsSinceEpoch(1432735824654, Qt::UTC).toLocalTime().date(), QLocale::ShortFormat)); 0222 QCOMPARE(eventHandler.getTimeString(false, QLocale::ShortFormat, true, QDateTime::fromMSecsSinceEpoch(1690699214545, Qt::UTC)), 0223 QLocale().toString(QDateTime::fromMSecsSinceEpoch(1690699214545, Qt::UTC).toLocalTime().time(), QLocale::ShortFormat)); 0224 QCOMPARE(eventHandler.getTimeString(true, QLocale::ShortFormat, true, QDateTime::fromMSecsSinceEpoch(1690699214545, Qt::UTC)), 0225 format.formatRelativeDate(QDateTime::fromMSecsSinceEpoch(1690699214545, Qt::UTC).toLocalTime().date(), QLocale::ShortFormat)); 0226 QCOMPARE(eventHandler.getTimeString(false, QLocale::LongFormat, true, QDateTime::fromMSecsSinceEpoch(1690699214545, Qt::UTC)), 0227 QLocale().toString(QDateTime::fromMSecsSinceEpoch(1690699214545, Qt::UTC).toLocalTime().time(), QLocale::LongFormat)); 0228 QCOMPARE(eventHandler.getTimeString(true, QLocale::LongFormat, true, QDateTime::fromMSecsSinceEpoch(1690699214545, Qt::UTC)), 0229 format.formatRelativeDate(QDateTime::fromMSecsSinceEpoch(1690699214545, Qt::UTC).toLocalTime().date(), QLocale::LongFormat)); 0230 } 0231 0232 void EventHandlerTest::nullTimeString() 0233 { 0234 EventHandler noEventHandler(room, nullptr); 0235 QTest::ignoreMessage(QtWarningMsg, "getTimeString called with m_event set to nullptr."); 0236 QCOMPARE(noEventHandler.getTimeString(false), QString()); 0237 0238 EventHandler eventHandler(room, room->messageEvents().at(0).get()); 0239 QTest::ignoreMessage(QtWarningMsg, "a value must be provided for lastUpdated for a pending event."); 0240 QCOMPARE(eventHandler.getTimeString(false, QLocale::ShortFormat, true), QString()); 0241 } 0242 0243 void EventHandlerTest::highlighted() 0244 { 0245 EventHandler eventHandlerHighlight(room, room->messageEvents().at(2).get()); 0246 QCOMPARE(eventHandlerHighlight.isHighlighted(), true); 0247 0248 EventHandler eventHandlerNoHighlight(room, room->messageEvents().at(0).get()); 0249 QCOMPARE(eventHandlerNoHighlight.isHighlighted(), false); 0250 } 0251 0252 void EventHandlerTest::nullHighlighted() 0253 { 0254 QTest::ignoreMessage(QtWarningMsg, "isHighlighted called with m_room set to nullptr."); 0255 QCOMPARE(emptyHandler.isHighlighted(), false); 0256 0257 EventHandler noEventHandler(room, nullptr); 0258 QTest::ignoreMessage(QtWarningMsg, "isHighlighted called with m_event set to nullptr."); 0259 QCOMPARE(noEventHandler.isHighlighted(), false); 0260 } 0261 0262 void EventHandlerTest::hidden() 0263 { 0264 EventHandler eventHandlerHidden(room, room->messageEvents().at(3).get()); 0265 QCOMPARE(eventHandlerHidden.isHidden(), true); 0266 0267 EventHandler eventHandlerNoHidden(room, room->messageEvents().at(0).get()); 0268 QCOMPARE(eventHandlerNoHidden.isHidden(), false); 0269 } 0270 0271 void EventHandlerTest::nullHidden() 0272 { 0273 QTest::ignoreMessage(QtWarningMsg, "isHidden called with m_room set to nullptr."); 0274 QCOMPARE(emptyHandler.isHidden(), false); 0275 0276 EventHandler noEventHandler(room, nullptr); 0277 QTest::ignoreMessage(QtWarningMsg, "isHidden called with m_event set to nullptr."); 0278 QCOMPARE(noEventHandler.isHidden(), false); 0279 } 0280 0281 void EventHandlerTest::body() 0282 { 0283 EventHandler eventHandler(room, room->messageEvents().at(0).get()); 0284 0285 QCOMPARE(eventHandler.getRichBody(), QStringLiteral("<b>This is an example<br>text message</b>")); 0286 QCOMPARE(eventHandler.getRichBody(true), QStringLiteral("<b>This is an example text message</b>")); 0287 QCOMPARE(eventHandler.getPlainBody(), QStringLiteral("This is an example\ntext message")); 0288 QCOMPARE(eventHandler.getPlainBody(true), QStringLiteral("This is an example text message")); 0289 } 0290 0291 void EventHandlerTest::nullBody() 0292 { 0293 EventHandler noEventHandler(room, nullptr); 0294 0295 QTest::ignoreMessage(QtWarningMsg, "getRichBody called with m_event set to nullptr."); 0296 QCOMPARE(noEventHandler.getRichBody(), QString()); 0297 0298 QTest::ignoreMessage(QtWarningMsg, "getPlainBody called with m_event set to nullptr."); 0299 QCOMPARE(noEventHandler.getPlainBody(), QString()); 0300 } 0301 0302 void EventHandlerTest::genericBody_data() 0303 { 0304 QTest::addColumn<int>("eventNum"); 0305 QTest::addColumn<QString>("output"); 0306 0307 QTest::newRow("message") << 0 << QStringLiteral("sent a message"); 0308 QTest::newRow("member") << 1 << QStringLiteral("changed their display name and updated their avatar"); 0309 QTest::newRow("message 2") << 2 << QStringLiteral("sent a message"); 0310 QTest::newRow("reaction") << 3 << QStringLiteral("Unknown event"); 0311 QTest::newRow("video") << 4 << QStringLiteral("sent a message"); 0312 } 0313 0314 void EventHandlerTest::genericBody() 0315 { 0316 QFETCH(int, eventNum); 0317 QFETCH(QString, output); 0318 0319 EventHandler eventHandler(room, room->messageEvents().at(eventNum).get()); 0320 0321 QCOMPARE(eventHandler.getGenericBody(), output); 0322 } 0323 0324 void EventHandlerTest::nullGenericBody() 0325 { 0326 EventHandler noEventHandler(room, nullptr); 0327 QTest::ignoreMessage(QtWarningMsg, "getGenericBody called with m_event set to nullptr."); 0328 QCOMPARE(noEventHandler.getGenericBody(), QString()); 0329 } 0330 0331 void EventHandlerTest::subtitle() 0332 { 0333 EventHandler eventHandler(room, room->messageEvents().at(0).get()); 0334 QCOMPARE(eventHandler.subtitleText(), QStringLiteral("after: This is an example text message")); 0335 0336 EventHandler eventHandler2(room, room->messageEvents().at(2).get()); 0337 QCOMPARE(eventHandler2.subtitleText(), QStringLiteral("after: This is a highlight @bob:kde.org and this is a link https://kde.org")); 0338 } 0339 0340 void EventHandlerTest::nullSubtitle() 0341 { 0342 EventHandler noEventHandler(room, nullptr); 0343 QTest::ignoreMessage(QtWarningMsg, "subtitleText called with m_event set to nullptr."); 0344 QCOMPARE(noEventHandler.subtitleText(), QString()); 0345 } 0346 0347 void EventHandlerTest::mediaInfo() 0348 { 0349 auto event = room->messageEvents().at(4).get(); 0350 EventHandler eventHandler(room, event); 0351 0352 auto mediaInfo = eventHandler.getMediaInfo(); 0353 auto thumbnailInfo = mediaInfo["tempInfo"_ls].toMap(); 0354 0355 QCOMPARE(mediaInfo["source"_ls], room->makeMediaUrl(event->id(), QUrl("mxc://kde.org/1234567"_ls))); 0356 QCOMPARE(mediaInfo["mimeType"_ls], QStringLiteral("video/mp4")); 0357 QCOMPARE(mediaInfo["mimeIcon"_ls], QStringLiteral("video-mp4")); 0358 QCOMPARE(mediaInfo["size"_ls], 62650636); 0359 QCOMPARE(mediaInfo["duration"_ls], 10); 0360 QCOMPARE(mediaInfo["width"_ls], 1920); 0361 QCOMPARE(mediaInfo["height"_ls], 1080); 0362 QCOMPARE(thumbnailInfo["source"_ls], room->makeMediaUrl(event->id(), QUrl("mxc://kde.org/2234567"_ls))); 0363 QCOMPARE(thumbnailInfo["mimeType"_ls], QStringLiteral("image/jpeg")); 0364 QCOMPARE(thumbnailInfo["mimeIcon"_ls], QStringLiteral("image-jpeg")); 0365 QCOMPARE(thumbnailInfo["size"_ls], 382249); 0366 QCOMPARE(thumbnailInfo["width"_ls], 800); 0367 QCOMPARE(thumbnailInfo["height"_ls], 450); 0368 } 0369 0370 void EventHandlerTest::nullMediaInfo() 0371 { 0372 QTest::ignoreMessage(QtWarningMsg, "getMediaInfo called with m_room set to nullptr."); 0373 QCOMPARE(emptyHandler.getMediaInfo(), QVariantMap()); 0374 0375 EventHandler noEventHandler(room, nullptr); 0376 QTest::ignoreMessage(QtWarningMsg, "getMediaInfo called with m_event set to nullptr."); 0377 QCOMPARE(noEventHandler.getMediaInfo(), QVariantMap()); 0378 } 0379 0380 void EventHandlerTest::hasReply() 0381 { 0382 EventHandler eventHandlerReply(room, room->messageEvents().at(5).get()); 0383 QCOMPARE(eventHandlerReply.hasReply(), true); 0384 0385 EventHandler eventHandlerNoReply(room, room->messageEvents().at(0).get()); 0386 QCOMPARE(eventHandlerNoReply.hasReply(), false); 0387 } 0388 0389 void EventHandlerTest::nullHasReply() 0390 { 0391 EventHandler noEventHandler(room, nullptr); 0392 QTest::ignoreMessage(QtWarningMsg, "hasReply called with m_event set to nullptr."); 0393 QCOMPARE(noEventHandler.hasReply(), false); 0394 } 0395 0396 void EventHandlerTest::replyId() 0397 { 0398 EventHandler eventHandlerReply(room, room->messageEvents().at(5).get()); 0399 QCOMPARE(eventHandlerReply.getReplyId(), QStringLiteral("$153456789:example.org")); 0400 0401 EventHandler eventHandlerNoReply(room, room->messageEvents().at(0).get()); 0402 QCOMPARE(eventHandlerNoReply.getReplyId(), QStringLiteral("")); 0403 } 0404 0405 void EventHandlerTest::nullReplyId() 0406 { 0407 EventHandler noEventHandler(room, nullptr); 0408 QTest::ignoreMessage(QtWarningMsg, "getReplyId called with m_event set to nullptr."); 0409 QCOMPARE(noEventHandler.getReplyId(), QString()); 0410 } 0411 0412 void EventHandlerTest::replyDelegateType() 0413 { 0414 EventHandler eventHandlerReply(room, room->messageEvents().at(5).get()); 0415 QCOMPARE(eventHandlerReply.getReplyDelegateType(), DelegateType::Message); 0416 0417 EventHandler eventHandlerNoReply(room, room->messageEvents().at(0).get()); 0418 QCOMPARE(eventHandlerNoReply.getReplyDelegateType(), DelegateType::Other); 0419 } 0420 0421 void EventHandlerTest::nullReplyDelegateType() 0422 { 0423 QTest::ignoreMessage(QtWarningMsg, "getReplyDelegateType called with m_room set to nullptr."); 0424 QCOMPARE(emptyHandler.getReplyDelegateType(), DelegateType::Other); 0425 0426 EventHandler noEventHandler(room, nullptr); 0427 QTest::ignoreMessage(QtWarningMsg, "getReplyDelegateType called with m_event set to nullptr."); 0428 QCOMPARE(noEventHandler.getReplyDelegateType(), DelegateType::Other); 0429 } 0430 0431 void EventHandlerTest::replyAuthor() 0432 { 0433 auto replyEvent = room->messageEvents().at(0).get(); 0434 auto replyAuthor = room->user(replyEvent->senderId()); 0435 EventHandler eventHandler(room, room->messageEvents().at(5).get()); 0436 0437 auto eventHandlerReplyAuthor = eventHandler.getReplyAuthor(); 0438 0439 QCOMPARE(eventHandlerReplyAuthor["isLocalUser"_ls], replyAuthor->id() == room->localUser()->id()); 0440 QCOMPARE(eventHandlerReplyAuthor["id"_ls], replyAuthor->id()); 0441 QCOMPARE(eventHandlerReplyAuthor["displayName"_ls], replyAuthor->displayname(room)); 0442 QCOMPARE(eventHandlerReplyAuthor["avatarSource"_ls], room->avatarForMember(replyAuthor)); 0443 QCOMPARE(eventHandlerReplyAuthor["avatarMediaId"_ls], replyAuthor->avatarMediaId(room)); 0444 QCOMPARE(eventHandlerReplyAuthor["color"_ls], Utils::getUserColor(replyAuthor->hueF())); 0445 QCOMPARE(eventHandlerReplyAuthor["object"_ls], QVariant::fromValue(replyAuthor)); 0446 0447 EventHandler eventHandlerNoAuthor(room, room->messageEvents().at(0).get()); 0448 QCOMPARE(eventHandlerNoAuthor.getReplyAuthor(), room->getUser(nullptr)); 0449 } 0450 0451 void EventHandlerTest::nullReplyAuthor() 0452 { 0453 QTest::ignoreMessage(QtWarningMsg, "getReplyAuthor called with m_room set to nullptr."); 0454 QCOMPARE(emptyHandler.getReplyAuthor(), QVariantMap()); 0455 0456 EventHandler noEventHandler(room, nullptr); 0457 QTest::ignoreMessage(QtWarningMsg, "getReplyAuthor called with m_event set to nullptr. Returning empty user."); 0458 QCOMPARE(noEventHandler.getReplyAuthor(), room->getUser(nullptr)); 0459 } 0460 0461 void EventHandlerTest::replyBody() 0462 { 0463 EventHandler eventHandler(room, room->messageEvents().at(5).get()); 0464 0465 QCOMPARE(eventHandler.getReplyRichBody(), QStringLiteral("<b>This is an example<br>text message</b>")); 0466 QCOMPARE(eventHandler.getReplyRichBody(true), QStringLiteral("<b>This is an example text message</b>")); 0467 QCOMPARE(eventHandler.getReplyPlainBody(), QStringLiteral("This is an example\ntext message")); 0468 QCOMPARE(eventHandler.getReplyPlainBody(true), QStringLiteral("This is an example text message")); 0469 } 0470 0471 void EventHandlerTest::nullReplyBody() 0472 { 0473 EventHandler noEventHandler(room, nullptr); 0474 0475 QTest::ignoreMessage(QtWarningMsg, "getReplyRichBody called with m_event set to nullptr."); 0476 QCOMPARE(noEventHandler.getReplyRichBody(), QString()); 0477 0478 QTest::ignoreMessage(QtWarningMsg, "getReplyPlainBody called with m_event set to nullptr."); 0479 QCOMPARE(noEventHandler.getReplyPlainBody(), QString()); 0480 } 0481 0482 void EventHandlerTest::replyMediaInfo() 0483 { 0484 auto event = room->messageEvents().at(6).get(); 0485 auto replyEvent = room->messageEvents().at(4).get(); 0486 EventHandler eventHandler(room, event); 0487 0488 auto mediaInfo = eventHandler.getReplyMediaInfo(); 0489 auto thumbnailInfo = mediaInfo["tempInfo"_ls].toMap(); 0490 0491 QCOMPARE(mediaInfo["source"_ls], room->makeMediaUrl(replyEvent->id(), QUrl("mxc://kde.org/1234567"_ls))); 0492 QCOMPARE(mediaInfo["mimeType"_ls], QStringLiteral("video/mp4")); 0493 QCOMPARE(mediaInfo["mimeIcon"_ls], QStringLiteral("video-mp4")); 0494 QCOMPARE(mediaInfo["size"_ls], 62650636); 0495 QCOMPARE(mediaInfo["duration"_ls], 10); 0496 QCOMPARE(mediaInfo["width"_ls], 1920); 0497 QCOMPARE(mediaInfo["height"_ls], 1080); 0498 QCOMPARE(thumbnailInfo["source"_ls], room->makeMediaUrl(replyEvent->id(), QUrl("mxc://kde.org/2234567"_ls))); 0499 QCOMPARE(thumbnailInfo["mimeType"_ls], QStringLiteral("image/jpeg")); 0500 QCOMPARE(thumbnailInfo["mimeIcon"_ls], QStringLiteral("image-jpeg")); 0501 QCOMPARE(thumbnailInfo["size"_ls], 382249); 0502 QCOMPARE(thumbnailInfo["width"_ls], 800); 0503 QCOMPARE(thumbnailInfo["height"_ls], 450); 0504 } 0505 0506 void EventHandlerTest::nullReplyMediaInfo() 0507 { 0508 QTest::ignoreMessage(QtWarningMsg, "getReplyMediaInfo called with m_room set to nullptr."); 0509 QCOMPARE(emptyHandler.getReplyMediaInfo(), QVariantMap()); 0510 0511 EventHandler noEventHandler(room, nullptr); 0512 QTest::ignoreMessage(QtWarningMsg, "getReplyMediaInfo called with m_event set to nullptr."); 0513 QCOMPARE(noEventHandler.getReplyMediaInfo(), QVariantMap()); 0514 } 0515 0516 void EventHandlerTest::thread() 0517 { 0518 EventHandler eventHandlerNoThread(room, room->messageEvents().at(0).get()); 0519 QCOMPARE(eventHandlerNoThread.isThreaded(), false); 0520 QCOMPARE(eventHandlerNoThread.threadRoot(), QString()); 0521 0522 EventHandler eventHandlerThreadRoot(room, room->messageEvents().at(9).get()); 0523 QCOMPARE(eventHandlerThreadRoot.isThreaded(), true); 0524 QCOMPARE(eventHandlerThreadRoot.threadRoot(), QStringLiteral("$threadroot:example.org")); 0525 QCOMPARE(eventHandlerThreadRoot.getReplyId(), QStringLiteral("$threadroot:example.org")); 0526 0527 EventHandler eventHandlerThreadReply(room, room->messageEvents().at(10).get()); 0528 QCOMPARE(eventHandlerThreadReply.isThreaded(), true); 0529 QCOMPARE(eventHandlerThreadReply.threadRoot(), QStringLiteral("$threadroot:example.org")); 0530 QCOMPARE(eventHandlerThreadReply.getReplyId(), QStringLiteral("$threadmessage1:example.org")); 0531 } 0532 0533 void EventHandlerTest::nullThread() 0534 { 0535 QTest::ignoreMessage(QtWarningMsg, "isThreaded called with m_event set to nullptr."); 0536 QCOMPARE(emptyHandler.isThreaded(), false); 0537 0538 EventHandler noEventHandler(room, nullptr); 0539 QTest::ignoreMessage(QtWarningMsg, "threadRoot called with m_event set to nullptr."); 0540 QCOMPARE(noEventHandler.threadRoot(), QString()); 0541 } 0542 0543 void EventHandlerTest::location() 0544 { 0545 EventHandler eventHandler(room, room->messageEvents().at(7).get()); 0546 0547 QCOMPARE(eventHandler.getLatitude(), QStringLiteral("51.7035").toFloat()); 0548 QCOMPARE(eventHandler.getLongitude(), QStringLiteral("-1.14394").toFloat()); 0549 QCOMPARE(eventHandler.getLocationAssetType(), QStringLiteral("m.pin")); 0550 } 0551 0552 void EventHandlerTest::nullLocation() 0553 { 0554 QTest::ignoreMessage(QtWarningMsg, "getLatitude called with m_event set to nullptr."); 0555 QCOMPARE(emptyHandler.getLatitude(), -100.0); 0556 0557 QTest::ignoreMessage(QtWarningMsg, "getLongitude called with m_event set to nullptr."); 0558 QCOMPARE(emptyHandler.getLongitude(), -200.0); 0559 0560 QTest::ignoreMessage(QtWarningMsg, "getLocationAssetType called with m_event set to nullptr."); 0561 QCOMPARE(emptyHandler.getLocationAssetType(), QString()); 0562 } 0563 0564 void EventHandlerTest::readMarkers() 0565 { 0566 EventHandler eventHandler(room, room->messageEvents().at(0).get()); 0567 QCOMPARE(eventHandler.hasReadMarkers(), true); 0568 0569 auto readMarkers = eventHandler.getReadMarkers(); 0570 0571 QCOMPARE(readMarkers.size(), 1); 0572 QCOMPARE(readMarkers[0].toMap()["id"_ls], QStringLiteral("@alice:matrix.org")); 0573 0574 QCOMPARE(eventHandler.getNumberExcessReadMarkers(), QString()); 0575 QCOMPARE(eventHandler.getReadMarkersString(), QStringLiteral("1 user: @alice:matrix.org")); 0576 0577 EventHandler eventHandler2(room, room->messageEvents().at(2).get()); 0578 QCOMPARE(eventHandler2.hasReadMarkers(), true); 0579 0580 readMarkers = eventHandler2.getReadMarkers(); 0581 0582 QCOMPARE(readMarkers.size(), 5); 0583 0584 QCOMPARE(eventHandler2.getNumberExcessReadMarkers(), QStringLiteral("+ 1")); 0585 // There are no guarantees on the order of the users it will be different every time so don't match the whole string. 0586 QCOMPARE(eventHandler2.getReadMarkersString().startsWith(QStringLiteral("6 users:")), true); 0587 } 0588 0589 void EventHandlerTest::nullReadMarkers() 0590 { 0591 QTest::ignoreMessage(QtWarningMsg, "hasReadMarkers called with m_room set to nullptr."); 0592 QCOMPARE(emptyHandler.hasReadMarkers(), false); 0593 0594 QTest::ignoreMessage(QtWarningMsg, "getReadMarkers called with m_room set to nullptr."); 0595 QCOMPARE(emptyHandler.getReadMarkers(), QVariantList()); 0596 0597 QTest::ignoreMessage(QtWarningMsg, "getNumberExcessReadMarkers called with m_room set to nullptr."); 0598 QCOMPARE(emptyHandler.getNumberExcessReadMarkers(), QString()); 0599 0600 QTest::ignoreMessage(QtWarningMsg, "getReadMarkersString called with m_room set to nullptr."); 0601 QCOMPARE(emptyHandler.getReadMarkersString(), QString()); 0602 0603 EventHandler noEventHandler(room, nullptr); 0604 0605 QTest::ignoreMessage(QtWarningMsg, "hasReadMarkers called with m_event set to nullptr."); 0606 QCOMPARE(noEventHandler.hasReadMarkers(), false); 0607 0608 QTest::ignoreMessage(QtWarningMsg, "getReadMarkers called with m_event set to nullptr."); 0609 QCOMPARE(noEventHandler.getReadMarkers(), QVariantList()); 0610 0611 QTest::ignoreMessage(QtWarningMsg, "getNumberExcessReadMarkers called with m_event set to nullptr."); 0612 QCOMPARE(noEventHandler.getNumberExcessReadMarkers(), QString()); 0613 0614 QTest::ignoreMessage(QtWarningMsg, "getReadMarkersString called with m_event set to nullptr."); 0615 QCOMPARE(noEventHandler.getReadMarkersString(), QString()); 0616 } 0617 0618 QTEST_MAIN(EventHandlerTest) 0619 #include "eventhandlertest.moc"