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"