5
5
6
6
#include " QXmppClient.h"
7
7
#include " QXmppDiscoveryManager.h"
8
+ #include " QXmppMovedManager.h"
9
+ #include " QXmppPubSubManager.h"
8
10
#include " QXmppRosterManager.h"
9
11
10
12
#include " TestClient.h"
@@ -18,7 +20,9 @@ class tst_QXmppRosterManager : public QObject
18
20
19
21
Q_SLOT void testDiscoFeatures ();
20
22
Q_SLOT void testRenameItem ();
21
- Q_SLOT void subscriptionRequestReceived ();
23
+ Q_SLOT void testSubscriptionRequestReceived ();
24
+ Q_SLOT void testMovedSubscriptionRequestReceived_data ();
25
+ Q_SLOT void testMovedSubscriptionRequestReceived ();
22
26
Q_SLOT void testAddItem ();
23
27
Q_SLOT void testRemoveItem ();
24
28
@@ -90,7 +94,7 @@ void tst_QXmppRosterManager::testRenameItem()
90
94
QVERIFY (requestSent);
91
95
}
92
96
93
- void tst_QXmppRosterManager::subscriptionRequestReceived ()
97
+ void tst_QXmppRosterManager::testSubscriptionRequestReceived ()
94
98
{
95
99
QXmppPresence presence;
96
100
presence.setType (QXmppPresence::Subscribe);
@@ -110,6 +114,112 @@ void tst_QXmppRosterManager::subscriptionRequestReceived()
110
114
QVERIFY (subscriptionRequestReceived);
111
115
}
112
116
117
+ void tst_QXmppRosterManager::testMovedSubscriptionRequestReceived_data ()
118
+ {
119
+ QTest::addColumn<bool >(" movedManagerAdded" );
120
+ QTest::addColumn<QString>(" oldJid" );
121
+ QTest::addColumn<QString>(" oldJidResponse" );
122
+ QTest::addColumn<bool >(" valid" );
123
+
124
+ QTest::newRow (" noMovedManagerNoJid" )
125
+ << false
126
+ << QString ()
127
+ << QString ()
128
+ << false ;
129
+ QTest::newRow (" noMovedManagerJid" )
130
+ << false
131
+
132
+ << QString ()
133
+ << false ;
134
+ QTest::newRow (" oldJidEmpty" )
135
+ << true
136
+ << QString ()
137
+ << QString ()
138
+ << false ;
139
+ QTest::newRow (" oldJidNotInRoster" )
140
+ << true
141
+
142
+ << QString ()
143
+ << false ;
144
+ QTest::newRow (" oldJidRespondingWithError" )
145
+ << true
146
+
147
+ <<
u" <iq id='qxmpp1' from='[email protected] ' type='error'>"
148
+ u" <error type='cancel'>"
149
+ u" <not-allowed xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>"
150
+ u" </error>"
151
+ u" </iq>" _s
152
+ << false ;
153
+ QTest::newRow (" oldJidValid" )
154
+ << true
155
+
156
+ <<
u" <iq id='qxmpp1' from='[email protected] ' type='result'>"
157
+ " <pubsub xmlns='http://jabber.org/protocol/pubsub'>"
158
+ " <items node='urn:xmpp:moved:1'>"
159
+ " <item id='current'>"
160
+ " <moved xmlns='urn:xmpp:moved:1'>"
161
+ " <new-jid>[email protected] </new-jid>"
162
+ " </moved>"
163
+ " </item>"
164
+ " </items>"
165
+ " </pubsub>"
166
+ " </iq>" _s
167
+ << true ;
168
+ }
169
+
170
+ void tst_QXmppRosterManager::testMovedSubscriptionRequestReceived ()
171
+ {
172
+ TestClient client;
173
+ client.
configuration ().
setJid (
u" [email protected] " _s);
174
+ auto *rosterManager = client.addNewExtension <QXmppRosterManager>(&client);
175
+
176
+ QFETCH (bool , movedManagerAdded);
177
+ QFETCH (QString, oldJid);
178
+ QFETCH (QString, oldJidResponse);
179
+ QFETCH (bool , valid);
180
+
181
+ if (movedManagerAdded) {
182
+ client.addNewExtension <QXmppDiscoveryManager>();
183
+ client.addNewExtension <QXmppPubSubManager>();
184
+ client.addNewExtension <QXmppMovedManager>();
185
+
186
+ QXmppRosterIq::Item rosterItem;
187
+ rosterItem.
setBareJid (
u" [email protected] " _s);
188
+ rosterItem.setSubscriptionType (QXmppRosterIq::Item::SubscriptionType::Both);
189
+
190
+ QXmppRosterIq rosterIq;
191
+ rosterIq.setType (QXmppIq::Set);
192
+ rosterIq.setItems ({ rosterItem });
193
+ rosterManager->handleStanza (writePacketToDom (rosterIq));
194
+ }
195
+
196
+ QXmppPresence presence;
197
+ presence.setType (QXmppPresence::Subscribe);
198
+ presence.
setFrom (
u" [email protected] /notebook" _s);
199
+ presence.setOldJid (oldJid);
200
+
201
+ bool subscriptionRequestReceived = false ;
202
+ client.resetIdCount ();
203
+
204
+ connect (rosterManager, &QXmppRosterManager::subscriptionRequestReceived, this , [&](const QString &subscriberBareJid, const QXmppPresence &presence) {
205
+ subscriptionRequestReceived = true ;
206
+ QCOMPARE (subscriberBareJid,
u" [email protected] " _s);
207
+ if (valid && movedManagerAdded) {
208
+ QCOMPARE (oldJid, presence.oldJid ());
209
+ } else {
210
+ QVERIFY (presence.oldJid ().isEmpty ());
211
+ }
212
+ });
213
+
214
+ Q_EMIT client.presenceReceived (presence);
215
+
216
+ if (!oldJidResponse.isEmpty ()) {
217
+ client.inject (oldJidResponse);
218
+ }
219
+
220
+ QVERIFY (subscriptionRequestReceived);
221
+ }
222
+
113
223
void tst_QXmppRosterManager::testAddItem ()
114
224
{
115
225
TestClient test;
0 commit comments