aboutsummaryrefslogtreecommitdiff
path: root/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp
diff options
context:
space:
mode:
authorBlue <blue@macaw.me>2020-03-27 15:17:42 +0300
committerGitHub <noreply@github.com>2020-03-27 13:17:42 +0100
commit7d128f179487a68ba975275996b8efadbd143721 (patch)
tree7fb539b58157ec76b80ad14c8626dc77f4ffe400 /tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp
parent0b616178800ccb4e5d344cd66b8f1ab9f5d3b698 (diff)
downloadqxmpp-7d128f179487a68ba975275996b8efadbd143721.tar.gz
QXmppMessageReceiptManager: Fix receipts are sent on error messages (#269)
This fixes that behaviour and extends the tests for QXmppMessageReceiptManager.
Diffstat (limited to 'tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp')
-rw-r--r--tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp85
1 files changed, 82 insertions, 3 deletions
diff --git a/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp b/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp
index 750628dc..0aff489c 100644
--- a/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp
+++ b/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp
@@ -41,15 +41,32 @@ private slots:
{
m_messageDelivered = true;
}
+ void onLoggerMessage(QXmppLogger::MessageType type, const QString& text)
+ {
+ m_receiptSent = true;
+ }
private:
- QXmppMessageReceiptManager m_manager;
+ QXmppMessageReceiptManager* m_manager;
+ QXmppClient m_client;
+ QXmppLogger* m_logger;
bool m_messageDelivered = false;
+ bool m_receiptSent = false;
};
void tst_QXmppMessageReceiptManager::initTestCase()
{
- connect(&m_manager, &QXmppMessageReceiptManager::messageDelivered,
+ m_manager = new QXmppMessageReceiptManager();
+ m_logger = new QXmppLogger();
+
+ m_client.addExtension(m_manager);
+ m_logger->setLoggingType(QXmppLogger::SignalLogging);
+ m_client.setLogger(m_logger);
+
+ connect(m_logger, &QXmppLogger::message,
+ this, &tst_QXmppMessageReceiptManager::onLoggerMessage);
+
+ connect(m_manager, &QXmppMessageReceiptManager::messageDelivered,
this, &tst_QXmppMessageReceiptManager::handleMessageDelivered);
}
@@ -57,6 +74,8 @@ void tst_QXmppMessageReceiptManager::testReceipt_data()
{
QTest::addColumn<QByteArray>("xml");
QTest::addColumn<bool>("accept");
+ QTest::addColumn<bool>("sent");
+ QTest::addColumn<bool>("handled");
QTest::newRow("correct")
<< QByteArray(
@@ -66,6 +85,8 @@ void tst_QXmppMessageReceiptManager::testReceipt_data()
"type=\"normal\">"
"<received xmlns=\"urn:xmpp:receipts\" id=\"richard2-4.1.247\"/>"
"</message>")
+ << true
+ << false
<< true;
QTest::newRow("from-to-equal")
<< QByteArray(
@@ -75,22 +96,80 @@ void tst_QXmppMessageReceiptManager::testReceipt_data()
"type=\"normal\">"
"<received xmlns=\"urn:xmpp:receipts\" id=\"richard2-4.1.247\"/>"
"</message>")
+ << false
+ << false
+ << true;
+ QTest::newRow("error")
+ << QByteArray(
+ "<message xml:lang=\"en\" "
+ "to=\"northumberland@shakespeare.lit/westminster\" "
+ "from=\"kingrichard@royalty.england.lit/throne\" "
+ "type=\"error\" id=\"bi29sg183b4v\" "
+ "> "
+ "<archived xmlns=\"urn:xmpp:mam:tmp\" by=\"kingrichard@royalty.england.lit\" id=\"1585254642941569\"/> "
+ "<stanza-id xmlns=\"urn:xmpp:sid:0\" by=\"kingrichard@royalty.england.lit\" id=\"1585254642941569\"/> "
+ "<delay xmlns=\"urn:xmpp:delay\" stamp=\"2020-03-26T20:30:41.678Z\"/> "
+ "<request xmlns=\"urn:xmpp:receipts\"/> "
+ "<error code=\"500\" type=\"wait\"> "
+ "<resource-constraint xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"/> "
+ "<text xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\" xml:lang=\"en\">"
+ "Your contact offline message queue is full. The message has been discarded."
+ "</text>"
+ "</error>"
+ "<body>1</body> "
+ "</message>")
+ << false
+ << false
+ << false;
+ QTest::newRow("message with receipt request")
+ << QByteArray(
+ "<message xml:lang=\"en\" "
+ "to=\"northumberland@shakespeare.lit/westminster\" "
+ "from=\"kingrichard@royalty.england.lit/throne\" "
+ "type=\"chat\" id=\"bi29sg183b4v\" "
+ "> "
+ "<archived xmlns=\"urn:xmpp:mam:tmp\" by=\"kingrichard@royalty.england.lit\" id=\"1585254642941569\"/> "
+ "<stanza-id xmlns=\"urn:xmpp:sid:0\" by=\"kingrichard@royalty.england.lit\" id=\"1585254642941569\"/> "
+ "<request xmlns=\"urn:xmpp:receipts\"/> "
+ "<body>1</body> "
+ "</message>")
+ << false
+ << true
+ << false;
+
+ QTest::newRow("message with no receipt request")
+ << QByteArray(
+ "<message xml:lang=\"en\" "
+ "to=\"northumberland@shakespeare.lit/westminster\" "
+ "from=\"kingrichard@royalty.england.lit/throne\" "
+ "type=\"chat\" id=\"bi29sg183b4v\" "
+ "> "
+ "<archived xmlns=\"urn:xmpp:mam:tmp\" by=\"kingrichard@royalty.england.lit\" id=\"1585254642941569\"/> "
+ "<stanza-id xmlns=\"urn:xmpp:sid:0\" by=\"kingrichard@royalty.england.lit\" id=\"1585254642941569\"/> "
+ "<body>1</body> "
+ "</message>")
+ << false
+ << false
<< false;
}
void tst_QXmppMessageReceiptManager::testReceipt()
{
m_messageDelivered = false;
+ m_receiptSent = false;
QFETCH(QByteArray, xml);
QFETCH(bool, accept);
+ QFETCH(bool, sent);
+ QFETCH(bool, handled);
QDomDocument doc;
QCOMPARE(doc.setContent(xml, true), true);
QDomElement element = doc.documentElement();
- QVERIFY(m_manager.handleStanza(element));
+ QCOMPARE(m_manager->handleStanza(element), handled);
QCOMPARE(m_messageDelivered, accept);
+ QCOMPARE(m_receiptSent, sent);
}
QTEST_MAIN(tst_QXmppMessageReceiptManager)