From 8efc8ea6aef64455bca04b11c3c4b0e20b532484 Mon Sep 17 00:00:00 2001 From: Melvin Keskin Date: Mon, 8 Mar 2021 20:11:22 +0100 Subject: Implement MIX-MISC XEP-0407: Invitation message extension (#329) This implements the message extension for MIX invitations from XEP-0407: Mediated Information eXchange (MIX): Miscellaneous Capabilities in version 0.1.2. https://xmpp.org/extensions/xep-0407.html#usecase-user-invite --- tests/CMakeLists.txt | 1 + tests/qxmppmessage/tst_qxmppmessage.cpp | 25 +++++ .../qxmppmixinvitation/tst_qxmppmixinvitation.cpp | 110 +++++++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 tests/qxmppmixinvitation/tst_qxmppmixinvitation.cpp (limited to 'tests') diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 313d16bc..a7d50ce0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -29,6 +29,7 @@ add_simple_test(qxmppiceconnection) add_simple_test(qxmppiq) add_simple_test(qxmppjingleiq) add_simple_test(qxmppmammanager) +add_simple_test(qxmppmixinvitation) add_simple_test(qxmppmixitem) add_simple_test(qxmppmessage) add_simple_test(qxmppmessagereceiptmanager) diff --git a/tests/qxmppmessage/tst_qxmppmessage.cpp b/tests/qxmppmessage/tst_qxmppmessage.cpp index b1558dc9..5e75a116 100644 --- a/tests/qxmppmessage/tst_qxmppmessage.cpp +++ b/tests/qxmppmessage/tst_qxmppmessage.cpp @@ -25,6 +25,9 @@ #include "QXmppBitsOfBinaryContentId.h" #include "QXmppBitsOfBinaryDataList.h" #include "QXmppMessage.h" +#include "QXmppMixInvitation.h" + +#include #include "util.h" #include @@ -63,6 +66,7 @@ private slots: void testStanzaIds(); void testSlashMe_data(); void testSlashMe(); + void testMixInvitation(); }; void tst_QXmppMessage::testBasic_data() @@ -1076,5 +1080,26 @@ void tst_QXmppMessage::testSlashMe() QCOMPARE(msg.slashMeCommandText(), actionText); } +void tst_QXmppMessage::testMixInvitation() +{ + const QByteArray xml( + "" + "Would you like to join the coven?" + "" + "hag66@shakespeare.example" + "cat@shakespeare.example" + "coven@mix.shakespeare.example" + "ABCDEF" + "" + ""); + + QXmppMessage message; + parsePacket(message, xml); + + QVERIFY(message.mixInvitation()); + + serializePacket(message, xml); +} + QTEST_MAIN(tst_QXmppMessage) #include "tst_qxmppmessage.moc" diff --git a/tests/qxmppmixinvitation/tst_qxmppmixinvitation.cpp b/tests/qxmppmixinvitation/tst_qxmppmixinvitation.cpp new file mode 100644 index 00000000..f7ca98b4 --- /dev/null +++ b/tests/qxmppmixinvitation/tst_qxmppmixinvitation.cpp @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2008-2021 The QXmpp developers + * + * Author: + * Melvin Keskin + * + * Source: + * https://github.com/qxmpp-project/qxmpp + * + * This file is a part of QXmpp library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + */ + +#include "QXmppMixInvitation.h" + +#include "util.h" +#include +#include + +class tst_QXmppMixInvitation : public QObject +{ + Q_OBJECT + +private slots: + void testInvitation(); + void testIsInvitation(); +}; + +void tst_QXmppMixInvitation::testInvitation() +{ + const QByteArray xml( + "" + "hag66@shakespeare.example" + "cat@shakespeare.example" + "coven@mix.shakespeare.example" + "ABCDEF" + ""); + + QXmppMixInvitation invitation; + parsePacket(invitation, xml); + + QCOMPARE(invitation.inviterJid(), QStringLiteral("hag66@shakespeare.example")); + QCOMPARE(invitation.inviteeJid(), QStringLiteral("cat@shakespeare.example")); + QCOMPARE(invitation.channelJid(), QStringLiteral("coven@mix.shakespeare.example")); + QCOMPARE(invitation.token(), QStringLiteral("ABCDEF")); + + serializePacket(invitation, xml); + + invitation.setInviterJid("hag66@shakespeare.example"); + invitation.setInviteeJid("cat@shakespeare.example"); + invitation.setChannelJid("coven@mix.shakespeare.example"); + invitation.setToken("ABCDEF"); + + QCOMPARE(invitation.inviterJid(), QStringLiteral("hag66@shakespeare.example")); + QCOMPARE(invitation.inviteeJid(), QStringLiteral("cat@shakespeare.example")); + QCOMPARE(invitation.channelJid(), QStringLiteral("coven@mix.shakespeare.example")); + QCOMPARE(invitation.token(), QStringLiteral("ABCDEF")); +} + +void tst_QXmppMixInvitation::testIsInvitation() +{ + QDomDocument doc; + QDomElement element; + + const QByteArray correctInvitationWithNamespace( + "" + "hag66@shakespeare.example" + "cat@shakespeare.example" + "coven@mix.shakespeare.example" + "ABCDEF" + ""); + QCOMPARE(doc.setContent(correctInvitationWithNamespace, true), true); + element = doc.documentElement(); + QVERIFY(QXmppMixInvitation::isMixInvitation(element)); + + const QByteArray invitationWithoutNamespace( + "" + "hag66@shakespeare.example" + "cat@shakespeare.example" + "coven@mix.shakespeare.example" + "ABCDEF" + ""); + QCOMPARE(doc.setContent(invitationWithoutNamespace, true), true); + element = doc.documentElement(); + QVERIFY(!QXmppMixInvitation::isMixInvitation(element)); + + const QByteArray invitationWithIncorrectNamespace( + "" + "hag66@shakespeare.example" + "cat@shakespeare.example" + "coven@mix.shakespeare.example" + "ABCDEF" + ""); + QCOMPARE(doc.setContent(invitationWithIncorrectNamespace, true), true); + element = doc.documentElement(); + QVERIFY(!QXmppMixInvitation::isMixInvitation(element)); +} + +QTEST_MAIN(tst_QXmppMixInvitation) +#include "tst_qxmppmixinvitation.moc" -- cgit v1.2.3