From af75453834ddb12b8b11b17beb319f2026ff68da 2016-01-22 15:17:51 From: Jan Kaluza Date: 2016-01-22 15:17:51 Subject: [PATCH] Fix #86 - Support case-sensitive buddy names transparently. When lower-cased name is received from frontend, it is mapped to case-sensitive name sent by the backend originally. --- diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 6d5823c80c31b240929631246f7467a175d2f4f9..1354b035bba58268db94f180232ee8347128db43 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -1259,7 +1259,6 @@ static PurpleConnectionUiOps conn_ui_ops = static void *notify_user_info(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info) { PurpleAccount *account = purple_connection_get_account_wrapped(gc); std::string name(purple_normalize_wrapped(account, who)); - std::transform(name.begin(), name.end(), name.begin(), ::tolower); size_t pos = name.find("/"); if (pos != std::string::npos) diff --git a/include/transport/Buddy.h b/include/transport/Buddy.h index 04dd5c0fe72029e154926f8cd5a85a0913f38491..11c16bb9d0ec30edebf332cdc9be53f2e5361f47 100644 --- a/include/transport/Buddy.h +++ b/include/transport/Buddy.h @@ -28,6 +28,7 @@ namespace Transport { class RosterManager; +class User; typedef enum { BUDDY_NO_FLAG = 0, BUDDY_JID_ESCAPING = 2, @@ -164,7 +165,8 @@ class Buddy { /// \param jid Jabber ID. /// \return legacy name of buddy from JID. - static std::string JIDToLegacyName(const Swift::JID &jid); + static std::string JIDToLegacyName(const Swift::JID &jid, User *user = NULL); + static Buddy *JIDToBuddy(const Swift::JID &jid, User *user); static BuddyFlag buddyFlagsFromJID(const Swift::JID &jid); protected: diff --git a/libtransport/Buddy.cpp b/libtransport/Buddy.cpp index c877b6bb2c07ec6df317666bf84b068eedc9d957..a4c5a2165ceaf7987a5f1e5a7c86d9a1d4d10d54 100644 --- a/libtransport/Buddy.cpp +++ b/libtransport/Buddy.cpp @@ -189,7 +189,7 @@ void Buddy::handleVCardReceived(const std::string &id, Swift::VCard::ref vcard) m_rosterManager->getUser()->getComponent()->getFrontend()->sendVCard(vcard, m_rosterManager->getUser()->getJID()); } -std::string Buddy::JIDToLegacyName(const Swift::JID &jid) { +std::string Buddy::JIDToLegacyName(const Swift::JID &jid, User *user) { std::string name; if (jid.getUnescapedNode() == jid.getNode()) { name = jid.getNode(); @@ -199,14 +199,48 @@ std::string Buddy::JIDToLegacyName(const Swift::JID &jid) { } else { name = jid.getUnescapedNode(); - // Psi sucks... -// if (name.find_last_of("\\40") != std::string::npos) { -// name.replace(name.find_last_of("\\40"), 1, "@"); // OK -// } } + + // If we have User associated with this request, we will find the + // buddy in his Roster, because JID received from network can be lower-case + // version of the original legacy name, but in the roster, we store the + // case-sensitive version of the legacy name. + if (user) { + Buddy *b = user->getRosterManager()->getBuddy(name); + if (b) { + return b->getName(); + } + } + return name; } +Buddy *Buddy::JIDToBuddy(const Swift::JID &jid, User *user) { + std::string name; + if (jid.getUnescapedNode() == jid.getNode()) { + name = jid.getNode(); + if (name.find_last_of("%") != std::string::npos) { + name.replace(name.find_last_of("%"), 1, "@"); // OK + } + } + else { + name = jid.getUnescapedNode(); + } + + // If we have User associated with this request, we will find the + // buddy in his Roster, because JID received from network can be lower-case + // version of the original legacy name, but in the roster, we store the + // case-sensitive version of the legacy name. + if (user) { + Buddy *b = user->getRosterManager()->getBuddy(name); + if (b) { + return b; + } + } + + return NULL; +} + BuddyFlag Buddy::buddyFlagsFromJID(const Swift::JID &jid) { if (jid.getUnescapedNode() == jid.getNode()) { return BUDDY_NO_FLAG; diff --git a/libtransport/ConversationManager.cpp b/libtransport/ConversationManager.cpp index beb0ba56c65d25ed64885a5524734a30fbba7e0a..13ac150dd409da1e7bc543d92d51053f01485791 100644 --- a/libtransport/ConversationManager.cpp +++ b/libtransport/ConversationManager.cpp @@ -119,7 +119,7 @@ void ConversationManager::handleMessageReceived(Swift::Message::ref message) { // if (name.find_last_of("%") != std::string::npos) { // OK when commented // name.replace(name.find_last_of("%"), 1, "@"); // OK when commented // } - std::string name = Buddy::JIDToLegacyName(message->getTo()); + std::string name = Buddy::JIDToLegacyName(message->getTo(), m_user); if (name.empty()) { LOG4CXX_WARN(logger, m_user->getJID().toString() << ": Tried to create empty conversation"); return; diff --git a/libtransport/RosterManager.cpp b/libtransport/RosterManager.cpp index 7c65c8172ed83bebb24c06fb5faf5c9396de40a3..f143c5b633369ad604daa935145b71a11c73d2c3 100644 --- a/libtransport/RosterManager.cpp +++ b/libtransport/RosterManager.cpp @@ -33,6 +33,7 @@ #include "Swiften/Elements/Nickname.h" #include #include +#include #include #include @@ -68,7 +69,9 @@ RosterManager::~RosterManager() { delete m_rosterStorage; } -void RosterManager::removeBuddy(const std::string &name) { +void RosterManager::removeBuddy(const std::string &_name) { + std::string name = _name; + boost::algorithm::to_lower(name); Buddy *buddy = getBuddy(name); if (!buddy) { LOG4CXX_WARN(logger, m_user->getJID().toString() << ": Tried to remove unknown buddy " << name); @@ -114,8 +117,10 @@ void RosterManager::handleBuddyChanged(Buddy *buddy) { } void RosterManager::setBuddy(Buddy *buddy) { - LOG4CXX_INFO(logger, "Associating buddy " << buddy->getName() << " with " << m_user->getJID().toString()); - m_buddies[buddy->getName()] = buddy; + std::string name = buddy->getName(); + boost::algorithm::to_lower(name); + LOG4CXX_INFO(logger, "Associating buddy " << name << " with " << m_user->getJID().toString()); + m_buddies[name] = buddy; onBuddySet(buddy); doAddBuddy(buddy); @@ -125,7 +130,9 @@ void RosterManager::setBuddy(Buddy *buddy) { } void RosterManager::unsetBuddy(Buddy *buddy) { - m_buddies.erase(buddy->getName()); + std::string name = buddy->getName(); + boost::algorithm::to_lower(name); + m_buddies.erase(name); if (m_rosterStorage) m_rosterStorage->removeBuddyFromQueue(buddy); onBuddyUnset(buddy); @@ -137,13 +144,15 @@ void RosterManager::storeBuddy(Buddy *buddy) { } } -Buddy *RosterManager::getBuddy(const std::string &name) { +Buddy *RosterManager::getBuddy(const std::string &_name) { + std::string name = _name; + boost::algorithm::to_lower(name); return m_buddies[name]; } void RosterManager::handleSubscription(Swift::Presence::ref presence) { - std::string legacyName = Buddy::JIDToLegacyName(presence->getTo()); + std::string legacyName = Buddy::JIDToLegacyName(presence->getTo(), m_user); if (legacyName.empty()) { return; } @@ -154,9 +163,9 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { Swift::Presence::ref response = Swift::Presence::create(); response->setTo(presence->getFrom().toBare()); response->setFrom(presence->getTo().toBare()); - Buddy *buddy = getBuddy(Buddy::JIDToLegacyName(presence->getTo())); + Buddy *buddy = getBuddy(legacyName); if (buddy) { - LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Subscription received and buddy " << Buddy::JIDToLegacyName(presence->getTo()) << " is already there => answering"); + LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Subscription received and buddy " << legacyName << " is already there => answering"); switch (presence->getType()) { case Swift::Presence::Subscribe: onBuddyAdded(buddy); @@ -184,7 +193,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { case Swift::Presence::Subscribe: buddyInfo.id = -1; buddyInfo.alias = ""; - buddyInfo.legacyName = Buddy::JIDToLegacyName(presence->getTo()); + buddyInfo.legacyName = legacyName; buddyInfo.subscription = "both"; buddyInfo.flags = Buddy::buddyFlagsFromJID(presence->getTo()); LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Subscription received for new buddy " << buddyInfo.legacyName << " => adding to legacy network"); @@ -201,7 +210,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { case Swift::Presence::Unsubscribe: buddyInfo.id = -1; buddyInfo.alias = ""; - buddyInfo.legacyName = Buddy::JIDToLegacyName(presence->getTo()); + buddyInfo.legacyName = legacyName; buddyInfo.subscription = "both"; buddyInfo.flags = Buddy::buddyFlagsFromJID(presence->getTo()); @@ -222,7 +231,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { response->setTo(presence->getFrom().toBare()); response->setFrom(presence->getTo().toBare()); - Buddy *buddy = getBuddy(Buddy::JIDToLegacyName(presence->getTo())); + Buddy *buddy = getBuddy(legacyName); if (buddy) { std::vector &presences = buddy->generatePresenceStanzas(255); switch (presence->getType()) { @@ -274,7 +283,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { case Swift::Presence::Subscribe: buddyInfo.id = -1; buddyInfo.alias = ""; - buddyInfo.legacyName = Buddy::JIDToLegacyName(presence->getTo()); + buddyInfo.legacyName = legacyName; buddyInfo.subscription = "both"; buddyInfo.flags = Buddy::buddyFlagsFromJID(presence->getTo()); @@ -287,7 +296,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { case Swift::Presence::Unsubscribe: buddyInfo.id = -1; buddyInfo.alias = ""; - buddyInfo.legacyName = Buddy::JIDToLegacyName(presence->getTo()); + buddyInfo.legacyName = legacyName; buddyInfo.subscription = "both"; buddyInfo.flags = Buddy::buddyFlagsFromJID(presence->getTo()); @@ -339,7 +348,9 @@ void RosterManager::setStorageBackend(StorageBackend *storageBackend) { Buddy *buddy = m_component->getFactory()->createBuddy(this, *it); if (buddy) { LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Adding cached buddy " << buddy->getName() << " fom database"); - m_buddies[buddy->getName()] = buddy; + std::string name = buddy->getName(); + boost::algorithm::to_lower(name); + m_buddies[name] = buddy; onBuddySet(buddy); } } @@ -383,7 +394,7 @@ void RosterManager::sendCurrentPresences(const Swift::JID &to) { } void RosterManager::sendCurrentPresence(const Swift::JID &from, const Swift::JID &to) { - Buddy *buddy = getBuddy(Buddy::JIDToLegacyName(from)); + Buddy *buddy = Buddy::JIDToBuddy(from, m_user); if (buddy) { std::vector &presences = buddy->generatePresenceStanzas(255); BOOST_FOREACH(Swift::Presence::ref &presence, presences) { diff --git a/spectrum/src/frontends/slack/SlackSession.cpp b/spectrum/src/frontends/slack/SlackSession.cpp index 11a1fa7e0e77543cca041c2b37fa89921e10824f..7f961acaef2c468d16bbd3f13c914ef647f14aef 100644 --- a/spectrum/src/frontends/slack/SlackSession.cpp +++ b/spectrum/src/frontends/slack/SlackSession.cpp @@ -125,7 +125,7 @@ void SlackSession::sendMessage(boost::shared_ptr message) { return; } channel = m_slackChannel; - from = Buddy::JIDToLegacyName(message->getFrom()); + from = Buddy::JIDToLegacyName(message->getFrom(), m_user); Buddy *b; if (m_user && (b = m_user->getRosterManager()->getBuddy(from)) != NULL) { diff --git a/spectrum/src/frontends/xmpp/XMPPRosterManager.cpp b/spectrum/src/frontends/xmpp/XMPPRosterManager.cpp index adea93b3be1814c9e12eb71612be2d81ad01e5ad..6bc733bd33c733186adebc57db4358851596bd2f 100644 --- a/spectrum/src/frontends/xmpp/XMPPRosterManager.cpp +++ b/spectrum/src/frontends/xmpp/XMPPRosterManager.cpp @@ -177,9 +177,10 @@ void XMPPRosterManager::doUpdateBuddy(Buddy *buddy) { void XMPPRosterManager::handleBuddyRosterPushResponse(Swift::ErrorPayload::ref error, Swift::SetRosterRequest::ref request, const std::string &key) { LOG4CXX_INFO(logger, "handleBuddyRosterPushResponse called for buddy " << key); - if (m_buddies[key] != NULL) { - if (m_buddies[key]->isAvailable()) { - std::vector &presences = m_buddies[key]->generatePresenceStanzas(255); + Buddy *b = getBuddy(key); + if (b) { + if (b->isAvailable()) { + std::vector &presences = b->generatePresenceStanzas(255); BOOST_FOREACH(Swift::Presence::ref &presence, presences) { m_component->getFrontend()->sendPresence(presence); } @@ -215,8 +216,9 @@ void XMPPRosterManager::handleRemoteRosterResponse(boost::shared_ptrgetItems()) { - std::string legacyName = Buddy::JIDToLegacyName(item.getJID()); - if (m_buddies.find(legacyName) != m_buddies.end()) { + std::string legacyName = Buddy::JIDToLegacyName(item.getJID(), m_user); + Buddy *b = getBuddy(legacyName); + if (b) { continue; } diff --git a/spectrum/src/frontends/xmpp/blockresponder.cpp b/spectrum/src/frontends/xmpp/blockresponder.cpp index 0bb0416e6a424a00e09e9f97d6ef3191be18d132..2d8147753951d07375bddc7b4c3de48bf3175d63 100644 --- a/spectrum/src/frontends/xmpp/blockresponder.cpp +++ b/spectrum/src/frontends/xmpp/blockresponder.cpp @@ -52,17 +52,17 @@ bool BlockResponder::handleSetRequest(const Swift::JID& from, const Swift::JID& return true; } - Buddy *buddy = user->getRosterManager()->getBuddy(Buddy::JIDToLegacyName(to)); + Buddy *buddy = Buddy::JIDToBuddy(to, user); if (!buddy) { - LOG4CXX_WARN(logger, from.toBare().toString() << ": Buddy " << Buddy::JIDToLegacyName(to) << " does not exist"); + LOG4CXX_WARN(logger, from.toBare().toString() << ": Buddy " << Buddy::JIDToLegacyName(to, user) << " does not exist"); return true; } if (buddy->isBlocked()) { - LOG4CXX_INFO(logger, from.toBare().toString() << ": Unblocking buddy " << Buddy::JIDToLegacyName(to)); + LOG4CXX_INFO(logger, from.toBare().toString() << ": Unblocking buddy " << buddy->getName()); } else { - LOG4CXX_INFO(logger, from.toBare().toString() << ": Blocking buddy " << Buddy::JIDToLegacyName(to)); + LOG4CXX_INFO(logger, from.toBare().toString() << ": Blocking buddy " << buddy->getName()); } onBlockToggled(buddy); diff --git a/spectrum/src/frontends/xmpp/rosterresponder.cpp b/spectrum/src/frontends/xmpp/rosterresponder.cpp index 3cb39fbc75fbd0c3a8dbb7840e2b978fda25a8eb..b0b75fe0a1923798c49a79c0d36bf328c229cb78 100644 --- a/spectrum/src/frontends/xmpp/rosterresponder.cpp +++ b/spectrum/src/frontends/xmpp/rosterresponder.cpp @@ -82,7 +82,7 @@ bool RosterResponder::handleSetRequest(const Swift::JID& from, const Swift::JID& return true; } - Buddy *buddy = user->getRosterManager()->getBuddy(Buddy::JIDToLegacyName(item.getJID())); + Buddy *buddy = Buddy::JIDToBuddy(item.getJID(), user); if (buddy) { if (item.getSubscription() == Swift::RosterItemPayload::Remove) { LOG4CXX_INFO(logger, from.toBare().toString() << ": Removing buddy " << buddy->getName()); @@ -102,7 +102,7 @@ bool RosterResponder::handleSetRequest(const Swift::JID& from, const Swift::JID& BuddyInfo buddyInfo; buddyInfo.id = -1; buddyInfo.alias = item.getName(); - buddyInfo.legacyName = Buddy::JIDToLegacyName(item.getJID()); + buddyInfo.legacyName = Buddy::JIDToLegacyName(item.getJID(), user); buddyInfo.subscription = "both"; buddyInfo.flags = Buddy::buddyFlagsFromJID(item.getJID()); LOG4CXX_INFO(logger, from.toBare().toString() << ": Adding buddy " << buddyInfo.legacyName); diff --git a/spectrum/src/frontends/xmpp/vcardresponder.cpp b/spectrum/src/frontends/xmpp/vcardresponder.cpp index a08ef92b4c374068fbcfb4ff484e015ad945180a..4269ff2fa20e276201e7dc1bcf3e2dc3e89f9701 100644 --- a/spectrum/src/frontends/xmpp/vcardresponder.cpp +++ b/spectrum/src/frontends/xmpp/vcardresponder.cpp @@ -94,7 +94,7 @@ bool VCardResponder::handleGetRequest(const Swift::JID& from, const Swift::JID& to_ = user->getJID(); } - name = Buddy::JIDToLegacyName(to_); + name = Buddy::JIDToLegacyName(to_, user); LOG4CXX_INFO(logger, from.toBare().toString() << ": Requested VCard of " << name); diff --git a/tests/libtransport/basictest.cpp b/tests/libtransport/basictest.cpp index 952e6aa88797ede9ff3f8b4a2251e992f6518c06..db35221703fd8137632d89d4c38b0b92f8457738 100644 --- a/tests/libtransport/basictest.cpp +++ b/tests/libtransport/basictest.cpp @@ -255,7 +255,7 @@ void BasicTest::add2Buddies() { std::vector grp; grp.push_back("group1"); - LocalBuddy *buddy = new LocalBuddy(user->getRosterManager(), -1, "buddy1", "Buddy 1", grp, BUDDY_JID_ESCAPING); + LocalBuddy *buddy = new LocalBuddy(user->getRosterManager(), -1, "BuddY1", "Buddy 1", grp, BUDDY_JID_ESCAPING); user->getRosterManager()->setBuddy(buddy); buddy->setStatus(Swift::StatusShow(Swift::StatusShow::Away), "status1"); diff --git a/tests/libtransport/conversationmanager.cpp b/tests/libtransport/conversationmanager.cpp index e2cb8c4824a962daf819cca6a25bb37121d80045..98a83f7ca3c5dc185858d0487e40e568e8530e34 100644 --- a/tests/libtransport/conversationmanager.cpp +++ b/tests/libtransport/conversationmanager.cpp @@ -16,6 +16,7 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe CPPUNIT_TEST_SUITE(ConversationManagerTest); CPPUNIT_TEST(conversationSize); CPPUNIT_TEST(handleNormalMessages); + CPPUNIT_TEST(handleNormalMessagesInitiatedFromXMPP); CPPUNIT_TEST(handleNormalMessagesHeadline); CPPUNIT_TEST(handleGroupchatMessages); CPPUNIT_TEST(handleGroupchatMessagesBouncer); @@ -206,6 +207,28 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe received.clear(); } + void handleNormalMessagesInitiatedFromXMPP() { + User *user = userManager->getUser("user@localhost"); + + boost::shared_ptr msg(new Swift::Message()); + msg->setFrom("user@localhost/resource"); + msg->setTo("buddy1@localhost/bot"); + msg->setBody("hi there<>!"); + injectMessage(msg); + + // Forward it + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(0, (int) received.size()); + CPPUNIT_ASSERT(m_msg); + CPPUNIT_ASSERT_EQUAL(std::string("hi there<>!"), m_msg->getBody()); + CPPUNIT_ASSERT_EQUAL(std::string("BuddY1"), m_conv->getLegacyName()); + + TestingConversation *conv = (TestingConversation *) user->getConversationManager()->getConversation("BuddY1"); + CPPUNIT_ASSERT(conv); + CPPUNIT_ASSERT_EQUAL(std::string("BuddY1"), conv->getLegacyName()); + } + void handleNormalMessagesHeadline() { User *user = userManager->getUser("user@localhost"); user->addUserSetting("send_headlines", "1"); diff --git a/tests/libtransport/rostermanager.cpp b/tests/libtransport/rostermanager.cpp index c1449a6b149dd228f48e9c3409f49734129c996c..ea0b5dea5cbe583292242424007fdc6be22bef91 100644 --- a/tests/libtransport/rostermanager.cpp +++ b/tests/libtransport/rostermanager.cpp @@ -81,11 +81,12 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { CPPUNIT_ASSERT(payload1); CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size()); Swift::RosterItemPayload item = payload1->getItems()[0]; - CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID())); + CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID(), user)); CPPUNIT_ASSERT_EQUAL(std::string(""), item.getName()); } void setBuddy() { + User *user = userManager->getUser("user@localhost"); add2Buddies(); CPPUNIT_ASSERT_EQUAL(4, (int) received.size()); @@ -93,7 +94,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { CPPUNIT_ASSERT(payload1); CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size()); Swift::RosterItemPayload item = payload1->getItems()[0]; - CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID())); + CPPUNIT_ASSERT_EQUAL(std::string("BuddY1"), Buddy::JIDToLegacyName(item.getJID(), user)); CPPUNIT_ASSERT_EQUAL(std::string("Buddy 1"), item.getName()); CPPUNIT_ASSERT_EQUAL(std::string("localhost"), getStanza(received[0])->getFrom().toString()); @@ -101,7 +102,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { CPPUNIT_ASSERT(payload2); CPPUNIT_ASSERT_EQUAL(1, (int) payload2->getItems().size()); item = payload2->getItems()[0]; - CPPUNIT_ASSERT_EQUAL(std::string("buddy2"), Buddy::JIDToLegacyName(item.getJID())); + CPPUNIT_ASSERT_EQUAL(std::string("buddy2"), Buddy::JIDToLegacyName(item.getJID(), user)); CPPUNIT_ASSERT_EQUAL(std::string("Buddy 2"), item.getName()); // send responses back @@ -172,11 +173,11 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { } void removeBuddy() { + User *user = userManager->getUser("user@localhost"); add2Buddies(); CPPUNIT_ASSERT_EQUAL(4, (int) received.size()); received.clear(); - User *user = userManager->getUser("user@localhost"); user->getRosterManager()->removeBuddy("buddy1"); CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); @@ -184,7 +185,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { CPPUNIT_ASSERT(payload1); CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size()); Swift::RosterItemPayload item = payload1->getItems()[0]; - CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID())); + CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID(), user)); CPPUNIT_ASSERT_EQUAL(Swift::RosterItemPayload::Remove, item.getSubscription()); } @@ -203,10 +204,11 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribed, dynamic_cast(getStanza(received[0]))->getType()); - CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), m_buddy); + CPPUNIT_ASSERT_EQUAL(std::string("BuddY1"), m_buddy); } void subscribeNewBuddy() { + User *user = userManager->getUser("user@localhost"); Swift::Presence::ref response = Swift::Presence::create(); response->setTo("buddy1@localhost"); response->setFrom("user@localhost/resource"); @@ -220,7 +222,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { Swift::RosterPayload::ref payload1 = getStanza(received[0])->getPayload(); CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size()); Swift::RosterItemPayload item = payload1->getItems()[0]; - CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID())); + CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID(), user)); CPPUNIT_ASSERT(dynamic_cast(getStanza(received[1]))); CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribed, dynamic_cast(getStanza(received[1]))->getType()); @@ -229,6 +231,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { } void unsubscribeExistingBuddy() { + User *user = userManager->getUser("user@localhost"); add2Buddies(); received.clear(); @@ -245,13 +248,13 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { Swift::RosterPayload::ref payload1 = getStanza(received[0])->getPayload(); CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size()); Swift::RosterItemPayload item = payload1->getItems()[0]; - CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID())); + CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID(), user)); CPPUNIT_ASSERT(dynamic_cast(getStanza(received[1]))); CPPUNIT_ASSERT_EQUAL(Swift::Presence::Unsubscribed, dynamic_cast(getStanza(received[1]))->getType()); - CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), m_buddy); + CPPUNIT_ASSERT_EQUAL(std::string("BuddY1"), m_buddy); } void unsubscribeNewBuddy() {