summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2015-09-14 15:08:39 (GMT)
committerKevin Smith <kevin.smith@isode.com>2015-10-16 14:58:03 (GMT)
commit9e6ee0f262e7dc663f4c706b16a346a268f425aa (patch)
tree5926fd9cc9dec1233f95239b259a7730f99a5a72 /Swift/Controllers/Chat/UnitTest
parent8da6e35afab55d7232d47575faea2bde7cd44ece (diff)
downloadswift-9e6ee0f262e7dc663f4c706b16a346a268f425aa.zip
swift-9e6ee0f262e7dc663f4c706b16a346a268f425aa.tar.bz2
Mark removed contacts as unavailable in Swift
When removing a contact, a XMPP client will not receive an explicit unavailable presence stanza for the contact from the server. Because of that Swift used to show removed contacts still with their old presence in the Chats tab or the chat view. With this patch, the PresenceOracle will flush all known presence of a contact as soon as the JID is removed from the roster. An unavailable presence will stored under the removed bare JID and is emitted via the PresenceOracle::onPresenceChange signal. Test-Information: Added a unit test verifying this behavior. Tested the behavior with two scenarios: a) Account A and B adding each other and accepting the subscription request. Starting a chat between A and B. After removing B in A's account, B used to be shown as available in the chat view and the Chats tab. With this patch B is shown as unavailable. b) Account A and B adding each other and accepting the subscription request. A removing B, and B removing A. After A adds B again, B used to be shown with the old presence even before B accepted the subscription request. This behavior is also fixed with this patch, not showing B as online until B accepted the subscription request. Change-Id: Iba97d3bedd0ac962ea00b25a0d2ed6106ed55a55
Diffstat (limited to 'Swift/Controllers/Chat/UnitTest')
-rw-r--r--Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp2
-rw-r--r--Swift/Controllers/Chat/UnitTest/MUCControllerTest.cpp6
2 files changed, 6 insertions, 2 deletions
diff --git a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp
index 487f0f9..f276e92 100644
--- a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp
+++ b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp
@@ -87,11 +87,11 @@ public:
87 chatWindowFactory_ = mocks_->InterfaceMock<ChatWindowFactory>(); 87 chatWindowFactory_ = mocks_->InterfaceMock<ChatWindowFactory>();
88 joinMUCWindowFactory_ = mocks_->InterfaceMock<JoinMUCWindowFactory>(); 88 joinMUCWindowFactory_ = mocks_->InterfaceMock<JoinMUCWindowFactory>();
89 xmppRoster_ = new XMPPRosterImpl(); 89 xmppRoster_ = new XMPPRosterImpl();
90 mucRegistry_ = new MUCRegistry(); 90 mucRegistry_ = new MUCRegistry();
91 nickResolver_ = new NickResolver(jid_.toBare(), xmppRoster_, NULL, mucRegistry_); 91 nickResolver_ = new NickResolver(jid_.toBare(), xmppRoster_, NULL, mucRegistry_);
92 presenceOracle_ = new PresenceOracle(stanzaChannel_); 92 presenceOracle_ = new PresenceOracle(stanzaChannel_, xmppRoster_);
93 serverDiscoInfo_ = boost::make_shared<DiscoInfo>(); 93 serverDiscoInfo_ = boost::make_shared<DiscoInfo>();
94 presenceSender_ = new StanzaChannelPresenceSender(stanzaChannel_); 94 presenceSender_ = new StanzaChannelPresenceSender(stanzaChannel_);
95 directedPresenceSender_ = new DirectedPresenceSender(presenceSender_); 95 directedPresenceSender_ = new DirectedPresenceSender(presenceSender_);
96 mucManager_ = new MUCManager(stanzaChannel_, iqRouter_, directedPresenceSender_, mucRegistry_); 96 mucManager_ = new MUCManager(stanzaChannel_, iqRouter_, directedPresenceSender_, mucRegistry_);
97 uiEventStream_ = new UIEventStream(); 97 uiEventStream_ = new UIEventStream();
diff --git a/Swift/Controllers/Chat/UnitTest/MUCControllerTest.cpp b/Swift/Controllers/Chat/UnitTest/MUCControllerTest.cpp
index cc4045a..bc6ada2 100644
--- a/Swift/Controllers/Chat/UnitTest/MUCControllerTest.cpp
+++ b/Swift/Controllers/Chat/UnitTest/MUCControllerTest.cpp
@@ -25,10 +25,11 @@
25#include <Swiften/Presence/DirectedPresenceSender.h> 25#include <Swiften/Presence/DirectedPresenceSender.h>
26#include <Swiften/Presence/PresenceOracle.h> 26#include <Swiften/Presence/PresenceOracle.h>
27#include <Swiften/Presence/StanzaChannelPresenceSender.h> 27#include <Swiften/Presence/StanzaChannelPresenceSender.h>
28#include <Swiften/Queries/DummyIQChannel.h> 28#include <Swiften/Queries/DummyIQChannel.h>
29#include <Swiften/Roster/XMPPRoster.h> 29#include <Swiften/Roster/XMPPRoster.h>
30#include <Swiften/Roster/XMPPRosterImpl.h>
30#include <Swiften/VCards/VCardManager.h> 31#include <Swiften/VCards/VCardManager.h>
31#include <Swiften/VCards/VCardMemoryStorage.h> 32#include <Swiften/VCards/VCardMemoryStorage.h>
32 33
33#include <Swift/Controllers/Chat/ChatMessageParser.h> 34#include <Swift/Controllers/Chat/ChatMessageParser.h>
34#include <Swift/Controllers/Chat/MUCController.h> 35#include <Swift/Controllers/Chat/MUCController.h>
@@ -70,11 +71,12 @@ public:
70 iqChannel_ = new DummyIQChannel(); 71 iqChannel_ = new DummyIQChannel();
71 iqRouter_ = new IQRouter(iqChannel_); 72 iqRouter_ = new IQRouter(iqChannel_);
72 eventController_ = new EventController(); 73 eventController_ = new EventController();
73 chatWindowFactory_ = mocks_->InterfaceMock<ChatWindowFactory>(); 74 chatWindowFactory_ = mocks_->InterfaceMock<ChatWindowFactory>();
74 userSearchWindowFactory_ = mocks_->InterfaceMock<UserSearchWindowFactory>(); 75 userSearchWindowFactory_ = mocks_->InterfaceMock<UserSearchWindowFactory>();
75 presenceOracle_ = new PresenceOracle(stanzaChannel_); 76 xmppRoster_ = new XMPPRosterImpl();
77 presenceOracle_ = new PresenceOracle(stanzaChannel_, xmppRoster_);
76 presenceSender_ = new StanzaChannelPresenceSender(stanzaChannel_); 78 presenceSender_ = new StanzaChannelPresenceSender(stanzaChannel_);
77 directedPresenceSender_ = new DirectedPresenceSender(presenceSender_); 79 directedPresenceSender_ = new DirectedPresenceSender(presenceSender_);
78 uiEventStream_ = new UIEventStream(); 80 uiEventStream_ = new UIEventStream();
79 avatarManager_ = new NullAvatarManager(); 81 avatarManager_ = new NullAvatarManager();
80 TimerFactory* timerFactory = NULL; 82 TimerFactory* timerFactory = NULL;
@@ -102,10 +104,11 @@ public:
102 delete highlightManager_; 104 delete highlightManager_;
103 delete settings_; 105 delete settings_;
104 delete entityCapsProvider_; 106 delete entityCapsProvider_;
105 delete eventController_; 107 delete eventController_;
106 delete presenceOracle_; 108 delete presenceOracle_;
109 delete xmppRoster_;
107 delete mocks_; 110 delete mocks_;
108 delete uiEventStream_; 111 delete uiEventStream_;
109 delete stanzaChannel_; 112 delete stanzaChannel_;
110 delete presenceSender_; 113 delete presenceSender_;
111 delete directedPresenceSender_; 114 delete directedPresenceSender_;
@@ -440,9 +443,10 @@ private:
440 boost::shared_ptr<CryptoProvider> crypto_; 443 boost::shared_ptr<CryptoProvider> crypto_;
441 VCardManager* vcardManager_; 444 VCardManager* vcardManager_;
442 VCardMemoryStorage* vcardStorage_; 445 VCardMemoryStorage* vcardStorage_;
443 ClientBlockListManager* clientBlockListManager_; 446 ClientBlockListManager* clientBlockListManager_;
444 MUCBookmarkManager* mucBookmarkManager_; 447 MUCBookmarkManager* mucBookmarkManager_;
448 XMPPRoster* xmppRoster_;
445}; 449};
446 450
447CPPUNIT_TEST_SUITE_REGISTRATION(MUCControllerTest); 451CPPUNIT_TEST_SUITE_REGISTRATION(MUCControllerTest);
448 452