Skip to content

Commit 34551d1

Browse files
committed
fixed mock call counts, code to only make api call if url on own line
1 parent 27ba1cb commit 34551d1

File tree

3 files changed

+81
-104
lines changed

3 files changed

+81
-104
lines changed

django_mesh/models.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,15 @@ def render(self, *args, **kwargs):
8888
for each in re.findall(URL_REGEX, plain_text):
8989
plain_text = plain_text.replace(each, '<a href="%s">%s</a>' % (each,each), 1)
9090

91-
try:
92-
93-
oembed = pyembed.embed(matching_text_node)
94-
except:
95-
matching_text_node.replace_with(plain_text)
91+
if matching_text_node.parent.text == each: # if url on one line, each == url == matching_text_node
92+
try:
93+
oembed = pyembed.embed(matching_text_node)
94+
except:
95+
matching_text_node.replace_with(plain_text)
96+
else:
97+
matching_text_node.replace_with(oembed)
9698
else:
97-
matching_text_node.replace_with(oembed)
99+
matching_text_node.replace_with(plain_text)
98100

99101
soup = BeautifulSoup(soup.encode(formatter=None))
100102

django_mesh/tests/test_models.py

Lines changed: 42 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,34 @@ def test_markup(self):
6969
self.assertHTMLEqual(expected_html_markup_and_textile, self.p7.rendered_text)
7070
self.assertHTMLEqual(expected_html_markup_and_textile, self.p8.rendered_text)
7171

72+
def test_rendered_text_stays_the_same_when_no_links(self):
73+
self.assertNotEqual(self.p1.text, '')
74+
self.assertEqual(self.p1.rendered_text, '')
75+
76+
self.c1.save()
77+
self.p1.channel = self.c1
78+
self.p1.save()
79+
80+
self.assertEqual(self.p1.rendered_text, self.p1.text)
81+
82+
def test_get_absolute_url(self):
83+
self.c1.save()
84+
self.p1.channel = self.c1
85+
url = self.p1.get_absolute_url()
86+
87+
self.assertGreater(len(url),0)
88+
89+
def test_str_unicode(self):
90+
self.c1.save()
91+
self.p1.channel = self.c1
92+
self.p1.save()
93+
94+
95+
returned_title = str(self.p1)
96+
self.assertEqual(self.p1.title, returned_title)
97+
7298
@patch('requests.sessions.Session.request')
7399
def test_check_if_markdown_automatically_wrap_plain_URLs_in_anchor_tags(self, mock_request):
74-
youtube = get_mock_no_oembed()
75-
mock_request.return_value = Mock()
76-
mock_request.return_value.status_code = youtube.ysc
77-
mock_request.return_value.url = youtube.yu
78-
mock_request.return_value.headers = youtube.yh
79-
mock_request.return_value.cookies = youtube.yc
80-
mock_request.return_value.text = youtube.yt
81-
82100

