Skip to content
This repository was archived by the owner on Mar 20, 2025. It is now read-only.

Commit e0d4fba

Browse files
committed
MixManager: Fix behavior for updating node subscriptions
If no nodes were specified to be unsubscribed from for updateSubscriptions(), all enums were added to be unsubscribed from. That resulted in the same nodes being specified to be subcribed to and to be unsubscribed from.
1 parent d8003b8 commit e0d4fba

File tree

2 files changed

+76
-3
lines changed

2 files changed

+76
-3
lines changed

src/client/QXmppMixManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class QXMPP_EXPORT QXmppMixManager : public QXmppClientExtension, public QXmppPu
9898
QXmppTask<JoiningResult> joinChannel(const QXmppMixInvitation &invitation, const QString &nickname = {}, QXmppMixConfigItem::Nodes nodes = ~QXmppMixConfigItem::Nodes());
9999

100100
QXmppTask<NicknameResult> updateNickname(const QString &channelJid, const QString &nickname);
101-
QXmppTask<SubscriptionResult> updateSubscriptions(const QString &channelJid, QXmppMixConfigItem::Nodes subscriptionAdditions = ~QXmppMixConfigItem::Nodes(), QXmppMixConfigItem::Nodes subscriptionRemovals = ~QXmppMixConfigItem::Nodes());
101+
QXmppTask<SubscriptionResult> updateSubscriptions(const QString &channelJid, QXmppMixConfigItem::Nodes subscriptionAdditions = ~QXmppMixConfigItem::Nodes(), QXmppMixConfigItem::Nodes subscriptionRemovals = {});
102102

103103
QXmppTask<InvitationResult> requestInvitation(const QString &channelJid, const QString &inviteeJid);
104104

tests/qxmppmixmanager/tst_qxmppmixmanager.cpp

Lines changed: 75 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,11 +1163,84 @@ void tst_QXmppMixManager::testUpdateSubscriptions()
11631163
auto &client = tester.client;
11641164
auto manager = tester.manager;
11651165

