1 /*
2 SPDX-FileCopyrightText: 2020-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7 #include "roomwidgettest.h"
8 #include "model/roommodel.h"
9 #include "otr/otrwidget.h"
10 #include "rocketchataccount.h"
11 #include "room/messagelinewidget.h"
12 #include "room/messagelistview.h"
13 #include "room/readonlylineeditwidget.h"
14 #include "room/reconnectinfowidget.h"
15 #include "room/roomcounterinfowidget.h"
16 #include "room/roomheaderwidget.h"
17 #include "room/roomquotemessagewidget.h"
18 #include "room/roomreplythreadwidget.h"
19 #include "room/roomwidget.h"
20 #include "room/uploadfileprogressstatuswidget.h"
21 #include "room/usersinroomflowwidget.h"
22
23 #include <ruqola.h>
24
25 #include <QStackedWidget>
26 #include <QTest>
27 #include <QVBoxLayout>
28
QTEST_MAIN(RoomWidgetTest)29 QTEST_MAIN(RoomWidgetTest)
30 RoomWidgetTest::RoomWidgetTest(QObject *parent)
31 : QObject(parent)
32 {
33 }
34
shouldHaveDefaultValues()35 void RoomWidgetTest::shouldHaveDefaultValues()
36 {
37 RoomWidget w;
38 auto mainLayout = w.findChild<QVBoxLayout *>(QStringLiteral("mainLayout"));
39 QVERIFY(mainLayout);
40 QCOMPARE(mainLayout->contentsMargins(), {});
41
42 auto mRoomHeaderWidget = w.findChild<RoomHeaderWidget *>(QStringLiteral("mRoomHeaderWidget"));
43 QVERIFY(mRoomHeaderWidget);
44
45 auto mUsersInRoomFlowWidget = w.findChild<UsersInRoomFlowWidget *>(QStringLiteral("mUsersInRoomFlowWidget"));
46 QVERIFY(mUsersInRoomFlowWidget);
47
48 auto mMessageListView = w.findChild<MessageListView *>(QStringLiteral("mMessageListView"));
49 QVERIFY(mMessageListView);
50
51 auto mStackedWidget = w.findChild<QStackedWidget *>(QStringLiteral("mStackedWidget"));
52 QVERIFY(mStackedWidget);
53 QCOMPARE(mStackedWidget->count(), 2);
54
55 auto mMessageLineWidget = w.findChild<MessageLineWidget *>(QStringLiteral("mMessageLineWidget"));
56 QVERIFY(mMessageLineWidget);
57
58 auto mReadOnlyLineEditWidget = w.findChild<ReadOnlyLineEditWidget *>(QStringLiteral("mReadOnlyLineEditWidget"));
59 QVERIFY(mReadOnlyLineEditWidget);
60 QCOMPARE(mStackedWidget->currentWidget(), mMessageLineWidget);
61
62 QVERIFY(w.roomId().isEmpty());
63
64 auto mRoomCounterInfoWidget = w.findChild<RoomCounterInfoWidget *>(QStringLiteral("mRoomCounterInfoWidget"));
65 QVERIFY(mRoomCounterInfoWidget);
66
67 auto mRoomReconnectInfoWidget = w.findChild<ReconnectInfoWidget *>(QStringLiteral("mRoomReconnectInfoWidget"));
68 QVERIFY(mRoomReconnectInfoWidget);
69
70 auto mRoomReplyThreadWidget = w.findChild<RoomReplyThreadWidget *>(QStringLiteral("mRoomReplyThreadWidget"));
71 QVERIFY(mRoomReplyThreadWidget);
72 QVERIFY(!mRoomReplyThreadWidget->isVisible());
73
74 auto mRoomQuoteMessageWidget = w.findChild<RoomQuoteMessageWidget *>(QStringLiteral("mRoomQuoteMessageWidget"));
75 QVERIFY(mRoomQuoteMessageWidget);
76 QVERIFY(!mRoomQuoteMessageWidget->isVisible());
77
78 auto mUploadFileProgressStatusWidget = w.findChild<UploadFileProgressStatusWidget *>(QStringLiteral("mUploadFileProgressStatusWidget"));
79 QVERIFY(mUploadFileProgressStatusWidget);
80 QVERIFY(!mUploadFileProgressStatusWidget->isVisible());
81
82 auto mOtrWidget = w.findChild<OtrWidget *>(QStringLiteral("mOtrWidget"));
83 QVERIFY(mOtrWidget);
84 }
85
createRoom(const QString & roomId,const QString & roomName)86 static Room *createRoom(const QString &roomId, const QString &roomName)
87 {
88 RocketChatAccount *rcAccount = Ruqola::self()->rocketChatAccount();
89 Room *r = new Room(rcAccount);
90 r->setRoomId(roomId);
91 r->setName(roomName);
92 const Room::RoomType roomType = Room::RoomType::Channel; // should be an enum...
93 r->setChannelType(roomType);
94 r->setArchived(true); // workaround to skip RestApiConnection::membersInRoom
95 return r;
96 }
97
shouldStorePendingTextPerRoom()98 void RoomWidgetTest::shouldStorePendingTextPerRoom()
99 {
100 // GIVEN two rooms
101 RoomWidget w;
102 RocketChatAccount *rcAccount = Ruqola::self()->rocketChatAccount();
103 w.setCurrentRocketChatAccount(rcAccount);
104 const QString roomId1 = QStringLiteral("roomId1");
105 Room *room1 = createRoom(roomId1, QStringLiteral("roomName1"));
106 QVERIFY(rcAccount->roomModel()->addRoom(room1));
107 const QString roomId2 = QStringLiteral("roomId2");
108 Room *room2 = createRoom(roomId2, QStringLiteral("roomName2"));
109 QVERIFY(rcAccount->roomModel()->addRoom(room2));
110
111 // Ensure switching between rooms works
112 w.setChannelSelected(room1->roomId(), room1->channelType());
113 QCOMPARE(w.roomId(), roomId1);
114 w.setChannelSelected(room2->roomId(), room2->channelType());
115 QCOMPARE(w.roomId(), roomId2);
116
117 // WHEN typing text and switching rooms
118 auto mMessageLineWidget = w.findChild<MessageLineWidget *>(QStringLiteral("mMessageLineWidget"));
119 QVERIFY(mMessageLineWidget);
120 mMessageLineWidget->setText(QStringLiteral("Text for room 2"));
121
122 w.setChannelSelected(room1->roomId(), room1->channelType());
123 // THEN the text should be empty
124 QCOMPARE(mMessageLineWidget->text(), QString());
125
126 // WHEN typing some text and switching back
127 mMessageLineWidget->setText(QStringLiteral("Text for room 1"));
128
129 // THEN the orig text should appear again
130 w.setChannelSelected(room2->roomId(), room2->channelType());
131 QCOMPARE(mMessageLineWidget->text(), QStringLiteral("Text for room 2"));
132 mMessageLineWidget->setText(QString());
133
134 // WHEN switching again
135 mMessageLineWidget->setText(QStringLiteral("Text for room 1"));
136
137 // THEN the other text should appear again
138 w.setChannelSelected(room2->roomId(), room2->channelType());
139 QCOMPARE(mMessageLineWidget->text(), QStringLiteral("Text for room 1"));
140 }
141
shouldShowNoticeWhenReplyingToThread()142 void RoomWidgetTest::shouldShowNoticeWhenReplyingToThread()
143 {
144 QEventLoop loop;
145 RoomWidget w;
146
147 auto mRoomReplyThreadWidget = w.findChild<RoomReplyThreadWidget *>(QStringLiteral("mRoomReplyThreadWidget"));
148 QVERIFY(!mRoomReplyThreadWidget->isVisible());
149
150 auto mMessageLineWidget = w.findChild<MessageLineWidget *>(QStringLiteral("mMessageLineWidget"));
151 QVERIFY(mMessageLineWidget);
152
153 mMessageLineWidget->setThreadMessageId(QStringLiteral("placeholder"));
154 loop.processEvents();
155 QVERIFY(!mRoomReplyThreadWidget->isHidden());
156
157 mMessageLineWidget->setThreadMessageId({});
158 loop.processEvents();
159 QVERIFY(mRoomReplyThreadWidget->isHidden());
160 }
161