diff options
| author | Linus Jahn <lnj@kaidan.im> | 2021-08-01 16:56:54 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-08-22 16:09:02 +0200 |
| commit | ef23bc8d63726b5702b02a7a3292531c77c5ac61 (patch) | |
| tree | 114957d86bff1bf53ca240f0a2596ddc20c0fbe8 /tests | |
| parent | 6ad415b8a4ff4130c14a485e5918af54a3b9afa9 (diff) | |
| download | qxmpp-ef23bc8d63726b5702b02a7a3292531c77c5ac61.tar.gz | |
tests: Add tests for QXmppPubSubSubscriptions
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/qxmpppubsub/tst_qxmpppubsub.cpp | 105 |
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" |
