Skip to content

Commit

Permalink
Implement follow and unfollow broadcasting for FakeTwitterData
Browse files Browse the repository at this point in the history
  • Loading branch information
justinvdm committed Mar 20, 2014
1 parent 07e5bf2 commit e8523ad
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 37 deletions.
19 changes: 11 additions & 8 deletions txtwitter/tests/fake_twitter.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,13 +309,15 @@ def broadcast_dm(self, dm):
if stream.accepts('dm', dm):
stream.deliver({'direct_message': dm.to_dict(self)})

def broadcast_follow(self, source_id, target_id):
pass
# TODO
def broadcast_follow(self, follow):
for stream in self.streams.itervalues():
if stream.accepts('follow', follow):
stream.deliver(follow.to_dict(self, event='follow'))

def broadcast_unfollow(self, source_id, target_id):
pass
# TODO
def broadcast_unfollow(self, follow):
for stream in self.streams.itervalues():
if stream.accepts('unfollow', follow):
stream.deliver(follow.to_dict(self, event='unfollow'))

def new_stream(self):
stream = FakeStream()
Expand Down Expand Up @@ -361,7 +363,7 @@ def add_follow(self, source_id, target_id):

if key not in self.follows:
follow = self.follows[key] = FakeFollow(source_id, target_id)
self.broadcast_follow(source_id, target_id)
self.broadcast_follow(follow)
else:
follow = self.follows[key]

Expand All @@ -380,8 +382,9 @@ def del_follow(self, source_id, target_id):
key = (source_id, target_id)

if key in self.follows:
follow = self.follows[key]
del self.follows[key]
self.broadcast_unfollow(source_id, target_id)
self.broadcast_unfollow(follow)

