// SPDX-FileCopyrightText: 2023 James Graham // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL #include #include #include #include #include #include #include #include "chatbarcache.h" #include "neochatroom.h" #include "testutils.h" using namespace Quotient; class ChatBarCacheTest : public QObject { Q_OBJECT private: Connection *connection = nullptr; TestUtils::TestRoom *room = nullptr; private Q_SLOTS: void initTestCase(); void empty(); void noRoom(); void badParent(); void reply(); void edit(); void attachment(); }; void ChatBarCacheTest::initTestCase() { connection = Connection::makeMockConnection(u"@bob:kde.org"_s); room = new TestUtils::TestRoom(connection, u"#myroom:kde.org"_s, "test-min-sync.json"_L1); } void ChatBarCacheTest::empty() { QScopedPointer chatBarCache(new ChatBarCache(room)); QCOMPARE(chatBarCache->text(), QString()); QCOMPARE(chatBarCache->isReplying(), false); QCOMPARE(chatBarCache->replyId(), QString()); QCOMPARE(chatBarCache->isEditing(), false); QCOMPARE(chatBarCache->editId(), QString()); QCOMPARE(chatBarCache->relationAuthor(), room->member(QString())); QCOMPARE(chatBarCache->relationMessage(), QString()); QCOMPARE(chatBarCache->attachmentPath(), QString()); } void ChatBarCacheTest::noRoom() { QScopedPointer chatBarCache(new ChatBarCache()); chatBarCache->setReplyId(u"$153456789:example.org"_s); // These should return empty even though a reply ID has been set because the // ChatBarCache has no parent. QTest::ignoreMessage(QtWarningMsg, "ChatBarCache created with no parent, a NeoChatRoom must be set as the parent on creation."); QCOMPARE(chatBarCache->relationAuthor(), Quotient::RoomMember()); QTest::ignoreMessage(QtWarningMsg, "ChatBarCache created with no parent, a NeoChatRoom must be set as the parent on creation."); QCOMPARE(chatBarCache->relationMessage(), QString()); } void ChatBarCacheTest::badParent() { QScopedPointer badParent(new QObject()); QScopedPointer chatBarCache(new ChatBarCache(badParent.get())); chatBarCache->setReplyId(u"$153456789:example.org"_s); // These should return empty even though a reply ID has been set because the // ChatBarCache has no parent. QTest::ignoreMessage(QtWarningMsg, "ChatBarCache created with incorrect parent, a NeoChatRoom must be set as the parent on creation."); QCOMPARE(chatBarCache->relationAuthor(), Quotient::RoomMember()); QTest::ignoreMessage(QtWarningMsg, "ChatBarCache created with incorrect parent, a NeoChatRoom must be set as the parent on creation."); QCOMPARE(chatBarCache->relationMessage(), QString()); } void ChatBarCacheTest::reply() { QScopedPointer chatBarCache(new ChatBarCache(room)); chatBarCache->setText(u"some text"_s); chatBarCache->setAttachmentPath(u"some/path"_s); chatBarCache->setReplyId(u"$153456789:example.org"_s); QCOMPARE(chatBarCache->text(), u"some text"_s); QCOMPARE(chatBarCache->isReplying(), true); QCOMPARE(chatBarCache->replyId(), u"$153456789:example.org"_s); QCOMPARE(chatBarCache->isEditing(), false); QCOMPARE(chatBarCache->editId(), QString()); QCOMPARE(chatBarCache->relationAuthor(), room->member(u"@example:example.org"_s)); QCOMPARE(chatBarCache->relationMessage(), u"This is an example\ntext message"_s); QCOMPARE(chatBarCache->attachmentPath(), QString()); } void ChatBarCacheTest::edit() { QScopedPointer chatBarCache(new ChatBarCache(room)); chatBarCache->setText(u"some text"_s); chatBarCache->setAttachmentPath(u"some/path"_s); connect(chatBarCache.get(), &ChatBarCache::relationIdChanged, this, [](const QString &oldEventId, const QString &newEventId) { QCOMPARE(oldEventId, QString()); QCOMPARE(newEventId, QString(u"$153456789:example.org"_s)); }); chatBarCache->setEditId(u"$153456789:example.org"_s); QCOMPARE(chatBarCache->text(), u"some text"_s); QCOMPARE(chatBarCache->isReplying(), false); QCOMPARE(chatBarCache->replyId(), QString()); QCOMPARE(chatBarCache->isEditing(), true); QCOMPARE(chatBarCache->editId(), u"$153456789:example.org"_s); QCOMPARE(chatBarCache->relationAuthor(), room->member(u"@example:example.org"_s)); QCOMPARE(chatBarCache->relationMessage(), u"This is an example\ntext message"_s); QCOMPARE(chatBarCache->attachmentPath(), QString()); } void ChatBarCacheTest::attachment() { QScopedPointer chatBarCache(new ChatBarCache(room)); chatBarCache->setText(u"some text"_s); chatBarCache->setEditId(u"$153456789:example.org"_s); chatBarCache->setAttachmentPath(u"some/path"_s); QCOMPARE(chatBarCache->text(), u"some text"_s); QCOMPARE(chatBarCache->isReplying(), false); QCOMPARE(chatBarCache->replyId(), QString()); QCOMPARE(chatBarCache->isEditing(), false); QCOMPARE(chatBarCache->editId(), QString()); QCOMPARE(chatBarCache->relationAuthor(), room->member(QString())); QCOMPARE(chatBarCache->relationMessage(), QString()); QCOMPARE(chatBarCache->attachmentPath(), u"some/path"_s); } QTEST_MAIN(ChatBarCacheTest) #include "chatbarcachetest.moc"