1 from org.maemo.hermes.engine.twitter.service import Service
2 from org.maemo.hermes.engine.names import canonical
3 from org.maemo.hermes.engine.friend import Friend
7 def __init__(self, name, addr):
14 def get_identifiers(self):
15 return [canonical(self.name)]
18 def __init__(self, name, screen_name, props=None):
21 self["screen_name"] = screen_name
24 self[key] = props[key]
25 def __setitem__(self, key, value):
26 self._props[key] = value
27 def __getattr__(self, key):
29 return self._props[key]
34 class TestTwitterService(unittest.TestCase):
37 self.testee = Service(None)
40 def test_that_process_contact_returns_None_for_unknown_contact(self):
41 contact = FakeContact('Person Person', [])
44 self.testee.pre_process_contact(contact);
45 self.testee.process_friends()
46 friend = self.testee.process_contact(contact)
50 def test_that_process_contact_returns_friend_object_if_contact_is_known(self):
51 twitterName = "Same Name"
52 known_tweeter = FakeTweeter(twitterName, "samename")
53 contact = FakeContact(twitterName, [])
54 self._fake_server([known_tweeter])
56 self.testee.pre_process_contact(contact);
57 self.testee.process_friends()
58 friend = self.testee.process_contact(contact)
59 assert isinstance(friend, Friend)
62 def test_main_flow(self):
63 twitterName = "Twitter Name"
64 self._fake_server([FakeTweeter(twitterName, "wendtse", {"url":"http://wendt.se"})])
65 contact = FakeContact("Fredrik Wendt", ["http://twitter.com/wendtse"])
67 self._exercise_service([contact])
69 assert len(self.testee.get_unmatched_friends()) == 0
70 matchers = self.testee.get_contacts_with_match()
71 assert contact in matchers
72 assert twitterName == matchers[contact].get_name()
73 assert contact == self.testee._get_friend_by_contact(contact)['contact']
76 def test_name_collision_avoided_by_previous_matching(self):
77 twitterName = "Same Name"
78 known_tweeter = FakeTweeter(twitterName, "samename")
79 other_tweeter = FakeTweeter(twitterName, "otherscreenname")
80 self._fake_server([other_tweeter, known_tweeter])
81 contact = FakeContact(twitterName, [])
83 self._exercise_service([contact])
85 assert len(self.testee.get_unmatched_friends()) == 1
86 matchers = self.testee.get_contacts_with_match()
87 assert contact in matchers
88 assert contact == self.testee._get_friend_by_contact(contact)['contact']
91 def test_name_collision_avoided_only_one_person_matched(self):
92 twitter_name = "Same Name"
93 screen_name = "samename"
94 known_tweeter = FakeTweeter(twitter_name, screen_name)
95 other_tweeter = FakeTweeter(twitter_name, "otherscreenname")
96 self._fake_server([other_tweeter, known_tweeter])
97 contact = FakeContact(twitter_name, ["http://twitter.com/" + screen_name])
99 self._exercise_service([contact])
101 assert len(self.testee.get_unmatched_friends()) == 1
102 matchers = self.testee.get_contacts_with_match()
103 assert contact in matchers
104 assert screen_name == matchers[contact].get_nickname()
105 assert contact == matchers[contact]['contact']
106 assert contact == self.testee._get_friend_by_contact(contact)['contact']
109 def _exercise_service(self, contacts):
110 for contact in contacts:
111 self.testee.pre_process_contact(contact)
112 self.testee.process_friends()
113 for contact in contacts:
114 self.testee.process_contact(contact)
116 def _fake_server(self, data):
117 self._fake_data = data
118 self.testee._get_tweeters = self._get_tweeters
120 def _get_tweeters(self):
121 return self._fake_data
123 if __name__ == '__main__':