1166+
auto defaultParametersCall = [&client, manager]() {
1167+
return manager->updateSubscriptions(QStringLiteral("[email protected]"));
1168+
};
1169+
1170+
auto task = defaultParametersCall();
1171+
1172+
client.expect(QStringLiteral("<iq id='qxmpp1' to='[email protected]' type='set'>"
1173+
"<update-subscription xmlns='urn:xmpp:mix:core:1'>"
1174+
"<subscribe node='urn:xmpp:mix:nodes:allowed'/>"
1175+
"<subscribe node='urn:xmpp:avatar:data'/>"
1176+
"<subscribe node='urn:xmpp:avatar:metadata'/>"
1177+
"<subscribe node='urn:xmpp:mix:nodes:banned'/>"
1178+
"<subscribe node='urn:xmpp:mix:nodes:config'/>"
1179+
"<subscribe node='urn:xmpp:mix:nodes:info'/>"
1180+
"<subscribe node='urn:xmpp:mix:nodes:jidmap'/>"
1181+
"<subscribe node='urn:xmpp:mix:nodes:messages'/>"
1182+
"<subscribe node='urn:xmpp:mix:nodes:participants'/>"
1183+
"<subscribe node='urn:xmpp:mix:nodes:presence'/>"
1184+
"</update-subscription>"
1185+
"</iq>"));
1186+
client.inject(QStringLiteral("<iq id='qxmpp1' from='[email protected]' type='result'>"
1187+
"<update-subscription xmlns='urn:xmpp:mix:core:1'>"
1188+
"<subscribe node='urn:xmpp:mix:nodes:allowed'/>"
1189+
"<subscribe node='urn:xmpp:avatar:data'/>"
1190+
"<subscribe node='urn:xmpp:avatar:metadata'/>"
1191+
"<subscribe node='urn:xmpp:mix:nodes:banned'/>"
1192+
"<subscribe node='urn:xmpp:mix:nodes:config'/>"
1193+
"<subscribe node='urn:xmpp:mix:nodes:info'/>"
1194+
"<subscribe node='urn:xmpp:mix:nodes:jidmap'/>"
1195+
"<subscribe node='urn:xmpp:mix:nodes:messages'/>"
1196+
"<subscribe node='urn:xmpp:mix:nodes:participants'/>"
1197+
"<subscribe node='urn:xmpp:mix:nodes:presence'/>"
1198+
"</update-subscription>"
1199+
"</iq>"));
1200+
1201+
auto subscription = expectFutureVariant<QXmppMixManager::Subscription>(task);
1202+
QVERIFY(subscription.additions.testFlag(QXmppMixConfigItem::Node::AllowedJids));
1203+
QVERIFY(subscription.additions.testFlag(QXmppMixConfigItem::Node::AvatarData));
1204+
QVERIFY(subscription.additions.testFlag(QXmppMixConfigItem::Node::AvatarMetadata));
1205+
QVERIFY(subscription.additions.testFlag(QXmppMixConfigItem::Node::BannedJids));
1206+
QVERIFY(subscription.additions.testFlag(QXmppMixConfigItem::Node::Configuration));
1207+
QVERIFY(subscription.additions.testFlag(QXmppMixConfigItem::Node::Information));
1208+
QVERIFY(subscription.additions.testFlag(QXmppMixConfigItem::Node::JidMap));
1209+
QVERIFY(subscription.additions.testFlag(QXmppMixConfigItem::Node::Messages));
1210+
QVERIFY(subscription.additions.testFlag(QXmppMixConfigItem::Node::Participants));
1211+
QVERIFY(subscription.additions.testFlag(QXmppMixConfigItem::Node::Presence));
1212+
// "QCOMPARE(subscription.additions, ~QXmppMixConfigItem::Nodes());" does not work.
1213+
QCOMPARE(subscription.additions, QXmppMixConfigItem::Node::AllowedJids | QXmppMixConfigItem::Node::AvatarData | QXmppMixConfigItem::Node::AvatarMetadata | QXmppMixConfigItem::Node::BannedJids | QXmppMixConfigItem::Node::Configuration | QXmppMixConfigItem::Node::Information | QXmppMixConfigItem::Node::JidMap | QXmppMixConfigItem::Node::Messages | QXmppMixConfigItem::Node::Participants | QXmppMixConfigItem::Node::Presence);
1214+
QCOMPARE(subscription.removals, QXmppMixConfigItem::Nodes());
1215+
1216+
auto defaultRemovalParameterCall = [&client, manager]() {
1217+
return manager->updateSubscriptions(QStringLiteral("[email protected]"), QXmppMixConfigItem::Node::AllowedJids | QXmppMixConfigItem::Node::BannedJids);
1218+
};
1219+
1220+
task = defaultRemovalParameterCall();
1221+
1222+
client.expect(QStringLiteral("<iq id='qxmpp1' to='[email protected]' type='set'>"
1223+
"<update-subscription xmlns='urn:xmpp:mix:core:1'>"
1224+
"<subscribe node='urn:xmpp:mix:nodes:allowed'/>"
1225+
"<subscribe node='urn:xmpp:mix:nodes:banned'/>"
1226+
"</update-subscription>"
1227+
"</iq>"));
1228+
client.inject(QStringLiteral("<iq id='qxmpp1' from='[email protected]' type='result'>"
1229+
"<update-subscription xmlns='urn:xmpp:mix:core:1'>"
1230+
"<subscribe node='urn:xmpp:mix:nodes:allowed'/>"
1231+
"<subscribe node='urn:xmpp:mix:nodes:banned'/>"
1232+
"</update-subscription>"
1233+
"</iq>"));
1234+
1235+
subscription = expectFutureVariant<QXmppMixManager::Subscription>(task);
1236+
QCOMPARE(subscription.additions, QXmppMixConfigItem::Node::AllowedJids | QXmppMixConfigItem::Node::BannedJids);
1237+
QCOMPARE(subscription.removals, QXmppMixConfigItem::Nodes());
1238+
11661239
auto call = [&client, manager]() {
11671240
return manager->updateSubscriptions(QStringLiteral("[email protected]"), QXmppMixConfigItem::Node::Messages | QXmppMixConfigItem::Node::Presence, QXmppMixConfigItem::Node::Configuration | QXmppMixConfigItem::Node::Information);
11681241
};
11691242

1170-
auto task = call();
1243+
task = call();
11711244

11721245
client.expect(QStringLiteral("<iq id='qxmpp1' to='[email protected]' type='set'>"
11731246
"<update-subscription xmlns='urn:xmpp:mix:core:1'>"
@@ -1186,7 +1259,7 @@ void tst_QXmppMixManager::testUpdateSubscriptions()
11861259
"</update-subscription>"
11871260
"</iq>"));
11881261

1189-
auto subscription = expectFutureVariant<QXmppMixManager::Subscription>(task);
1262+
subscription = expectFutureVariant<QXmppMixManager::Subscription>(task);
11901263
QCOMPARE(subscription.additions, QXmppMixConfigItem::Node::Messages | QXmppMixConfigItem::Node::Presence);
11911264
QCOMPARE(subscription.removals, QXmppMixConfigItem::Node::Configuration | QXmppMixConfigItem::Node::Information);
11921265

0 commit comments

Comments
 (0)