Merge with Andrew
authorFredrik Wendt <fredrik@wendt.se>
Wed, 9 Jun 2010 12:32:44 +0000 (13:32 +0100)
committerFredrik Wendt <fredrik@wendt.se>
Wed, 9 Jun 2010 12:32:44 +0000 (13:32 +0100)
Signed-off-by: Fredrik Wendt <fredrik@wendt.se>

package/src/org/maemo/hermes/engine/facebook/service.py
package/test/unit/test_facebook.py

index 6fa6c68..30d24cc 100644 (file)
@@ -15,9 +15,6 @@ class Service(org.maemo.hermes.engine.service.Service):
 
     # -----------------------------------------------------------------------
     def __init__(self, service_id, facebook, create_birthday_only = False):
-        """Initialise the Facebook service, finding Facebook API keys in gconf and
-           having a gui_callback available."""
-        
         self.fb = facebook
         self._service_id = service_id
         
@@ -30,32 +27,40 @@ class Service(org.maemo.hermes.engine.service.Service):
 
 
     # -----------------------------------------------------------------------
-    def get_name(self):
-        return "Facebook"
-    
-
-    # -----------------------------------------------------------------------
     def get_friends(self):
+        """Returns all friends on Facebook"""
+        
         return self._contacts_by_friend.keys()
     
     
+    # -----------------------------------------------------------------------
     def get_contacts_with_match(self):
+        """Returns a dict, where each key value pair is a contact (key) that 
+           matched a friend (value)"""
+
         return self._friends_by_contact
     
+    
+    # -----------------------------------------------------------------------
     def get_unmatched_friends(self):
+        """Returns a list of all friends that didn't match a contact."""
+         
         return self._friends_by_name.values()
 
 
     # -----------------------------------------------------------------------
     def pre_process_contact(self, contact):
-        """Registers URLs of all previous mappings, and makes sure that any Friends with those
-           URLs don't get match by name."""
+        """Registers URLs of all previous mappings, and makes sure that any 
+           friend with such a URL don't get match by name."""
+           
         for url in contact.get_urls():
             self._known_urls.add(url)
     
     
     # -----------------------------------------------------------------------
     def process_friends(self):
+        """Retreives data from Facebook and parse that into Friend 
+           objects."""
         
         def if_defined(data, key, callback):
             if key in data and data[key]:
@@ -86,6 +91,9 @@ class Service(org.maemo.hermes.engine.service.Service):
 
     # -----------------------------------------------------------------------
     def process_contact(self, contact):
+        """If the contact is matched with a friend, that friend is returned,
+           otherwise None."""
+           
         matched_friend = None
         if self._friends_by_contact.has_key(contact):
             matched_friend = self._friends_by_contact[contact]
@@ -119,6 +127,7 @@ class Service(org.maemo.hermes.engine.service.Service):
 
     # -----------------------------------------------------------------------
     def _get_friends_data(self):
-        """Returns a list of dicts, where each dict represents a friend/contact"""
+        """Returns a list of dicts, where each dict represents the raw data
+           of a friend"""
         
         return self.fb.users.getInfo(self.fb.friends.get(), Service.attrs)
index b0e5f95..c1725b9 100644 (file)
@@ -4,7 +4,6 @@ from org.maemo.hermes.engine.friend import Friend
 import unittest
 
 
-
 class FakeContact():
     id_counter = 0
     def __init__(self, name, addr, id=None):
@@ -19,13 +18,14 @@ class FakeContact():
     def get_identifiers(self):
         return [canonical(self.name)]
     
+
 class TestFacebookService(unittest.TestCase):
     
     def setUp(self):
         self.testee = Service("facebook", None)
         
         
-    def test_that_process_known_contact_returns_friend_object(self):
+    def test_that_process_contact_returns_friend_object_for_known_contact(self):
         known_url = 'http://www.facebook.com/profile.php?id=123456'
         known_contact = FakeContact('Facebook Junkie', [known_url])
         self._fake_server_response([{'uid':'123456','name':'Facebook Junkie'}])
@@ -35,6 +35,15 @@ class TestFacebookService(unittest.TestCase):
         assert isinstance(result, Friend)
 
 
+    def test_that_process_contact_returns_None_for_unknown_contact(self):
+        known_contact = FakeContact('Facebook Junkie', [])
+        self._fake_server_response([])
+        
+        self.testee.process_friends()
+        result = self.testee.process_contact(known_contact)
+        assert result is None
+
+
     def test_main_flow_one_match_by_url_one_by_name(self):
         # arrange
         self.existing_address = 'http://www.facebook.com/profile.php?id=123456'
@@ -66,10 +75,11 @@ class TestFacebookService(unittest.TestCase):
         
         
     def test_name_collision_avoided_by_previous_matching(self):
-        contact_do_match = FakeContact("Same Name", ["http://www.facebook.com/profile.php?id=123"], 1);
-        contact_no_match = FakeContact("Same Name", [None], 2)
+        name = "Same Name"
+        contact_do_match = FakeContact(name, ["http://www.facebook.com/profile.php?id=123"], 1);
+        contact_no_match = FakeContact(name, [None], 2)
         
-        data = [{'uid':'123','name':'Same Name'}]
+        data = [{'uid':'123','name':name}]
         self._fake_server_response(data)
         
         self._run_service([contact_no_match, contact_do_match])
@@ -81,10 +91,11 @@ class TestFacebookService(unittest.TestCase):
 
       
     def test_name_collision_avoided_only_one_person_matched(self):
-        contact_do_match = FakeContact("Same Name", ["http://twitter.com/same_name"]);
-        contact_no_match = FakeContact("Same Name", [None])
+        name = "Same Name"
+        contact_do_match = FakeContact(name, ["Contact 1"]);
+        contact_no_match = FakeContact(name, ["Contact 2"])
         
-        data = [{'uid':'123','name':'Same Name'}]
+        data = [{'uid':'123','name':name}]
         self._fake_server_response(data)
         
         self._run_service([contact_no_match, contact_do_match])