def new_tweet(self, text, user_id_str, *args, **kw):
tweet = self.add_tweet(
Expand Down
150 changes: 121 additions & 29 deletions txtwitter/tests/test_fake_twitter.py
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ def test_to_dict_event(self):

class TestFakeTwitterData(TestCase):
_FakeTwitterData = from_fake_twitter('FakeTwitterData')
_now = datetime(2014, 3, 11, 10, 48, 22, 687699)

def test_next_tweet_id(self):
twitter = self._FakeTwitterData()
Expand Down Expand Up @@ -400,6 +401,94 @@ def test_next_user_id(self):

self.assertEqual(id1, user1.id_str)

def test_broadcast_follow(self):
twitter = self._FakeTwitterData()
twitter.add_user('1', 'fakeuser', 'Fake User', created_at=self._now)
twitter.add_user('2', 'fakeuser2', 'Fake User 2', created_at=self._now)
follow1 = twitter.add_follow('1', '2')
follow2 = twitter.add_follow('2', '1')
follow1_dict = follow1.to_dict(twitter, event='follow')
follow2_dict = follow2.to_dict(twitter, event='follow')

stream1_messages = []
stream1 = twitter.new_stream()
stream1.add_message_type('follow', lambda f: f.source_id == '1')
protocol = FakeTwitterStreamProtocol(stream1_messages.append)
stream1.resp.deliverBody(protocol)

stream2_messages = []
stream2 = twitter.new_stream()
stream2.add_message_type('follow', lambda f: f.source_id == '2')
protocol = FakeTwitterStreamProtocol(stream2_messages.append)
stream2.resp.deliverBody(protocol)

twitter.broadcast_follow(follow1)
self.assertEqual(stream1_messages, [follow1_dict])
self.assertEqual(stream2_messages, [])

twitter.broadcast_follow(follow2)
self.assertEqual(stream1_messages, [follow1_dict])
self.assertEqual(stream2_messages, [follow2_dict])

def test_broadcast_unfollow(self):
twitter = self._FakeTwitterData()
twitter.add_user('1', 'fakeuser', 'Fake User', created_at=self._now)
twitter.add_user('2', 'fakeuser2', 'Fake User 2', created_at=self._now)
follow1 = twitter.add_follow('1', '2')
follow2 = twitter.add_follow('2', '1')
follow1_dict = follow1.to_dict(twitter, event='unfollow')
follow2_dict = follow2.to_dict(twitter, event='unfollow')

stream1_messages = []
stream1 = twitter.new_stream()
stream1.add_message_type('unfollow', lambda f: f.source_id == '1')
protocol = FakeTwitterStreamProtocol(stream1_messages.append)
stream1.resp.deliverBody(protocol)

stream2_messages = []
stream2 = twitter.new_stream()
stream2.add_message_type('unfollow', lambda f: f.source_id == '2')
protocol = FakeTwitterStreamProtocol(stream2_messages.append)
stream2.resp.deliverBody(protocol)

twitter.broadcast_unfollow(follow1)
self.assertEqual(stream1_messages, [follow1_dict])
self.assertEqual(stream2_messages, [])

twitter.broadcast_unfollow(follow2)
self.assertEqual(stream1_messages, [follow1_dict])
self.assertEqual(stream2_messages, [follow2_dict])

def test_add_follow(self):
twitter = self._FakeTwitterData()
self.assertEqual(twitter.follows, {})

twitter.add_follow('1', '2')
follow1 = twitter.follows[('1', '2')]
self.assertEqual(follow1.source_id, '1')
self.assertEqual(follow1.target_id, '2')

twitter.add_follow('2', '1')
follow2 = twitter.follows[('2', '1')]
self.assertEqual(follow2.source_id, '2')
self.assertEqual(follow2.target_id, '1')

def test_add_follow_broadcast(self):
twitter = self._FakeTwitterData()
twitter.add_user('1', 'fakeuser', 'Fake User')
twitter.add_user('2', 'fakeuser2', 'Fake User 2')

def predicate(f):
follows.append(f)
return True

follows = []
stream = twitter.new_stream()
stream.add_message_type('follow', predicate)

follow = twitter.add_follow('1', '2')
self.assertEqual(follows, [follow])

def test_del_tweet(self):
twitter = self._FakeTwitterData()
twitter.add_user('1', 'fakeuser', 'Fake User')
Expand All @@ -419,6 +508,38 @@ def test_del_dm(self):
twitter.del_dm('1')
self.assertEqual(twitter.get_dm('1'), None)

def test_del_follow(self):
twitter = self._FakeTwitterData()
twitter.add_follow('1', '2')
twitter.add_follow('2', '1')
self.assertTrue(('1', '2') in twitter.follows)
self.assertTrue(('2', '1') in twitter.follows)

twitter.del_follow('1', '2')
self.assertTrue(('1', '2') not in twitter.follows)
self.assertTrue(('2', '1') in twitter.follows)

twitter.del_follow('2', '1')
self.assertTrue(('1', '2') not in twitter.follows)
self.assertTrue(('2', '1') not in twitter.follows)

def test_del_follow_broadcast(self):
twitter = self._FakeTwitterData()
twitter.add_user('1', 'fakeuser', 'Fake User')
twitter.add_user('2', 'fakeuser2', 'Fake User 2')
follow = twitter.add_follow('1', '2')

def predicate(f):
follows.append(f)
return True

follows = []
stream = twitter.new_stream()
stream.add_message_type('unfollow', predicate)

twitter.del_follow('1', '2')
self.assertEqual(follows, [follow])

def test_user_dm(self):
twitter = self._FakeTwitterData()
user1 = twitter.add_user('1', 'fakeuser', 'Fake User')
Expand Down Expand Up @@ -449,35 +570,6 @@ def test_new_user(self):
self.assertEqual(user.screen_name, 'fakeuser')
self.assertEqual(user.name, 'Fake User')

def test_add_follow(self):
twitter = self._FakeTwitterData()
self.assertEqual(twitter.follows, {})

twitter.add_follow('1', '2')
follow1 = twitter.follows[('1', '2')]
self.assertEqual(follow1.source_id, '1')
self.assertEqual(follow1.target_id, '2')

twitter.add_follow('2', '1')
follow2 = twitter.follows[('2', '1')]
self.assertEqual(follow2.source_id, '2')
self.assertEqual(follow2.target_id, '1')

def test_del_follow(self):
twitter = self._FakeTwitterData()
twitter.add_follow('1', '2')
twitter.add_follow('2', '1')
self.assertTrue(('1', '2') in twitter.follows)
self.assertTrue(('2', '1') in twitter.follows)

twitter.del_follow('1', '2')
self.assertTrue(('1', '2') not in twitter.follows)
self.assertTrue(('2', '1') in twitter.follows)

twitter.del_follow('2', '1')
self.assertTrue(('1', '2') not in twitter.follows)
self.assertTrue(('2', '1') not in twitter.follows)


class TestFakeTwitter(TestCase):
_FakeTwitter = from_fake_twitter('FakeTwitter')
Expand Down

0 comments on commit e8523ad

Please sign in to comment.