From 49d27079117c6b2763ff7c582815bc2a7b083a7f Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Mon, 7 Jun 2010 21:29:38 +0100
Subject: Don't resolve Nick for a bare MUC JID as an empty string.

Resolves: #435

diff --git a/Swift/Controllers/NickResolver.cpp b/Swift/Controllers/NickResolver.cpp
index ed2c8df..29ff51b 100644
--- a/Swift/Controllers/NickResolver.cpp
+++ b/Swift/Controllers/NickResolver.cpp
@@ -26,7 +26,7 @@ String NickResolver::jidToNick(const JID& jid) {
 	String nick;
 
 	if (mucRegistry_ && mucRegistry_->isMUC(jid.toBare()) ) {
-		return jid.getResource();
+		return jid.getResource().isEmpty() ? jid.toBare().toString() : jid.getResource();
 	}
 
 	if (xmppRoster_->containsJID(jid) && !xmppRoster_->getNameForJID(jid).isEmpty()) {
diff --git a/Swift/Controllers/UnitTest/MockMUCRegistry.h b/Swift/Controllers/UnitTest/MockMUCRegistry.h
new file mode 100644
index 0000000..fdda8e1
--- /dev/null
+++ b/Swift/Controllers/UnitTest/MockMUCRegistry.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include "Swiften/MUC/MUCRegistry.h"
+
+namespace Swift {
+	class JID;
+
+	class MockMUCRegistry : public MUCRegistry {
+		public:
+			virtual ~MockMUCRegistry() {};
+
+			void setNext(bool next) {next_ = next;}
+			virtual bool isMUC(const JID&) const {return next_;}
+
+		private:
+			bool next_;
+	};
+}
diff --git a/Swift/Controllers/UnitTest/NickResolverTest.cpp b/Swift/Controllers/UnitTest/NickResolverTest.cpp
index 997723f..913bdcc 100644
--- a/Swift/Controllers/UnitTest/NickResolverTest.cpp
+++ b/Swift/Controllers/UnitTest/NickResolverTest.cpp
@@ -8,6 +8,7 @@
 #include <cppunit/extensions/TestFactoryRegistry.h>
 
 #include "Swift/Controllers/NickResolver.h"
+#include "Swift/Controllers/UnitTest/MockMUCRegistry.h"
 #include "Swiften/Roster/XMPPRoster.h"
 
 using namespace Swift;
@@ -20,6 +21,9 @@ class NickResolverTest : public CppUnit::TestFixture
 		CPPUNIT_TEST(testMatch);
 		CPPUNIT_TEST(testOverwrittenMatch);
 		CPPUNIT_TEST(testRemovedMatch);
+		CPPUNIT_TEST(testMUCNick);
+		CPPUNIT_TEST(testMUCNoNick);
+		CPPUNIT_TEST(testRemovedMatch);
 		CPPUNIT_TEST_SUITE_END();
 
 		std::vector<String> groups_;
@@ -27,6 +31,29 @@ class NickResolverTest : public CppUnit::TestFixture
 	public:
 		NickResolverTest() {}
 
+		void testMUCNick() {
+			boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
+			NickResolver resolver(xmppRoster);
+			MockMUCRegistry registry;
+			resolver.setMUCRegistry(&registry);
+			registry.setNext(true);
+			JID testJID("foo@bar/baz");
+
+			CPPUNIT_ASSERT_EQUAL(String("baz"), resolver.jidToNick(testJID));
+		}
+
+		void testMUCNoNick() {
+			boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
+			NickResolver resolver(xmppRoster);
+			MockMUCRegistry registry;
+			resolver.setMUCRegistry(&registry);
+			registry.setNext(true);
+			JID testJID("foo@bar");
+
+			CPPUNIT_ASSERT_EQUAL(String("foo@bar"), resolver.jidToNick(testJID));
+		}
+
+
 		void testNoMatch() {
 			boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
 			NickResolver resolver(xmppRoster);
-- 
cgit v0.10.2-6-g49f6