aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2020-07-05 01:31:09 +0200
committerLinus Jahn <lnj@kaidan.im>2021-08-22 16:09:02 +0200
commitd280d09fcb458c680565420651c7f18702ba0ceb (patch)
tree535a0a8b49fd3d3cd1fd717165b50ef4f75842db /tests
parent08a67a6a06b09a6b1e4fe0c6277b4a77e66b770a (diff)
downloadqxmpp-d280d09fcb458c680565420651c7f18702ba0ceb.tar.gz
tests: Add tests for QXmppPubSubIq<T>
Diffstat (limited to 'tests')
-rw-r--r--tests/CMakeLists.txt2
-rw-r--r--tests/qxmpppubsubiq/tst_qxmpppubsubiq.cpp239
2 files changed, 168 insertions, 73 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index b026f25e..571ca27b 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -40,7 +40,7 @@ add_simple_test(qxmppoutgoingclient)
add_simple_test(qxmpppushenableiq)
add_simple_test(qxmpppresence)
add_simple_test(qxmpppubsub)
-#add_simple_test(qxmpppubsubiq)
+add_simple_test(qxmpppubsubiq)
add_simple_test(qxmppregisteriq)
add_simple_test(qxmppregistrationmanager)
add_simple_test(qxmppresultset)
diff --git a/tests/qxmpppubsubiq/tst_qxmpppubsubiq.cpp b/tests/qxmpppubsubiq/tst_qxmpppubsubiq.cpp
index 4b52ce54..95588cc6 100644
--- a/tests/qxmpppubsubiq/tst_qxmpppubsubiq.cpp
+++ b/tests/qxmpppubsubiq/tst_qxmpppubsubiq.cpp
@@ -3,6 +3,7 @@
*
* Author:
* Jeremy Lainé
+ * Linus Jahn
*
* Source:
* https://github.com/qxmpp-project/qxmpp
@@ -22,7 +23,11 @@
*/
#include "QXmppPubSubIq.h"
+#include "QXmppPubSubItem.h"
+#include "QXmppPubSubSubscription.h"
+#include "QXmppResultSet.h"
+#include "pubsubutil.h"
#include "util.h"
#include <QObject>
@@ -33,6 +38,8 @@ class tst_QXmppPubSubIq : public QObject
private slots:
void testItems();
void testItemsResponse();
+ void testCreateNode();
+ void testDeleteNode();
void testPublish();
void testRetractItem();
void testSubscribe();
@@ -40,6 +47,8 @@ private slots:
void testSubscriptions();
void testIsPubSubIq_data();
void testIsPubSubIq();
+
+ void testCustomItem();
};
void tst_QXmppPubSubIq::testItems()
@@ -61,7 +70,7 @@ void tst_QXmppPubSubIq::testItems()
QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit"));
QCOMPARE(iq.from(), QLatin1String("francisco@denmark.lit/barracks"));
QCOMPARE(iq.type(), QXmppIq::Get);
- QCOMPARE(iq.queryType(), QXmppPubSubIq::ItemsQuery);
+ QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Items);
QCOMPARE(iq.queryJid(), QString());
QCOMPARE(iq.queryNode(), QLatin1String("storage:bookmarks"));
serializePacket(iq, xml);
@@ -71,7 +80,7 @@ void tst_QXmppPubSubIq::testItems()
iq.setTo(QLatin1String("pubsub.shakespeare.lit"));
iq.setFrom(QLatin1String("francisco@denmark.lit/barracks"));
iq.setType(QXmppIq::Get);
- iq.setQueryType(QXmppPubSubIq::ItemsQuery);
+ iq.setQueryType(QXmppPubSubIq<>::Items);
iq.setQueryJid({});
iq.setQueryNode(QLatin1String("storage:bookmarks"));
serializePacket(iq, xml);
@@ -87,17 +96,13 @@ void tst_QXmppPubSubIq::testItemsResponse()
" type=\"result\">"
"<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">"
"<items node=\"storage:bookmarks\">"
- "<item id=\"current\">"
- "<storage xmlns=\"storage:bookmarks\">"
- "<conference"
- " autojoin=\"true\""
- " jid=\"theplay@conference.shakespeare.lit\""
- " name=\"The Play&apos;s the Thing\">"
- "<nick>JC</nick>"
- "</conference>"
- "</storage>"
- "</item>"
+ "<item id=\"current\"/>"
"</items>"
+ "<set xmlns=\"http://jabber.org/protocol/rsm\">"
+ "<first index=\"0\">current</first>"
+ "<last>otheritemid</last>"
+ "<count>19</count>"
+ "</set>"
"</pubsub>"
"</iq>");
@@ -107,9 +112,74 @@ void tst_QXmppPubSubIq::testItemsResponse()
QCOMPARE(iq.to(), QLatin1String("francisco@denmark.lit/barracks"));
QCOMPARE(iq.from(), QLatin1String("pubsub.shakespeare.lit"));
QCOMPARE(iq.type(), QXmppIq::Result);
- QCOMPARE(iq.queryType(), QXmppPubSubIq::ItemsQuery);
+ QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Items);
QCOMPARE(iq.queryJid(), QString());
QCOMPARE(iq.queryNode(), QLatin1String("storage:bookmarks"));
+ QVERIFY(iq.itemsContinuation().has_value());
+ QCOMPARE(iq.itemsContinuation()->count(), 19);
+ QCOMPARE(iq.itemsContinuation()->index(), 0);
+ QCOMPARE(iq.itemsContinuation()->first(), QStringLiteral("current"));
+ QCOMPARE(iq.itemsContinuation()->last(), QStringLiteral("otheritemid"));
+ serializePacket(iq, xml);
+}
+
+void tst_QXmppPubSubIq::testCreateNode()
+{
+ const QByteArray xml(
+ "<iq id=\"create1\" to=\"pubsub.shakespeare.lit\" from=\"hamlet@denmark.lit/elsinore\" type=\"set\">"
+ "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">"
+ "<create node=\"princely_musings\"/>"
+ "</pubsub>"
+ "</iq>");
+
+ QXmppPubSubIq iq;
+ parsePacket(iq, xml);
+ QCOMPARE(iq.id(), QString("create1"));
+ QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit"));
+ QCOMPARE(iq.from(), QLatin1String("hamlet@denmark.lit/elsinore"));
+ QCOMPARE(iq.type(), QXmppIq::Set);
+ QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Create);
+ QCOMPARE(iq.queryJid(), QString());
+ QCOMPARE(iq.queryNode(), QLatin1String("princely_musings"));
+ serializePacket(iq, xml);
+
+ iq = QXmppPubSubIq();
+ iq.setId(QLatin1String("create1"));
+ iq.setTo(QLatin1String("pubsub.shakespeare.lit"));
+ iq.setFrom(QLatin1String("hamlet@denmark.lit/elsinore"));
+ iq.setType(QXmppIq::Set);
+ iq.setQueryType(QXmppPubSubIq<>::Create);
+ iq.setQueryNode(QLatin1String("princely_musings"));
+ serializePacket(iq, xml);
+}
+
+void tst_QXmppPubSubIq::testDeleteNode()
+{
+ const QByteArray xml(
+ "<iq id=\"delete1\" to=\"pubsub.shakespeare.lit\" from=\"hamlet@denmark.lit/elsinore\" type=\"set\">"
+ "<pubsub xmlns=\"http://jabber.org/protocol/pubsub#owner\">"
+ "<delete node=\"princely_musings\"/>"
+ "</pubsub>"
+ "</iq>");
+
+ QXmppPubSubIq iq;
+ parsePacket(iq, xml);
+ QCOMPARE(iq.id(), QString("delete1"));
+ QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit"));
+ QCOMPARE(iq.from(), QLatin1String("hamlet@denmark.lit/elsinore"));
+ QCOMPARE(iq.type(), QXmppIq::Set);
+ QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Delete);
+ QCOMPARE(iq.queryJid(), QString());
+ QCOMPARE(iq.queryNode(), QLatin1String("princely_musings"));
+ serializePacket(iq, xml);
+
+ iq = QXmppPubSubIq<>();
+ iq.setId(QLatin1String("delete1"));
+ iq.setTo(QLatin1String("pubsub.shakespeare.lit"));
+ iq.setFrom(QLatin1String("hamlet@denmark.lit/elsinore"));
+ iq.setType(QXmppIq::Set);
+ iq.setQueryType(QXmppPubSubIq<>::Delete);
+ iq.setQueryNode(QLatin1String("princely_musings"));
serializePacket(iq, xml);
}
@@ -123,63 +193,34 @@ void tst_QXmppPubSubIq::testPublish()
" type=\"result\">"
"<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">"
"<publish node=\"storage:bookmarks\">"
- "<item id=\"current\">"
- "<storage xmlns=\"storage:bookmarks\">"
- "<conference"
- " autojoin=\"true\""
- " jid=\"theplay@conference.shakespeare.lit\""
- " name=\"The Play&apos;s the Thing\">"
- "<nick>JC</nick>"
- "</conference>"
- "</storage>"
- "</item>"
+ "<item id=\"current\"/>"
"</publish>"
"</pubsub>"
"</iq>");
- QXmppPubSubIq iq;
+ QXmppPubSubIq<> iq;
parsePacket(iq, xml);
QCOMPARE(iq.id(), QLatin1String("items1"));
QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit"));
QCOMPARE(iq.from(), QLatin1String("francisco@denmark.lit/barracks"));
QCOMPARE(iq.type(), QXmppIq::Result);
- QCOMPARE(iq.queryType(), QXmppPubSubIq::PublishQuery);
+ QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Publish);
QCOMPARE(iq.queryJid(), QString());
QCOMPARE(iq.queryNode(), QLatin1String("storage:bookmarks"));
- QCOMPARE(iq.items().first().contents().tagName(), QLatin1String("storage"));
serializePacket(iq, xml);
// serialize using setters
-
- QXmppElement itemContentNick;
- itemContentNick.setTagName(QStringLiteral("nick"));
- itemContentNick.setValue(QStringLiteral("JC"));
-
- QXmppElement itemContentConference;
- itemContentConference.setTagName(QStringLiteral("conference"));
- itemContentConference.setAttribute(QStringLiteral("autojoin"), QStringLiteral("true"));
- itemContentConference.setAttribute(QStringLiteral("jid"), QStringLiteral("theplay@conference.shakespeare.lit"));
- itemContentConference.setAttribute(QStringLiteral("name"), QStringLiteral("The Play's the Thing"));
- itemContentConference.appendChild(itemContentNick);
-
- QXmppElement itemContent;
- itemContent.setTagName(QStringLiteral("storage"));
- itemContent.setAttribute(QStringLiteral("xmlns"), QStringLiteral("storage:bookmarks"));
- itemContent.appendChild(itemContentConference);
-
- QXmppPubSubItem item;
- item.setId(QStringLiteral("current"));
- item.setContents(itemContent);
+ QXmppPubSubItem item(QStringLiteral("current"));
iq = QXmppPubSubIq();
iq.setId(QLatin1String("items1"));
iq.setTo(QLatin1String("pubsub.shakespeare.lit"));
iq.setFrom(QLatin1String("francisco@denmark.lit/barracks"));
iq.setType(QXmppIq::Result);
- iq.setQueryType(QXmppPubSubIq::PublishQuery);
+ iq.setQueryType(QXmppPubSubIq<>::Publish);
iq.setQueryJid({});
iq.setQueryNode(QLatin1String("storage:bookmarks"));
- iq.setItems(QList<QXmppPubSubItem>() << item);
+ iq.setItems({ item });
serializePacket(iq, xml);
}
@@ -199,13 +240,13 @@ void tst_QXmppPubSubIq::testRetractItem()
"</pubsub>"
"</iq>");
- QXmppPubSubIq iq;
+ QXmppPubSubIq<> iq;
parsePacket(iq, xml);
QCOMPARE(iq.id(), QString("retract1"));
QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit"));
QCOMPARE(iq.from(), QLatin1String("hamlet@denmark.lit/elsinore"));
QCOMPARE(iq.type(), QXmppIq::Set);
- QCOMPARE(iq.queryType(), QXmppPubSubIq::RetractQuery);
+ QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Retract);
QCOMPARE(iq.queryJid(), QString());
QCOMPARE(iq.queryNode(), QLatin1String("princely_musings"));
QCOMPARE(iq.items().size(), 1);
@@ -217,13 +258,13 @@ void tst_QXmppPubSubIq::testRetractItem()
iq.setTo(QLatin1String("pubsub.shakespeare.lit"));
iq.setFrom(QLatin1String("hamlet@denmark.lit/elsinore"));
iq.setType(QXmppIq::Set);
- iq.setQueryType(QXmppPubSubIq::RetractQuery);
+ iq.setQueryType(QXmppPubSubIq<>::Retract);
iq.setQueryJid({});
iq.setQueryNode(QLatin1String("princely_musings"));
QXmppPubSubItem item;
item.setId(QStringLiteral("ae890ac52d0df67ed7cfdf51b644e901"));
- iq.setItems(QList<QXmppPubSubItem>() << item);
+ iq.setItems({ item });
serializePacket(iq, xml);
}
@@ -247,7 +288,7 @@ void tst_QXmppPubSubIq::testSubscribe()
QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit"));
QCOMPARE(iq.from(), QLatin1String("francisco@denmark.lit/barracks"));
QCOMPARE(iq.type(), QXmppIq::Set);
- QCOMPARE(iq.queryType(), QXmppPubSubIq::SubscribeQuery);
+ QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Subscribe);
QCOMPARE(iq.queryJid(), QLatin1String("francisco@denmark.lit"));
QCOMPARE(iq.queryNode(), QLatin1String("princely_musings"));
serializePacket(iq, xml);
@@ -270,25 +311,26 @@ void tst_QXmppPubSubIq::testSubscription()
QXmppPubSubIq iq;
parsePacket(iq, xml);
- QCOMPARE(iq.id(), QLatin1String("sub1"));
- QCOMPARE(iq.to(), QLatin1String("francisco@denmark.lit/barracks"));
- QCOMPARE(iq.from(), QLatin1String("pubsub.shakespeare.lit"));
+ QCOMPARE(iq.id(), QString("sub1"));
+ QCOMPARE(iq.to(), QString("francisco@denmark.lit/barracks"));
+ QCOMPARE(iq.from(), QString("pubsub.shakespeare.lit"));
QCOMPARE(iq.type(), QXmppIq::Result);
- QCOMPARE(iq.queryType(), QXmppPubSubIq::SubscriptionQuery);
- QCOMPARE(iq.queryJid(), QLatin1String("francisco@denmark.lit"));
- QCOMPARE(iq.queryNode(), QLatin1String("princely_musings"));
- QCOMPARE(iq.subscriptionId(), QLatin1String("ba49252aaa4f5d320c24d3766f0bdcade78c78d3"));
+ QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Subscription);
+ QCOMPARE(iq.subscription()->jid(), QString("francisco@denmark.lit"));
+ QCOMPARE(iq.subscription()->node(), QString("princely_musings"));
+ QCOMPARE(iq.subscription()->subId(), QStringLiteral("ba49252aaa4f5d320c24d3766f0bdcade78c78d3"));
serializePacket(iq, xml);
iq = QXmppPubSubIq();
- iq.setId(QLatin1String("sub1"));
- iq.setTo(QLatin1String("francisco@denmark.lit/barracks"));
- iq.setFrom(QLatin1String("pubsub.shakespeare.lit"));
+ iq.setId("sub1");
+ iq.setTo("francisco@denmark.lit/barracks");
+ iq.setFrom("pubsub.shakespeare.lit");
iq.setType(QXmppIq::Result);
- iq.setQueryType(QXmppPubSubIq::SubscriptionQuery);
- iq.setQueryJid(QLatin1String("francisco@denmark.lit"));
- iq.setQueryNode(QLatin1String("princely_musings"));
- iq.setSubscriptionId(QLatin1String("ba49252aaa4f5d320c24d3766f0bdcade78c78d3"));
+ iq.setQueryType(QXmppPubSubIq<>::Subscription);
+ iq.setSubscription(QXmppPubSubSubscription(
+ "francisco@denmark.lit",
+ "princely_musings",
+ "ba49252aaa4f5d320c24d3766f0bdcade78c78d3"));
serializePacket(iq, xml);
}
@@ -311,7 +353,7 @@ void tst_QXmppPubSubIq::testSubscriptions()
QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit"));
QCOMPARE(iq.from(), QLatin1String("francisco@denmark.lit/barracks"));
QCOMPARE(iq.type(), QXmppIq::Get);
- QCOMPARE(iq.queryType(), QXmppPubSubIq::SubscriptionsQuery);
+ QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Subscriptions);
QCOMPARE(iq.queryJid(), QString());
QCOMPARE(iq.queryNode(), QString());
serializePacket(iq, xml);
@@ -323,15 +365,23 @@ void tst_QXmppPubSubIq::testIsPubSubIq_data()
QTest::addColumn<bool>("isValid");
QTest::newRow("valid-pubsub-iq")
- << QByteArrayLiteral("<iq><pubsub xmlns=\"http://jabber.org/protocol/pubsub\"></pubsub></iq>")
+ << QByteArrayLiteral("<iq><pubsub xmlns=\"http://jabber.org/protocol/pubsub\"><items node=\"smth\"/></pubsub></iq>")
<< true;
+ QTest::newRow("items-missing-node-name")
+ << QByteArrayLiteral("<iq><pubsub xmlns=\"http://jabber.org/protocol/pubsub\"><items/></pubsub></iq>")
+ << false;
+
+ QTest::newRow("unknown-query-type")
+ << QByteArrayLiteral("<iq><pubsub xmlns=\"http://jabber.org/protocol/pubsub\"><shuffle/></pubsub></iq>")
+ << false;
+
QTest::newRow("wrong-element")
- << QByteArrayLiteral("<iq><pubsub2 xmlns=\"http://jabber.org/protocol/pubsub\"></pubsub2></iq>")
+ << QByteArrayLiteral("<iq><pubsub2 xmlns=\"http://jabber.org/protocol/pubsub\"><items node=\"smth\"/></pubsub2></iq>")
<< false;
QTest::newRow("wrong-namespace")
- << QByteArrayLiteral("<iq><pubsub xmlns=\"urn:xmpp:pubsub2:0\"></pubsub></iq>")
+ << QByteArrayLiteral("<iq><pubsub xmlns=\"urn:xmpp:pubsub2:0\"><items node=\"smth\"/></pubsub></iq>")
<< false;
}
@@ -344,7 +394,52 @@ void tst_QXmppPubSubIq::testIsPubSubIq()
QCOMPARE(doc.setContent(xml, true), true);
QDomElement element = doc.documentElement();
- QCOMPARE(QXmppPubSubIq::isPubSubIq(element), isValid);
+ QCOMPARE(QXmppPubSubIq<>::isPubSubIq(element), isValid);
+}
+
+void tst_QXmppPubSubIq::testCustomItem()
+{
+ const QByteArray xml(
+ "<iq id=\"a1\" type=\"result\">"
+ "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">"
+ "<items node=\"blah\">"
+ "<item id=\"42\"><test-payload/></item>"
+ "<item id=\"23\"><test-payload/></item>"
+ "</items>"
+ "</pubsub>"
+ "</iq>");
+
+ // test isPubSubIq also checks item validity
+ TestItem::isItemCalled = false;
+ QVERIFY(QXmppPubSubIq<TestItem>::isPubSubIq(xmlToDom(xml)));
+ QVERIFY(TestItem::isItemCalled);
+
+ QXmppPubSubIq<TestItem> iq;
+ parsePacket(iq, xml);
+ QCOMPARE(iq.type(), QXmppIq::Result);
+ QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Items);
+ QCOMPARE(iq.queryJid(), QString());
+ QCOMPARE(iq.queryNode(), QStringLiteral("blah"));
+ QCOMPARE(iq.items().size(), 2);
+ QCOMPARE(iq.items().at(0).id(), QStringLiteral("42"));
+ QCOMPARE(iq.items().at(1).id(), QStringLiteral("23"));
+ QCOMPARE(iq.items().at(0).publisher(), QString());
+ QCOMPARE(iq.items().at(1).publisher(), QString());
+
+ QVERIFY(iq.items().at(0).parseCalled);
+ QVERIFY(iq.items().at(1).parseCalled);
+ QVERIFY(!iq.items().at(0).serializeCalled);
+ QVERIFY(!iq.items().at(1).serializeCalled);
+
+ serializePacket(iq, xml);
+
+ iq = QXmppPubSubIq<TestItem>();
+ iq.setId("a1");
+ iq.setType(QXmppIq::Result);
+ iq.setQueryType(QXmppPubSubIq<>::Items);
+ iq.setQueryNode("blah");
+ iq.setItems({ TestItem("42"), TestItem("23") });
+ serializePacket(iq, xml);
}
QTEST_MAIN(tst_QXmppPubSubIq)