83101
self.c1.save()
84102
self.p7.channel = self.c1
@@ -88,16 +106,10 @@ def test_check_if_markdown_automatically_wrap_plain_URLs_in_anchor_tags(self, mo
88106
self.p7.save() #markdown
89107

90108
self.assertHTMLEqual(expected_html, self.p7.rendered_text)
91-
self.assertEqual(mock_request.call_count, 1)
109+
self.assertEqual(mock_request.call_count, 0)
110+
92111
@patch('requests.sessions.Session.request')
93112
def test_simple(self, mock_request):
94-
youtube = get_mock_no_oembed()
95-
mock_request.return_value = Mock()
96-
mock_request.return_value.status_code = youtube.ysc
97-
mock_request.return_value.url = youtube.yu
98-
mock_request.return_value.headers = youtube.yh
99-
mock_request.return_value.cookies = youtube.yc
100-
mock_request.return_value.text = youtube.yt
101113

102114
self.c1.save()
103115
self.p1.channel = self.c1
@@ -109,27 +121,12 @@ def test_simple(self, mock_request):
109121
but not www.google.com\n \n should not have paragraph insert"""
110122

111123
self.assertHTMLEqual(expected_html,self.p1.rendered_text)
112-
self.assertEqual(mock_request.call_count, 1)
124+
self.assertEqual(mock_request.call_count, 0)
113125

114-
def test_rendered_text_stays_the_same_when_no_links(self):
115-
self.assertNotEqual(self.p1.text, '')
116-
self.assertEqual(self.p1.rendered_text, '')
117-
118-
self.c1.save()
119-
self.p1.channel = self.c1
120-
self.p1.save()
121-
122-
self.assertEqual(self.p1.rendered_text, self.p1.text)
123126
@patch('requests.sessions.Session.request')
124127
def test_automatic_anchors_to_links_on_own_line_if_markdown_chosen(self, mock_request):
125-
youtube = get_mock_no_oembed()
126-
mock_request.return_value = Mock()
127-
mock_request.return_value.status_code = youtube.ysc
128-
mock_request.return_value.url = youtube.yu
129-
mock_request.return_value.headers = youtube.yh
130-
mock_request.return_value.cookies = youtube.yc
131-
mock_request.return_value.text = youtube.yt
132-
128+
mock_request.side_effect = get_mock_no_oembed()
129+
133130
self.p7.text = "foo\n \n http://somelink\n" # generates foo, paragraph, anchored links
134131
expected_html = """<p>foo</p>
135132
<p><a href="http://somelink">http://somelink</a></p>"""
@@ -144,25 +141,21 @@ def test_automatic_anchors_to_links_on_own_line_if_markdown_chosen(self, mock_re
144141
self.assertEqual(mock_request.call_count, 1)
145142

146143
@patch('requests.sessions.Session.request')
147-
def test_embed_works_with_markdown(self, mock_request):
148-
youtube = get_mock()
144+
def test_doesnt_embed_with_surrounding_text(self, mock_request):
149145

150-
mock_obj_1 = Mock()
151-
mock_obj_1.status_code = youtube.ysc
152-
mock_obj_1.url = youtube.yu
153-
mock_obj_1.headers = youtube.yh
154-
mock_obj_1.cookies = youtube.yc
155-
mock_obj_1.text = youtube.yt
146+
self.c1.save()
147+
self.p7.text = "some text here, should NOT embed http://www.youtube.com/watch?v=Uqa8YSxx8Gs other text here"
148+
self.p7.channel = self.c1
149+
self.p7.save()
150+
expected_html = """<p>some text here, should NOT embed <a href="http://www.youtube.com/watch?v=Uqa8YSxx8Gs">http://www.youtube.com/watch?v=Uqa8YSxx8Gs</a> other text here</p>"""
156151

157-
mock_obj_2 = Mock()
158-
mock_obj_2.status_code = 200
159-
mock_obj_2.url = youtube.you
160-
mock_obj_2.headers = youtube.yoh
161-
mock_obj_2.text = youtube.yot
162-
mock_obj_2.json = youtube.yoj
152+
self.assertHTMLEqual(expected_html, self.p7.rendered_text)
153+
self.assertEqual(mock_request.call_count, 0)
163154

164-
mock_request.side_effect = iter([mock_obj_1, mock_obj_2])
155+
@patch('requests.sessions.Session.request')
156+
def test_embed_works_with_markdown(self, mock_request):
165157

158+
mock_request.side_effect = iter(get_mock())
166159

167160
self.c1.save()
168161
self.p7.text = "http://www.youtube.com/watch?v=Uqa8YSxx8Gs"
@@ -176,41 +169,6 @@ def test_embed_works_with_markdown(self, mock_request):
176169
self.assertHTMLEqual(expected_html, self.p7.rendered_text)
177170
self.assertEqual(mock_request.call_count, 2)
178171

179-
@patch('requests.sessions.Session.request')
180-
def test_doesnt_embed_with_surrounding_text(self, mock_request):
181-
youtube = get_mock_no_oembed()
182-
mock_request.return_value = Mock()
183-
mock_request.return_value.status_code = youtube.ysc
184-
mock_request.return_value.url = youtube.yu
185-
mock_request.return_value.headers = youtube.yh
186-
mock_request.return_value.cookies = youtube.yc
187-
mock_request.return_value.text = youtube.yt
188-
189-
self.c1.save()
190-
self.p7.text = "some text here, should NOT embed http://www.youtube.com/watch?v=Uqa8YSxx8Gs other text here"
191-
self.p7.channel = self.c1
192-
self.p7.save()
193-
expected_html = """<p>some text here, should NOT embed <a href="http://www.youtube.com/watch?v=Uqa8YSxx8Gs">http://www.youtube.com/watch?v=Uqa8YSxx8Gs</a> other text here</p>"""
194-
195-
self.assertHTMLEqual(expected_html, self.p7.rendered_text)
196-
self.assertEqual(mock_request.call_count, 1)
197-
198-
def test_get_absolute_url(self):
199-
self.c1.save()
200-
self.p1.channel = self.c1
201-
url = self.p1.get_absolute_url()
202-
203-
self.assertGreater(len(url),0)
204-
205-
def test_str_unicode(self):
206-
self.c1.save()
207-
self.p1.channel = self.c1
208-
self.p1.save()
209-
210-
211-
returned_title = str(self.p1)
212-
self.assertEqual(self.p1.title, returned_title)
213-
214172
class ChannelTestCase(BaseTestCase):
215173
def test_get_absolute_url(self):
216174
self.c1.save()

django_mesh/tests/youtube_data.py

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,21 +1618,38 @@
16181618
youtube_oembed_text = '{"height": 344, "title": "My Voicemail from Uncle Ruckus (Kickstarter Reward!)", "author_url": "http:\\/\\/www.youtube.com\\/user\\/gasphynx", "width": 459, "provider_name": "YouTube", "author_name": "Se\\u00e1n Hayes", "thumbnail_width": 480, "provider_url": "http:\\/\\/www.youtube.com\\/", "thumbnail_height": 360, "thumbnail_url": "http:\\/\\/i.ytimg.com\\/vi\\/Uqa8YSxx8Gs\\/hqdefault.jpg", "html": "\\u003ciframe width=\\"459\\" height=\\"344\\" src=\\"http:\\/\\/www.youtube.com\\/embed\\/Uqa8YSxx8Gs?feature=oembed\\" frameborder=\\"0\\" allowfullscreen\\u003e\\u003c\\/iframe\\u003e", "type": "video", "version": "1.0"}'
16191619
youtube_oembed_json = {u'provider_url': u'http://www.youtube.com/', u'version': u'1.0', u'title': u'My Voicemail from Uncle Ruckus (Kickstarter Reward!)', u'html': u'<iframe width="459" height="344" src="http://www.youtube.com/embed/Uqa8YSxx8Gs?feature=oembed" frameborder="0" allowfullscreen></iframe>', u'author_name': u'Se\xe1n Hayes', u'height': 344, u'thumbnail_width': 480, u'width': 459, u'thumbnail_url': u'http://i.ytimg.com/vi/Uqa8YSxx8Gs/hqdefault.jpg', u'author_url': u'http://www.youtube.com/user/gasphynx', u'provider_name': u'YouTube', u'type': u'video', u'thumbnail_height': 360}
16201620

1621-
1621+
from mock import Mock
16221622

16231623
def get_mock():
1624-
mock = MockYoutube.objects.create(
1625-
ysc = youtube_status_code,
1626-
yu = youtube_url,
1627-
yc = youtube_cookies,
1628-
yt = youtube_text,
1629-
yh = youtube_headers,
1630-
yosc = youtube_oembed_status_code,
1631-
you = youtube_oembed_url,
1632-
yoh = youtube_oembed_headers,
1633-
yot = youtube_oembed_text,
1634-
yoj = youtube_oembed_json,)
1635-
return mock
1624+
1625+
ysc = youtube_status_code
1626+
yu = youtube_url
1627+
yc = youtube_cookies
1628+
yt = youtube_text
1629+
yh = youtube_headers
1630+
yosc = youtube_oembed_status_code
1631+
you = youtube_oembed_url
1632+
yoh = youtube_oembed_headers
1633+
yot = youtube_oembed_text
1634+
yoj = youtube_oembed_json
1635+
1636+
mock_obj_1 = Mock()
1637+
mock_obj_1.status_code = ysc
1638+
mock_obj_1.url = yu
1639+
mock_obj_1.headers = yh
1640+
mock_obj_1.cookies = yc
1641+
mock_obj_1.text = yt
1642+
mock_obj_1.save()
1643+
1644+
mock_obj_2 = Mock()
1645+
mock_obj_2.status_code = 200
1646+
mock_obj_2.url = you
1647+
mock_obj_2.headers = yoh
1648+
mock_obj_2.text = yot
1649+
mock_obj_2.json = yoj
1650+
mock_obj_2.save()
1651+
1652+
return [mock_obj_1, mock_obj_2]
16361653

16371654
def get_mock_no_oembed():
16381655
mock = MockYoutube.objects.create(
@@ -1643,4 +1660,4 @@ def get_mock_no_oembed():
16431660
yh = 'youtube_headers',
16441661
yosc = 404,
16451662
)
1646-
return mock
1663+
return [mock]

0 commit comments

Comments
 (0)