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 /Swiften/Presence/UnitTest/PresenceOracleTest.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 'Swiften/Presence/UnitTest/PresenceOracleTest.cpp')
-rw-r--r--Swiften/Presence/UnitTest/PresenceOracleTest.cpp63
1 files changed, 54 insertions, 9 deletions
diff --git a/Swiften/Presence/UnitTest/PresenceOracleTest.cpp b/Swiften/Presence/UnitTest/PresenceOracleTest.cpp
index 85dcca9..6d16d80 100644
--- a/Swiften/Presence/UnitTest/PresenceOracleTest.cpp
+++ b/Swiften/Presence/UnitTest/PresenceOracleTest.cpp
@@ -26,10 +26,11 @@ class PresenceOracleTest : public CppUnit::TestFixture {
26 CPPUNIT_TEST(testReconnectResetsPresences); 26 CPPUNIT_TEST(testReconnectResetsPresences);
27 CPPUNIT_TEST(testHighestPresenceSingle); 27 CPPUNIT_TEST(testHighestPresenceSingle);
28 CPPUNIT_TEST(testHighestPresenceMultiple); 28 CPPUNIT_TEST(testHighestPresenceMultiple);
29 CPPUNIT_TEST(testHighestPresenceGlobal); 29 CPPUNIT_TEST(testHighestPresenceGlobal);
30 CPPUNIT_TEST(testHighestPresenceChangePriority); 30 CPPUNIT_TEST(testHighestPresenceChangePriority);
31 CPPUNIT_TEST(testGetActivePresence);
31 CPPUNIT_TEST_SUITE_END(); 32 CPPUNIT_TEST_SUITE_END();
32 33
33 public: 34 public:
34 void setUp() { 35 void setUp() {
35 stanzaChannel_ = new DummyStanzaChannel(); 36 stanzaChannel_ = new DummyStanzaChannel();
@@ -50,19 +51,19 @@ class PresenceOracleTest : public CppUnit::TestFixture {
50 delete xmppRoster_; 51 delete xmppRoster_;
51 delete stanzaChannel_; 52 delete stanzaChannel_;
52 } 53 }
53 54
54 void testHighestPresenceSingle() { 55 void testHighestPresenceSingle() {
55 JID bareJID("alice@wonderland.lit"); 56 JID bareJID("alice@wonderland.lit");
56 Presence::ref fiveOn = makeOnline("blah", 5); 57 Presence::ref fiveOn = makeOnline("blah", 5);
57 Presence::ref fiveOff = makeOffline("/blah"); 58 Presence::ref fiveOff = makeOffline("/blah");
58 CPPUNIT_ASSERT_EQUAL(Presence::ref(), oracle_->getHighestPriorityPresence(bareJID)); 59 CPPUNIT_ASSERT_EQUAL(Presence::ref(), oracle_->getHighestPriorityPresence(bareJID));
59 stanzaChannel_->onPresenceReceived(fiveOn); 60 stanzaChannel_->onPresenceReceived(fiveOn);
60 CPPUNIT_ASSERT_EQUAL(fiveOn, oracle_->getHighestPriorityPresence(bareJID)); 61 CPPUNIT_ASSERT_EQUAL(fiveOn, oracle_->getHighestPriorityPresence(bareJID));
61 stanzaChannel_->onPresenceReceived(fiveOff); 62 stanzaChannel_->onPresenceReceived(fiveOff);
62 CPPUNIT_ASSERT_EQUAL(fiveOff, oracle_->getHighestPriorityPresence(bareJID)); 63 CPPUNIT_ASSERT_EQUAL(fiveOff, oracle_->getHighestPriorityPresence(bareJID));
63 } 64 }
64 65
65 void testHighestPresenceMultiple() { 66 void testHighestPresenceMultiple() {
66 JID bareJID("alice@wonderland.lit"); 67 JID bareJID("alice@wonderland.lit");
67 Presence::ref fiveOn = makeOnline("blah", 5); 68 Presence::ref fiveOn = makeOnline("blah", 5);
68 Presence::ref fiveOff = makeOffline("/blah"); 69 Presence::ref fiveOff = makeOffline("/blah");
@@ -149,12 +150,56 @@ class PresenceOracleTest : public CppUnit::TestFixture {
149 stanzaChannel_->setAvailable(false); 150 stanzaChannel_->setAvailable(false);
150 stanzaChannel_->setAvailable(true); 151 stanzaChannel_->setAvailable(true);
151 152
152 CPPUNIT_ASSERT(!oracle_->getLastPresence(user1)); 153 CPPUNIT_ASSERT(!oracle_->getLastPresence(user1));
153 } 154 }
155
156 void testGetActivePresence() {
157 {
158 std::vector<Presence::ref> presenceList;
159 presenceList.push_back(createPresence("alice@wonderland.lit/resourceA", 10, Presence::Available, StatusShow::Away));
160 presenceList.push_back(createPresence("alice@wonderland.lit/resourceB", 5, Presence::Available, StatusShow::Online));
161
162 CPPUNIT_ASSERT_EQUAL(StatusShow::Online, PresenceOracle::getActivePresence(presenceList)->getShow());
163 }
164
165 {
166 std::vector<Presence::ref> presenceList;
167 presenceList.push_back(createPresence("alice@wonderland.lit/resourceA", 10, Presence::Available, StatusShow::Away));
168 presenceList.push_back(createPresence("alice@wonderland.lit/resourceB", 5, Presence::Available, StatusShow::DND));
169
170 CPPUNIT_ASSERT_EQUAL(StatusShow::DND, PresenceOracle::getActivePresence(presenceList)->getShow());
171 }
172
173 {
174 std::vector<Presence::ref> presenceList;
175 presenceList.push_back(createPresence("alice@wonderland.lit/resourceA", 0, Presence::Available, StatusShow::Online));
176 presenceList.push_back(createPresence("alice@wonderland.lit/resourceB", 0, Presence::Available, StatusShow::DND));
177
178 CPPUNIT_ASSERT_EQUAL(StatusShow::Online, PresenceOracle::getActivePresence(presenceList)->getShow());
179 }
180
181 {
182 std::vector<Presence::ref> presenceList;
183 presenceList.push_back(createPresence("alice@wonderland.lit/resourceA", 1, Presence::Available, StatusShow::Online));
184 presenceList.push_back(createPresence("alice@wonderland.lit/resourceB", 0, Presence::Available, StatusShow::Online));
185
186 CPPUNIT_ASSERT_EQUAL(JID("alice@wonderland.lit/resourceA"), PresenceOracle::getActivePresence(presenceList)->getFrom());
187 }
188 }
154 189
155 private: 190 private:
191 Presence::ref createPresence(const JID &jid, int priority, Presence::Type type, const StatusShow::Type& statusShow) {
192 Presence::ref presence = boost::make_shared<Presence>();
193 presence->setFrom(jid);
194 presence->setPriority(priority);
195 presence->setType(type);
196 presence->setShow(statusShow);
197 return presence;
198 }
199
200
156 Presence::ref makeOnline(const std::string& resource, int priority) { 201 Presence::ref makeOnline(const std::string& resource, int priority) {
157 Presence::ref presence(new Presence()); 202 Presence::ref presence(new Presence());
158 presence->setPriority(priority); 203 presence->setPriority(priority);
159 presence->setFrom(JID("alice@wonderland.lit/" + resource)); 204 presence->setFrom(JID("alice@wonderland.lit/" + resource));
160 return presence; 205 return presence;