diff options
| -rw-r--r-- | Swiften/Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp | 14 | ||||
| -rw-r--r-- | Swiften/Avatars/VCardUpdateAvatarManager.cpp | 11 |
2 files changed, 21 insertions, 4 deletions
diff --git a/Swiften/Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp b/Swiften/Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp index ce100ee..5a98a0e 100644 --- a/Swiften/Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp +++ b/Swiften/Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp | |||
| @@ -25,10 +25,11 @@ class VCardUpdateAvatarManagerTest : public CppUnit::TestFixture { | |||
| 25 | CPPUNIT_TEST_SUITE(VCardUpdateAvatarManagerTest); | 25 | CPPUNIT_TEST_SUITE(VCardUpdateAvatarManagerTest); |
| 26 | CPPUNIT_TEST(testUpdate_NewHashNewVCardRequestsVCard); | 26 | CPPUNIT_TEST(testUpdate_NewHashNewVCardRequestsVCard); |
| 27 | CPPUNIT_TEST(testUpdate_NewHashStoresAvatarAndEmitsNotificationOnVCardReceive); | 27 | CPPUNIT_TEST(testUpdate_NewHashStoresAvatarAndEmitsNotificationOnVCardReceive); |
| 28 | CPPUNIT_TEST(testUpdate_KnownHash); | 28 | CPPUNIT_TEST(testUpdate_KnownHash); |
| 29 | CPPUNIT_TEST(testUpdate_KnownHashFromDifferentUserDoesNotRequestVCardButTriggersNotification); | 29 | CPPUNIT_TEST(testUpdate_KnownHashFromDifferentUserDoesNotRequestVCardButTriggersNotification); |
| 30 | CPPUNIT_TEST(testVCardWithEmptyPhoto); | ||
| 30 | CPPUNIT_TEST(testStanzaChannelReset); | 31 | CPPUNIT_TEST(testStanzaChannelReset); |
| 31 | CPPUNIT_TEST_SUITE_END(); | 32 | CPPUNIT_TEST_SUITE_END(); |
| 32 | 33 | ||
| 33 | public: | 34 | public: |
| 34 | void setUp() { | 35 | void setUp() { |
| @@ -101,10 +102,19 @@ class VCardUpdateAvatarManagerTest : public CppUnit::TestFixture { | |||
| 101 | CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(changes.size())); | 102 | CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(changes.size())); |
| 102 | CPPUNIT_ASSERT_EQUAL(user2.toBare(), changes[0].first); | 103 | CPPUNIT_ASSERT_EQUAL(user2.toBare(), changes[0].first); |
| 103 | CPPUNIT_ASSERT_EQUAL(avatar1Hash, changes[0].second); | 104 | CPPUNIT_ASSERT_EQUAL(avatar1Hash, changes[0].second); |
| 104 | } | 105 | } |
| 105 | 106 | ||
| 107 | void testVCardWithEmptyPhoto() { | ||
| 108 | std::auto_ptr<VCardUpdateAvatarManager> testling = createManager(); | ||
| 109 | vcardManager->requestVCard(JID("foo@bar.com")); | ||
| 110 | stanzaChannel->onIQReceived(createVCardResult(ByteArray())); | ||
| 111 | |||
| 112 | CPPUNIT_ASSERT(!avatarStorage->hasAvatar(Hexify::hexify(SHA1::getHash(ByteArray())))); | ||
| 113 | CPPUNIT_ASSERT_EQUAL(boost::filesystem::path(), testling->getAvatarPath(JID("foo@bar.com"))); | ||
| 114 | } | ||
| 115 | |||
| 106 | void testStanzaChannelReset() { | 116 | void testStanzaChannelReset() { |
| 107 | std::auto_ptr<VCardUpdateAvatarManager> testling = createManager(); | 117 | std::auto_ptr<VCardUpdateAvatarManager> testling = createManager(); |
| 108 | stanzaChannel->onPresenceReceived(createPresenceWithPhotoHash(user1, avatar1Hash)); | 118 | stanzaChannel->onPresenceReceived(createPresenceWithPhotoHash(user1, avatar1Hash)); |
| 109 | stanzaChannel->onIQReceived(createVCardResult(avatar1)); | 119 | stanzaChannel->onIQReceived(createVCardResult(avatar1)); |
| 110 | changes.clear(); | 120 | changes.clear(); |
| @@ -133,11 +143,13 @@ class VCardUpdateAvatarManagerTest : public CppUnit::TestFixture { | |||
| 133 | return presence; | 143 | return presence; |
| 134 | } | 144 | } |
| 135 | 145 | ||
| 136 | IQ::ref createVCardResult(const ByteArray& avatar) { | 146 | IQ::ref createVCardResult(const ByteArray& avatar) { |
| 137 | VCard::ref vcard(new VCard()); | 147 | VCard::ref vcard(new VCard()); |
| 138 | vcard->setPhoto(avatar); | 148 | if (!avatar.isEmpty()) { |
| 149 | vcard->setPhoto(avatar); | ||
| 150 | } | ||
| 139 | return IQ::createResult(JID("baz@fum.com"), stanzaChannel->sentStanzas[0]->getID(), vcard); | 151 | return IQ::createResult(JID("baz@fum.com"), stanzaChannel->sentStanzas[0]->getID(), vcard); |
| 140 | } | 152 | } |
| 141 | 153 | ||
| 142 | void handleAvatarChanged(const JID& jid, const String& hash) { | 154 | void handleAvatarChanged(const JID& jid, const String& hash) { |
| 143 | changes.push_back(std::pair<JID,String>(jid, hash)); | 155 | changes.push_back(std::pair<JID,String>(jid, hash)); |
diff --git a/Swiften/Avatars/VCardUpdateAvatarManager.cpp b/Swiften/Avatars/VCardUpdateAvatarManager.cpp index dbc0b9b..24abfa1 100644 --- a/Swiften/Avatars/VCardUpdateAvatarManager.cpp +++ b/Swiften/Avatars/VCardUpdateAvatarManager.cpp | |||
| @@ -50,13 +50,18 @@ void VCardUpdateAvatarManager::handleVCardChanged(const JID& from, VCard::ref vC | |||
| 50 | if (!vCard) { | 50 | if (!vCard) { |
| 51 | std::cerr << "Warning: " << from << ": null vcard payload" << std::endl; | 51 | std::cerr << "Warning: " << from << ": null vcard payload" << std::endl; |
| 52 | return; | 52 | return; |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | String hash = Hexify::hexify(SHA1::getHash(vCard->getPhoto())); | 55 | if (vCard->getPhoto().isEmpty()) { |
| 56 | avatarStorage_->addAvatar(hash, vCard->getPhoto()); | 56 | setAvatarHash(from, ""); |
| 57 | setAvatarHash(from, hash); | 57 | } |
| 58 | else { | ||
| 59 | String hash = Hexify::hexify(SHA1::getHash(vCard->getPhoto())); | ||
| 60 | avatarStorage_->addAvatar(hash, vCard->getPhoto()); | ||
| 61 | setAvatarHash(from, hash); | ||
| 62 | } | ||
| 58 | } | 63 | } |
| 59 | 64 | ||
| 60 | void VCardUpdateAvatarManager::setAvatarHash(const JID& from, const String& hash) { | 65 | void VCardUpdateAvatarManager::setAvatarHash(const JID& from, const String& hash) { |
| 61 | avatarHashes_[from] = hash; | 66 | avatarHashes_[from] = hash; |
| 62 | onAvatarChanged(from, hash); | 67 | onAvatarChanged(from, hash); |
Swift