1 from org.maemo.hermes.engine.twitter.service import Service
2 from org.maemo.hermes.engine.names import canonical
6 def __init__(self, name, addr):
13 def get_identifiers(self):
14 return [canonical(self.name)]
17 def __init__(self, name, screen_name, props=None):
20 self["screen_name"] = screen_name
23 self[key] = props[key]
24 def __setitem__(self, key, value):
25 self._props[key] = value
26 def __getattr__(self, key):
28 return self._props[key]
33 class TestTwitterService(unittest.TestCase):
36 self.testee = Service(None)
39 def test_main_flow(self):
40 twitterName = "Twitter Name"
41 self._fake_server([FakeTweeter(twitterName, "wendtse", {"url":"http://wendt.se"})])
42 contact = FakeContact("Fredrik Wendt", ["http://twitter.com/wendtse"])
44 self._exercise_service([contact])
46 assert len(self.testee.get_unmatched_friends()) == 0
47 matchers = self.testee.get_contacts_with_match()
48 assert contact in matchers
49 assert twitterName == matchers[contact].get_name()
50 assert contact == self.testee._get_friend_by_contact(contact)['contact']
53 def test_name_collision_avoided_by_previous_matching(self):
54 twitterName = "Same Name"
55 known_tweeter = FakeTweeter(twitterName, "samename")
56 other_tweeter = FakeTweeter(twitterName, "otherscreenname")
57 self._fake_server([other_tweeter, known_tweeter])
58 contact = FakeContact(twitterName, [])
60 self._exercise_service([contact])
62 assert len(self.testee.get_unmatched_friends()) == 1
63 matchers = self.testee.get_contacts_with_match()
64 assert contact in matchers
65 assert contact == self.testee._get_friend_by_contact(contact)['contact']
68 def test_name_collision_avoided_only_one_person_matched(self):
69 twitter_name = "Same Name"
70 screen_name = "samename"
71 known_tweeter = FakeTweeter(twitter_name, screen_name)
72 other_tweeter = FakeTweeter(twitter_name, "otherscreenname")
73 self._fake_server([other_tweeter, known_tweeter])
74 contact = FakeContact(twitter_name, ["http://twitter.com/" + screen_name])
76 self._exercise_service([contact])
78 assert len(self.testee.get_unmatched_friends()) == 1
79 matchers = self.testee.get_contacts_with_match()
80 assert contact in matchers
81 assert screen_name == matchers[contact].get_nickname()
82 assert contact == matchers[contact]['contact']
83 assert contact == self.testee._get_friend_by_contact(contact)['contact']
86 def _exercise_service(self, contacts):
87 for contact in contacts:
88 self.testee.pre_process_contact(contact)
89 self.testee.process_friends()
90 for contact in contacts:
91 self.testee.process_contact(contact)
93 def _fake_server(self, data):
94 self._fake_data = data
95 self.testee._get_tweeters = self._get_tweeters
97 def _get_tweeters(self):
98 return self._fake_data
100 if __name__ == '__main__':