summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2015-10-27 16:20:09 (GMT)
committerTobias Markmann <tm@ayena.de>2015-10-30 12:34:52 (GMT)
commit0f5ef716a50c8d9761cafda12aacf818cdfd6353 (patch)
tree4ed80dedc2fa8b04036eb7567282094ea8fe07f1 /Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp
parent4320235bef1b601856b295a8d6411d1898048802 (diff)
downloadswift-0f5ef716a50c8d9761cafda12aacf818cdfd6353.zip
swift-0f5ef716a50c8d9761cafda12aacf818cdfd6353.tar.bz2
Change bare JID presence lookup code to ignore priorities
Before presence handling code was handled by both, the ContactRosterItem in Swift and the PresenceOracle in Swiften. The ContactRosterItem also considered the presence priority for deciding what presence to show for a bare JID. With this code all full or bare JID presence requests are finally handled by the PresenceOracle. For bare JIDs it is looked up to a presence of one of the available resources of that JID regardless of the priorities. Test-Information: Adjusted tests according to above description and documentation in PresenceOracle. Change-Id: I972a4574f476cdf4d4b5593a035eb1c25ef2f8ba
Diffstat (limited to 'Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp')
-rw-r--r--Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp37
1 files changed, 25 insertions, 12 deletions
diff --git a/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp b/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp
index 9320af1..d774e6d 100644
--- a/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp
+++ b/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp
@@ -192,43 +192,56 @@ class RosterControllerTest : public CppUnit::TestFixture {
192 void testUnavailablePresence() { 192 void testUnavailablePresence() {
193 std::vector<std::string> groups; 193 std::vector<std::string> groups;
194 groups.push_back("testGroup1"); 194 groups.push_back("testGroup1");
195 JID from("test@testdomain.com"); 195 JID from("test@testdomain.com");
196 xmppRoster_->addContact(from, "name", groups, RosterItemPayload::Both); 196 xmppRoster_->addContact(from, "name", groups, RosterItemPayload::Both);
197
197 Presence::ref lowPresence(new Presence()); 198 Presence::ref lowPresence(new Presence());
198 lowPresence->setFrom(withResource(from, "bob")); 199 lowPresence->setFrom(withResource(from, "bob"));
199 lowPresence->setPriority(2); 200 lowPresence->setPriority(2);
201 lowPresence->setShow(StatusShow::Away);
200 lowPresence->setStatus("Not here"); 202 lowPresence->setStatus("Not here");
203 Presence::ref lowPresenceOffline(new Presence());
204 lowPresenceOffline->setFrom(withResource(from, "bob"));
205 lowPresenceOffline->setStatus("Signing out");
206 lowPresenceOffline->setType(Presence::Unavailable);
207
201 Presence::ref highPresence(new Presence()); 208 Presence::ref highPresence(new Presence());
202 highPresence->setFrom(withResource(from, "bert")); 209 highPresence->setFrom(withResource(from, "bert"));
203 highPresence->setPriority(10); 210 highPresence->setPriority(10);
204 highPresence->setStatus("So totally here"); 211 highPresence->setStatus("So totally here");
205 Presence::ref highPresenceOffline(new Presence()); 212 Presence::ref highPresenceOffline(new Presence());
206 highPresenceOffline->setFrom(withResource(from, "bert")); 213 highPresenceOffline->setFrom(withResource(from, "bert"));
207 highPresenceOffline->setType(Presence::Unavailable); 214 highPresenceOffline->setType(Presence::Unavailable);
208 Presence::ref lowPresenceOffline(new Presence()); 215
209 lowPresenceOffline->setFrom(withResource(from, "bob"));
210 lowPresenceOffline->setStatus("Signing out");
211 lowPresenceOffline->setType(Presence::Unavailable);
212 stanzaChannel_->onPresenceReceived(lowPresence); 216 stanzaChannel_->onPresenceReceived(lowPresence);
217 Presence::ref accountPresence = presenceOracle_->getAccountPresence(from);
218 CPPUNIT_ASSERT_EQUAL(StatusShow::Away, accountPresence->getShow());
219
213 stanzaChannel_->onPresenceReceived(highPresence); 220 stanzaChannel_->onPresenceReceived(highPresence);
221 accountPresence = presenceOracle_->getAccountPresence(from);
222 CPPUNIT_ASSERT_EQUAL(StatusShow::Online, accountPresence->getShow());
223
214 stanzaChannel_->onPresenceReceived(highPresenceOffline); 224 stanzaChannel_->onPresenceReceived(highPresenceOffline);
225
226 // After this, the roster should show the low presence.
215 ContactRosterItem* item = dynamic_cast<ContactRosterItem*>(dynamic_cast<GroupRosterItem*>(CHILDREN[0])->getChildren()[0]); 227 ContactRosterItem* item = dynamic_cast<ContactRosterItem*>(dynamic_cast<GroupRosterItem*>(CHILDREN[0])->getChildren()[0]);
216 CPPUNIT_ASSERT(item); 228 CPPUNIT_ASSERT(item);
217 /* A verification that if the test fails, it's the RosterController, not the PresenceOracle. */ 229
218 Presence::ref high = presenceOracle_->getHighestPriorityPresence(from); 230 Presence::ref low = presenceOracle_->getAccountPresence(from);
219 CPPUNIT_ASSERT_EQUAL(Presence::Available, high->getType()); 231
220 CPPUNIT_ASSERT_EQUAL(lowPresence->getStatus(), high->getStatus()); 232 CPPUNIT_ASSERT_EQUAL(Presence::Available, low->getType());
221 CPPUNIT_ASSERT_EQUAL(StatusShow::Online, item->getStatusShow()); 233 CPPUNIT_ASSERT_EQUAL(lowPresence->getStatus(), low->getStatus());
234 CPPUNIT_ASSERT_EQUAL(lowPresence->getShow(), item->getStatusShow());
222 CPPUNIT_ASSERT_EQUAL(lowPresence->getStatus(), item->getStatusText()); 235 CPPUNIT_ASSERT_EQUAL(lowPresence->getStatus(), item->getStatusText());
223 stanzaChannel_->onPresenceReceived(lowPresenceOffline); 236 stanzaChannel_->onPresenceReceived(lowPresenceOffline);
224 item = dynamic_cast<ContactRosterItem*>(dynamic_cast<GroupRosterItem*>(CHILDREN[0])->getChildren()[0]); 237 item = dynamic_cast<ContactRosterItem*>(dynamic_cast<GroupRosterItem*>(CHILDREN[0])->getChildren()[0]);
225 CPPUNIT_ASSERT(item); 238 CPPUNIT_ASSERT(item);
226 /* A verification that if the test fails, it's the RosterController, not the PresenceOracle. */ 239 /* A verification that if the test fails, it's the RosterController, not the PresenceOracle. */
227 high = presenceOracle_->getHighestPriorityPresence(from); 240 low = presenceOracle_->getHighestPriorityPresence(from);
228 CPPUNIT_ASSERT_EQUAL(Presence::Unavailable, high->getType()); 241 CPPUNIT_ASSERT_EQUAL(Presence::Unavailable, low->getType());
229 CPPUNIT_ASSERT_EQUAL(lowPresenceOffline->getStatus(), high->getStatus()); 242 CPPUNIT_ASSERT_EQUAL(lowPresenceOffline->getStatus(), low->getStatus());
230 CPPUNIT_ASSERT_EQUAL(StatusShow::None, item->getStatusShow()); 243 CPPUNIT_ASSERT_EQUAL(StatusShow::None, item->getStatusShow());
231 CPPUNIT_ASSERT_EQUAL(lowPresenceOffline->getStatus(), item->getStatusText()); 244 CPPUNIT_ASSERT_EQUAL(lowPresenceOffline->getStatus(), item->getStatusText());
232 } 245 }
233 246
234 void testAdd() { 247 void testAdd() {