diff options
| author | Tobias Markmann <tm@ayena.de> | 2015-10-27 16:20:09 (GMT) |
|---|---|---|
| committer | Tobias Markmann <tm@ayena.de> | 2015-10-30 12:34:52 (GMT) |
| commit | 0f5ef716a50c8d9761cafda12aacf818cdfd6353 (patch) | |
| tree | 4ed80dedc2fa8b04036eb7567282094ea8fe07f1 /Swiften/Presence/UnitTest/PresenceOracleTest.cpp | |
| parent | 4320235bef1b601856b295a8d6411d1898048802 (diff) | |
| download | swift-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.cpp | 63 |
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; |
Swift