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"