55
66#include " QXmppClient.h"
77#include " QXmppDiscoveryManager.h"
8+ #include " QXmppMovedManager.h"
9+ #include " QXmppPubSubManager.h"
810#include " QXmppRosterManager.h"
911
1012#include " TestClient.h"
@@ -18,7 +20,9 @@ class tst_QXmppRosterManager : public QObject
1820
1921 Q_SLOT void testDiscoFeatures ();
2022 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 ();
2226 Q_SLOT void testAddItem ();
2327 Q_SLOT void testRemoveItem ();
2428
@@ -90,7 +94,7 @@ void tst_QXmppRosterManager::testRenameItem()
9094 QVERIFY (requestSent);
9195}
9296
93- void tst_QXmppRosterManager::subscriptionRequestReceived ()
97+ void tst_QXmppRosterManager::testSubscriptionRequestReceived ()
9498{
9599 QXmppPresence presence;
96100 presence.setType (QXmppPresence::Subscribe);
@@ -110,6 +114,112 @@ void tst_QXmppRosterManager::subscriptionRequestReceived()
110114 QVERIFY (subscriptionRequestReceived);
111115}
112116
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+
113223void tst_QXmppRosterManager::testAddItem ()
114224{
115225 TestClient test;
0 commit comments