1 from org.maemo.hermes.engine.linkedin.service import Service
2 from org.maemo.hermes.engine.names import canonical
3 from org.maemo.hermes.engine.friend import Friend
9 def __init__(self, name, addr, id=None):
12 self.id = id or FakeContact.id_counter
13 FakeContact.id_counter = FakeContact.id_counter + 1;
18 def get_identifiers(self):
19 return [canonical(self.name)]
21 class FakeLinkedInApi():
22 def get_friends(self):
24 def set_friends(self, data):
27 class UrlFriend(Friend):
28 def __init__(self, name, url):
29 Friend.__init__(self, name)
32 class TestLinkedInService(unittest.TestCase):
35 self.linkedInApi = FakeLinkedInApi()
36 self.testee = Service('linkedin', self.linkedInApi)
39 def test_that_process_contact_returns_None_for_unknown_contact(self):
40 contact = FakeContact('Person Person', [])
41 self._fake_server_response([])
43 self.testee.pre_process_contact(contact);
44 self.testee.process_friends()
45 friend = self.testee.process_contact(contact)
49 def test_that_process_contact_returns_friend_object_if_contact_is_known(self):
51 contact = FakeContact(same_name, [])
52 fake_friend = Friend(same_name)
53 self._fake_server_response([fake_friend])
55 self.testee.pre_process_contact(contact);
56 self.testee.process_friends()
57 friend = self.testee.process_contact(contact)
58 assert isinstance(friend, Friend)
61 def test_main_flow_one_match_by_url_one_by_name(self):
62 known_url = "http://linkedin/id=1"
63 contact_by_url = FakeContact("By Url", [known_url], 1)
64 friend_by_url = UrlFriend("Unimportant", known_url)
66 known_name = "By Name"
67 contact_by_name = FakeContact(known_name, [], 2)
68 friend_by_name = Friend(known_name)
70 self._fake_server_response([friend_by_name, friend_by_url])
72 self._run_service([contact_by_name, contact_by_url])
74 assert len(self.testee.get_unmatched_friends()) == 0
75 matchers = self.testee.get_contacts_with_match()
76 assert contact_by_name in matchers
77 assert contact_by_url in matchers
78 assert known_url in matchers[contact_by_url].get_urls()
79 assert contact_by_url == matchers[contact_by_url].get_contact()
80 assert contact_by_name == matchers[contact_by_name].get_contact()
83 def _run_service(self, contacts):
84 for contact in contacts:
85 self.testee.pre_process_contact(contact)
86 self.testee.process_friends()
87 for contact in contacts:
88 self.testee.process_contact(contact)
90 def _fake_server_response(self, data):
91 self.linkedInApi.set_friends(data)
94 if __name__ == '__main__':