Mercurial > silorider
comparison tests/test_silos_twitter.py @ 4:c199bd681e4e
Twitter API accepts direct URLs for media.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 29 Jul 2018 14:27:24 -0700 |
parents | 27543b2e73b9 |
children | a921cc2306bc |
comparison
equal
deleted
inserted
replaced
3:98687befb7bf | 4:c199bd681e4e |
---|---|
1 import pytest | 1 import pytest |
2 from .mockutil import mock_urllib | |
3 | 2 |
4 | 3 |
5 def test_one_article(cli, feedutil, tweetmock): | 4 def test_one_article(cli, feedutil, tweetmock): |
6 feed = cli.createTempFeed(feedutil.makeFeed( | 5 feed = cli.createTempFeed(feedutil.makeFeed( |
7 """<h1 class="p-name">A new article</h1> | 6 """<h1 class="p-name">A new article</h1> |
16 tweetmock.installTokens(cli, 'test') | 15 tweetmock.installTokens(cli, 'test') |
17 | 16 |
18 ctx, _ = cli.run('process', feed) | 17 ctx, _ = cli.run('process', feed) |
19 assert ctx.cache.wasPosted('test', 'https://example.org/a-new-article') | 18 assert ctx.cache.wasPosted('test', 'https://example.org/a-new-article') |
20 toot = ctx.silos[0].client.tweets[0] | 19 toot = ctx.silos[0].client.tweets[0] |
21 assert toot == ('A new article https://example.org/a-new-article', None) | 20 assert toot == ('A new article https://example.org/a-new-article', []) |
22 | 21 |
23 | 22 |
24 def test_one_micropost(cli, feedutil, tweetmock): | 23 def test_one_micropost(cli, feedutil, tweetmock): |
25 feed = cli.createTempFeed(feedutil.makeFeed( | 24 feed = cli.createTempFeed(feedutil.makeFeed( |
26 """<p class="p-name">This is a quick update.</p> | 25 """<p class="p-name">This is a quick update.</p> |
31 tweetmock.installTokens(cli, 'test') | 30 tweetmock.installTokens(cli, 'test') |
32 | 31 |
33 ctx, _ = cli.run('process', feed) | 32 ctx, _ = cli.run('process', feed) |
34 assert ctx.cache.wasPosted('test', '/01234.html') | 33 assert ctx.cache.wasPosted('test', '/01234.html') |
35 toot = ctx.silos[0].client.tweets[0] | 34 toot = ctx.silos[0].client.tweets[0] |
36 assert toot == ("This is a quick update.", None) | 35 assert toot == ("This is a quick update.", []) |
37 | 36 |
38 | 37 |
39 def test_one_micropost_with_one_photo(cli, feedutil, tweetmock, monkeypatch): | 38 def test_one_micropost_with_one_photo(cli, feedutil, tweetmock, monkeypatch): |
40 feed = cli.createTempFeed(feedutil.makeFeed( | 39 feed = cli.createTempFeed(feedutil.makeFeed( |
41 """<p class="p-name">This is a quick photo update.</p> | 40 """<p class="p-name">This is a quick photo update.</p> |
46 )) | 45 )) |
47 | 46 |
48 cli.appendSiloConfig('test', 'twitter', url='/blah') | 47 cli.appendSiloConfig('test', 'twitter', url='/blah') |
49 tweetmock.installTokens(cli, 'test') | 48 tweetmock.installTokens(cli, 'test') |
50 | 49 |
51 with monkeypatch.context() as m: | 50 ctx, _ = cli.run('process', feed) |
52 import silorider.silos.twitter | |
53 mock_urllib(m) | |
54 m.setattr(silorider.silos.twitter.TwitterSilo, '_media_callback', | |
55 _patched_media_callback) | |
56 ctx, _ = cli.run('process', feed) | |
57 | 51 |
58 assert ctx.cache.wasPosted('test', '/01234.html') | 52 assert ctx.cache.wasPosted('test', '/01234.html') |
59 media = ctx.silos[0].client.media[0] | |
60 assert media == ('/retrieved/fullimg.jpg', 1) | |
61 toot = ctx.silos[0].client.tweets[0] | 53 toot = ctx.silos[0].client.tweets[0] |
62 assert toot == ("This is a quick photo update.", [1]) | 54 assert toot == ("This is a quick photo update.", ['/fullimg.jpg']) |
63 | 55 |
64 | 56 |
65 def test_one_micropost_with_two_photos(cli, feedutil, tweetmock, monkeypatch): | 57 def test_one_micropost_with_two_photos(cli, feedutil, tweetmock, monkeypatch): |
66 feed = cli.createTempFeed(feedutil.makeFeed( | 58 feed = cli.createTempFeed(feedutil.makeFeed( |
67 """<p class="p-name">This is a photo update with 2 photos.</p> | 59 """<p class="p-name">This is a photo update with 2 photos.</p> |
73 )) | 65 )) |
74 | 66 |
75 cli.appendSiloConfig('test', 'twitter', url='/blah') | 67 cli.appendSiloConfig('test', 'twitter', url='/blah') |
76 tweetmock.installTokens(cli, 'test') | 68 tweetmock.installTokens(cli, 'test') |
77 | 69 |
78 with monkeypatch.context() as m: | 70 ctx, _ = cli.run('process', feed) |
79 import silorider.silos.twitter | |
80 mock_urllib(m) | |
81 m.setattr(silorider.silos.twitter.TwitterSilo, '_media_callback', | |
82 _patched_media_callback) | |
83 ctx, _ = cli.run('process', feed) | |
84 | 71 |
85 assert ctx.cache.wasPosted('test', '/01234.html') | 72 assert ctx.cache.wasPosted('test', '/01234.html') |
86 media = ctx.silos[0].client.media[0] | |
87 assert media == ('/retrieved/fullimg1.jpg', 1) | |
88 media = ctx.silos[0].client.media[1] | |
89 assert media == ('/retrieved/fullimg2.jpg', 2) | |
90 toot = ctx.silos[0].client.tweets[0] | 73 toot = ctx.silos[0].client.tweets[0] |
91 assert toot == ("This is a photo update with 2 photos.", [1, 2]) | 74 assert toot == ("This is a photo update with 2 photos.", |
92 | 75 ['/fullimg1.jpg', '/fullimg2.jpg']) |
93 | |
94 def _patched_media_callback(self, tmpfile, mt): | |
95 return self.client.UploadMediaChunked(tmpfile) | |
96 | 76 |
97 | 77 |
98 @pytest.fixture(scope='session') | 78 @pytest.fixture(scope='session') |
99 def tweetmock(): | 79 def tweetmock(): |
100 from silorider.silos.twitter import TwitterSilo | 80 from silorider.silos.twitter import TwitterSilo |
109 assert consumer_secret == 'TEST_CLIENT_SECRET' | 89 assert consumer_secret == 'TEST_CLIENT_SECRET' |
110 assert access_token_key == 'TEST_ACCESS_KEY' | 90 assert access_token_key == 'TEST_ACCESS_KEY' |
111 assert access_token_secret == 'TEST_ACCESS_SECRET' | 91 assert access_token_secret == 'TEST_ACCESS_SECRET' |
112 | 92 |
113 self.tweets = [] | 93 self.tweets = [] |
114 self.media = [] | |
115 self.next_mid = 1 | |
116 | 94 |
117 def PostUpdate(self, tweet, media=None): | 95 def PostUpdate(self, tweet, media=None): |
118 self.tweets.append((tweet, media)) | 96 self.tweets.append((tweet, media)) |
119 | |
120 def UploadMediaChunked(self, filename): | |
121 mid = self.next_mid | |
122 self.next_mid += 1 | |
123 self.media.append((filename, mid)) | |
124 return mid | |
125 | 97 |
126 | 98 |
127 class TwitterMockUtil: | 99 class TwitterMockUtil: |
128 def installTokens(self, cli, silo_name): | 100 def installTokens(self, cli, silo_name): |
129 def do_install_tokens(ctx): | 101 def do_install_tokens(ctx): |