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