aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2021-08-01 16:56:54 +0200
committerLinus Jahn <lnj@kaidan.im>2021-08-22 16:09:02 +0200
commitef23bc8d63726b5702b02a7a3292531c77c5ac61 (patch)
tree114957d86bff1bf53ca240f0a2596ddc20c0fbe8 /tests
parent6ad415b8a4ff4130c14a485e5918af54a3b9afa9 (diff)
downloadqxmpp-ef23bc8d63726b5702b02a7a3292531c77c5ac61.tar.gz
tests: Add tests for QXmppPubSubSubscriptions
Diffstat (limited to 'tests')
-rw-r--r--tests/qxmpppubsub/tst_qxmpppubsub.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/tests/qxmpppubsub/tst_qxmpppubsub.cpp b/tests/qxmpppubsub/tst_qxmpppubsub.cpp
index b8a06017..dc5337a8 100644
--- a/tests/qxmpppubsub/tst_qxmpppubsub.cpp
+++ b/tests/qxmpppubsub/tst_qxmpppubsub.cpp
@@ -22,12 +22,41 @@
*/
#include "QXmppPubSubAffiliation.h"
+#include "QXmppPubSubSubscription.h"
#include "util.h"
#include <QObject>
using Affiliation = QXmppPubSubAffiliation;
using AffiliationType = QXmppPubSubAffiliation::Affiliation;
+using Subscription = QXmppPubSubSubscription;
+using SubscriptionConfig = QXmppPubSubSubscription::ConfigurationSupport;
+using SubscriptionState = QXmppPubSubSubscription::State;
+
+enum PubSubNamespace {
+ PubSubNs,
+ PubSubEventNs,
+ PubSubOwnerNs,
+};
+Q_DECLARE_METATYPE(PubSubNamespace)
+
+template<typename T>
+void parsePacket(T &packet, const QByteArray &xml, PubSubNamespace xmlns)
+{
+ QByteArray newXml;
+ switch (xmlns) {
+ case PubSubNs:
+ newXml = "<outer xmlns='http://jabber.org/protocol/pubsub'>" + xml + "</outer>";
+ break;
+ case PubSubEventNs:
+ newXml = "<outer xmlns='http://jabber.org/protocol/pubsub#event'>" + xml + "</outer>";
+ break;
+ case PubSubOwnerNs:
+ newXml = "<outer xmlns='http://jabber.org/protocol/pubsub#owner'>" + xml + "</outer>";
+ break;
+ }
+ packet.parse(xmlToDom(newXml).firstChildElement());
+}
class tst_QXmppPubSub : public QObject
{
@@ -38,6 +67,8 @@ private:
Q_SLOT void testAffiliation();
Q_SLOT void testIsAffiliation_data();
Q_SLOT void testIsAffiliation();
+ Q_SLOT void testSubscription_data();
+ Q_SLOT void testSubscription();
};
void tst_QXmppPubSub::testAffiliation_data()
@@ -117,5 +148,79 @@ void tst_QXmppPubSub::testIsAffiliation()
QCOMPARE(Affiliation::isAffiliation(dom), accepted);
}
+void tst_QXmppPubSub::testSubscription_data()
+{
+ QTest::addColumn<QByteArray>("xml");
+ QTest::addColumn<PubSubNamespace>("pubSubNs");
+ QTest::addColumn<SubscriptionState>("state");
+ QTest::addColumn<QString>("jid");
+ QTest::addColumn<QString>("node");
+ QTest::addColumn<QString>("subid");
+ QTest::addColumn<SubscriptionConfig>("configSupport");
+
+#define ROW(name, xmlns, xml, state, jid, node, subid, configSupport) \
+ QTest::newRow(name) << QByteArrayLiteral(xml) << xmlns << state << jid << node << subid << configSupport
+
+ ROW("subscribed", PubSubNs, "<subscription jid='francisco@denmark.lit' node='node1' subscription='subscribed'/>", SubscriptionState::Subscribed, QString("francisco@denmark.lit"), QString("node1"), QString(), SubscriptionConfig::Unavailable);
+ ROW("unconfigured", PubSubNs, "<subscription jid='francisco@denmark.lit' node='node5' subscription='unconfigured'/>", SubscriptionState::Unconfigured, QString("francisco@denmark.lit"), QString("node5"), QString(), SubscriptionConfig::Unavailable);
+ ROW("subscribed-subid", PubSubNs, "<subscription jid='francisco@denmark.lit' node='node6' subscription='subscribed' subid='123-abc'/>", SubscriptionState::Subscribed, QString("francisco@denmark.lit"), QString("node6"), QString("123-abc"), SubscriptionConfig::Unavailable);
+ ROW("pending", PubSubNs, "<subscription jid='francisco@denmark.lit' node='princely_musings' subscription='pending'/>", SubscriptionState::Pending, QString("francisco@denmark.lit"), QString("princely_musings"), QString(), SubscriptionConfig::Unavailable);
+ ROW("config-required", PubSubNs, "<subscription jid='francisco@denmark.lit' node='princely_musings' subscription='unconfigured'><subscribe-options><required/></subscribe-options></subscription>", SubscriptionState::Unconfigured, QString("francisco@denmark.lit"), QString("princely_musings"), QString(), SubscriptionConfig::Required);
+ ROW("config-available", PubSubNs, "<subscription jid='francisco@denmark.lit' node='princely_musings' subscription='unconfigured'><subscribe-options/></subscription>", SubscriptionState::Unconfigured, QString("francisco@denmark.lit"), QString("princely_musings"), QString(), SubscriptionConfig::Available);
+
+#undef ROW
+}
+
+void tst_QXmppPubSub::testSubscription()
+{
+ QFETCH(QByteArray, xml);
+ QFETCH(PubSubNamespace, pubSubNs);
+ QFETCH(SubscriptionState, state);
+ QFETCH(QString, jid);
+ QFETCH(QString, node);
+ QFETCH(QString, subid);
+ QFETCH(SubscriptionConfig, configSupport);
+
+ QXmppPubSubSubscription sub;
+ parsePacket(sub, xml, pubSubNs);
+ serializePacket(sub, xml);
+ QCOMPARE(sub.state(), state);
+ QCOMPARE(sub.jid(), jid);
+ QCOMPARE(sub.node(), node);
+ QCOMPARE(sub.subId(), subid);
+ QCOMPARE(sub.configurationSupport(), configSupport);
+
+ switch (configSupport) {
+ case SubscriptionConfig::Unavailable:
+ if (state == SubscriptionState::Unconfigured) {
+ QVERIFY(sub.isConfigurationRequired());
+ } else {
+ QVERIFY(!sub.isConfigurationRequired());
+ }
+ QVERIFY(!sub.isConfigurationSupported());
+ break;
+ case SubscriptionConfig::Available:
+ if (state == SubscriptionState::Unconfigured) {
+ QVERIFY(sub.isConfigurationRequired());
+ } else {
+ QVERIFY(!sub.isConfigurationRequired());
+ }
+ QVERIFY(sub.isConfigurationSupported());
+ break;
+ case SubscriptionConfig::Required:
+ QVERIFY(sub.isConfigurationRequired());
+ QVERIFY(sub.isConfigurationSupported());
+ break;
+ }
+
+ sub = {};
+ sub.setState(state);
+ sub.setJid(jid);
+ sub.setNode(node);
+ sub.setSubId(subid);
+ sub.setConfigurationSupport(configSupport);
+ serializePacket(sub, xml);
+}
+
QTEST_MAIN(tst_QXmppPubSub)
#include "tst_qxmpppubsub.moc"