diff options
| author | Tobias Markmann <tm@ayena.de> | 2016-01-19 14:17:28 (GMT) | 
|---|---|---|
| committer | Tobias Markmann <tm@ayena.de> | 2016-01-19 14:17:28 (GMT) | 
| commit | 0ca3ea9a88acb5e2d42baa3a85d61495d72b7352 (patch) | |
| tree | fad2683919bad1eaae2b964f0aadf0e4a1ed440d /Swift | |
| parent | 3cca16eb9c7035af82209cf2db4c5efafd90f584 (diff) | |
| download | swift-0ca3ea9a88acb5e2d42baa3a85d61495d72b7352.zip swift-0ca3ea9a88acb5e2d42baa3a85d61495d72b7352.tar.bz2 | |
Reset impromptu support flag when logging off
Test-Information:
Added unit test verifying the expected behavior. It passes
on OS X 10.11.2.
Change-Id: I7531e313bf03dbea276f133db042ce26e6da4a53
Diffstat (limited to 'Swift')
| -rw-r--r-- | Swift/Controllers/Chat/ChatControllerBase.cpp | 3 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/ChatsManager.cpp | 12 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp | 35 | ||||
| -rw-r--r-- | Swift/Controllers/UnitTest/MockChatWindow.h | 10 | 
4 files changed, 51 insertions, 9 deletions
| diff --git a/Swift/Controllers/Chat/ChatControllerBase.cpp b/Swift/Controllers/Chat/ChatControllerBase.cpp index ae0eed2..f4b715c 100644 --- a/Swift/Controllers/Chat/ChatControllerBase.cpp +++ b/Swift/Controllers/Chat/ChatControllerBase.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2015 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited.   * All rights reserved.   * See the COPYING file for more information.   */ @@ -101,6 +101,7 @@ void ChatControllerBase::handleDayChangeTick() {  void ChatControllerBase::setEnabled(bool enabled) {  	chatWindow_->setOnline(enabled); +	chatWindow_->setCanInitiateImpromptuChats(false);  }  void ChatControllerBase::setOnline(bool online) { diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index 48cdb29..1a69982 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2015 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited.   * All rights reserved.   * See the COPYING file for more information.   */ @@ -690,6 +690,7 @@ void ChatsManager::setOnline(bool enabled) {  		markAllRecentsOffline();  	} else {  		setupBookmarks(); +		localMUCServiceJID_ = JID();  		localMUCServiceFinderWalker_ = boost::make_shared<DiscoServiceWalker>(jid_.getDomain(), iqRouter_);  		localMUCServiceFinderWalker_->onServiceFound.connect(boost::bind(&ChatsManager::handleLocalServiceFound, this, _1, _2));  		localMUCServiceFinderWalker_->onWalkAborted.connect(boost::bind(&ChatsManager::handleLocalServiceWalkFinished, this)); @@ -1004,7 +1005,14 @@ void ChatsManager::handleLocalServiceFound(const JID& service, boost::shared_ptr  }  void ChatsManager::handleLocalServiceWalkFinished() { -	onImpromptuMUCServiceDiscovered(!localMUCServiceJID_.toString().empty()); +	bool impromptuMUCSupported = !localMUCServiceJID_.toString().empty(); +	foreach (JIDChatControllerPair controllerPair, chatControllers_) { +		controllerPair.second->setCanStartImpromptuChats(impromptuMUCSupported); +	} +	foreach (JIDMUCControllerPair controllerPair, mucControllers_) { +		controllerPair.second->setCanStartImpromptuChats(impromptuMUCSupported); +	} +	onImpromptuMUCServiceDiscovered(impromptuMUCSupported);  }  std::vector<ChatListWindow::Chat> ChatsManager::getRecentChats() const { diff --git a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp index 5f89f62..4f8cf5a 100644 --- a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp +++ b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2015 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited.   * All rights reserved.   * See the COPYING file for more information.   */ @@ -74,8 +74,9 @@ class ChatsManagerTest : public CppUnit::TestFixture {  	CPPUNIT_TEST(testChatControllerFullJIDBindingOnMessageAndNotReceipt);  	CPPUNIT_TEST(testChatControllerFullJIDBindingOnTypingAndNotActive);  	CPPUNIT_TEST(testChatControllerPMPresenceHandling); +	CPPUNIT_TEST(testLocalMUCServiceDiscoveryResetOnDisconnect);  	CPPUNIT_TEST_SUITE_END(); -	 +  public:  	void setUp() {   		mocks_ = new MockRepository(); @@ -673,6 +674,34 @@ public:  		CPPUNIT_ASSERT_EQUAL(std::string("participantA has gone offline."), MockChatWindow::bodyFromMessage(window->lastReplacedMessage_));  	} +	void testLocalMUCServiceDiscoveryResetOnDisconnect() { +		JID ownJID("test@test.com/resource"); +		JID sender("foo@test.com"); + +		manager_->setOnline(true); + +		// Open chat window to a sender. +		MockChatWindow* window = new MockChatWindow(); +		mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(sender, uiEventStream_).Return(window); + +		uiEventStream_->send(boost::make_shared<RequestChatUIEvent>(sender)); + +		CPPUNIT_ASSERT_EQUAL(false, window->impromptuMUCSupported_); + +		boost::shared_ptr<IQ> infoRequest= iqChannel_->iqs_[1]; +		boost::shared_ptr<IQ> infoResponse = IQ::createResult(infoRequest->getFrom(), infoRequest->getTo(), infoRequest->getID()); + +		DiscoInfo info; +		info.addIdentity(DiscoInfo::Identity("Shakespearean Chat Service", "conference", "text")); +		info.addFeature("http://jabber.org/protocol/muc"); +		infoResponse->addPayload(boost::make_shared<DiscoInfo>(info)); +		iqChannel_->onIQReceived(infoResponse); + +		CPPUNIT_ASSERT_EQUAL(true, window->impromptuMUCSupported_); +		manager_->setOnline(false); +		CPPUNIT_ASSERT_EQUAL(false, window->impromptuMUCSupported_); +	} +  	void testhelperChatControllerPresenceAccessUpdatedOnSubscriptionChangeReceiptsAllowed(RosterItemPayload::Subscription from, RosterItemPayload::Subscription to) {  		JID messageJID("testling@test.com/resource1");  		xmppRoster_->addContact(messageJID, "foo", std::vector<std::string>(), from); @@ -713,7 +742,7 @@ private:  	JID jid_;  	ChatsManager* manager_;  	DummyStanzaChannel* stanzaChannel_; -	IQChannel* iqChannel_; +	DummyIQChannel* iqChannel_;  	IQRouter* iqRouter_;  	EventController* eventController_;  	ChatWindowFactory* chatWindowFactory_; diff --git a/Swift/Controllers/UnitTest/MockChatWindow.h b/Swift/Controllers/UnitTest/MockChatWindow.h index ddb7e3e..4523d29 100644 --- a/Swift/Controllers/UnitTest/MockChatWindow.h +++ b/Swift/Controllers/UnitTest/MockChatWindow.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2015 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited.   * All rights reserved.   * See the COPYING file for more information.   */ @@ -15,7 +15,7 @@  namespace Swift {  	class MockChatWindow : public ChatWindow {  		public: -			MockChatWindow() : labelsEnabled_(false) {} +			MockChatWindow() : labelsEnabled_(false), impromptuMUCSupported_(false) {}  			virtual ~MockChatWindow();  			virtual std::string addMessage(const ChatMessage& message, const std::string& /*senderName*/, bool /*senderIsSelf*/, boost::shared_ptr<SecurityLabel> /*label*/, const std::string& /*avatarPath*/, const boost::posix_time::ptime& /*time*/, const HighlightAction& /*highlight*/) { @@ -82,7 +82,10 @@ namespace Swift {  			virtual void setAvailableRoomActions(const std::vector<RoomAction> &) {}  			virtual void setBlockingState(BlockingState) {} -			virtual void setCanInitiateImpromptuChats(bool /*supportsImpromptu*/) {} +			virtual void setCanInitiateImpromptuChats(bool supportsImpromptu) { +				impromptuMUCSupported_ = supportsImpromptu; +			} +  			virtual void showBookmarkWindow(const MUCBookmark& /*bookmark*/) {}  			virtual void setBookmarkState(RoomBookmarkState) {} @@ -102,6 +105,7 @@ namespace Swift {  			ChatMessage lastReplacedMessage_;  			std::vector<SecurityLabelsCatalog::Item> labels_;  			bool labelsEnabled_; +			bool impromptuMUCSupported_;  			SecurityLabelsCatalog::Item label_;  			Roster* roster_;  	}; | 
 Swift
 Swift