+
hello
""" + expected_html_simple = """hello""" - def test_render_adds_anchors(self): - self.p1.text = """foo - http://somelink - http://anotherlink - """ + self.assertHTMLEqual(expected_html_simple, self.p1.rendered_text) + self.assertHTMLEqual(expected_html_markup_and_textile, self.p7.rendered_text) + self.assertHTMLEqual(expected_html_markup_and_textile, self.p8.rendered_text) + + def test_rendered_text_stays_the_same_when_no_links(self): + self.assertNotEqual(self.p1.text, '') self.assertEqual(self.p1.rendered_text, '') self.c1.save() self.p1.channel = self.c1 self.p1.save() - self.assertEqual(self.p1.rendered_text, """foo - http://somelink - http://anotherlink - """) + self.assertEqual(self.p1.rendered_text, self.p1.text) def test_get_absolute_url(self): self.c1.save() @@ -78,6 +99,80 @@ def test_str_unicode(self): returned_title = str(self.p1) self.assertEqual(self.p1.title, returned_title) + @patch('requests.sessions.Session.request') + def test_check_if_markdown_automatically_wrap_plain_URLs_in_anchor_tags(self, mock_request): + + self.c1.save() + self.p7.channel = self.c1 + + self.p7.text = 'hello, \n plain_url \n www.google.com \n or \n https://www.google.com' # only add anchors if Protocol, also markdown needs doublespace for new paragraph + expected_html = """hello, plain_url www.google.com or https://www.google.com
""" + self.p7.save() #markdown + + self.assertHTMLEqual(expected_html, self.p7.rendered_text) + self.assertEqual(mock_request.call_count, 0) + + @patch('requests.sessions.Session.request') + def test_simple(self, mock_request): + + self.c1.save() + self.p1.channel = self.c1 + self.p1.text = ' google link is the link, also https://www.facebook.com but not www.google.com\n \n should not have paragraph insert' + self.p1.slug = 'testing_html_escape' + self.p1.save() + expected_html = """ google link is the link, + also https://www.facebook.com + but not www.google.com\n \n should not have paragraph insert""" + + self.assertHTMLEqual(expected_html,self.p1.rendered_text) + self.assertEqual(mock_request.call_count, 0) + + @patch('requests.sessions.Session.request') + def test_automatic_anchors_to_links_on_own_line_if_markdown_chosen(self, mock_request): + mock_request.side_effect = get_mock_no_oembed() + + self.p7.text = "foo\n \n http://somelink\n" # generates foo, paragraph, anchored links + expected_html = """foo
+ """ + + self.assertEqual(self.p7.rendered_text, '') + + self.c1.save() + self.p7.channel = self.c1 + self.p7.save() + + self.assertHTMLEqual(expected_html, self.p7.rendered_text) + self.assertEqual(mock_request.call_count, 1) + + @patch('requests.sessions.Session.request') + def test_doesnt_embed_with_surrounding_text(self, mock_request): + + self.c1.save() + self.p7.text = "some text here, should NOT embed http://www.youtube.com/watch?v=Uqa8YSxx8Gs other text here" + self.p7.channel = self.c1 + self.p7.save() + expected_html = """some text here, should NOT embed http://www.youtube.com/watch?v=Uqa8YSxx8Gs other text here
""" + + self.assertHTMLEqual(expected_html, self.p7.rendered_text) + self.assertEqual(mock_request.call_count, 0) + + @patch('requests.sessions.Session.request') + def test_embed_works_with_markdown(self, mock_request): + + mock_request.side_effect = iter(get_mock()) + + self.c1.save() + self.p7.text = "http://www.youtube.com/watch?v=Uqa8YSxx8Gs" + self.p7.channel = self.c1 + self.p7.save() + + expected_html = """""" + + self.assertHTMLEqual(expected_html, self.p7.rendered_text) + self.assertEqual(mock_request.call_count, 2) + class ChannelTestCase(BaseTestCase): def test_get_absolute_url(self): self.c1.save() @@ -101,4 +196,16 @@ def test_get_absolute_url(self): def test_str_unicode(self): self.t1.save() returned_title = str(self.t1) - self.assertEqual(self.t1.title, returned_title) \ No newline at end of file + self.assertEqual(self.t1.title, returned_title) + +class MediaTestCase(BaseTestCase): + def test_get_absolute_url(self): + + self.c1.save() + self.f1.channel = self.c1 + + self.f1.save() + url = self.f1.get_absolute_url() + + self.assertGreater(len(url), 0) + # blank slug isn't allowed so only have to test with slug \ No newline at end of file diff --git a/django_mesh/tests/test_urls.py b/django_mesh/tests/test_urls.py index 1bcf1da..4fb4927 100644 --- a/django_mesh/tests/test_urls.py +++ b/django_mesh/tests/test_urls.py @@ -22,6 +22,7 @@ # App imports from ..models import Post +import json class IndexViewTestCase(BaseTestCase): @@ -760,4 +761,76 @@ def test_tags_for_channel_logged_in_user_is_not_following_does_not_show_up(self) self.assertContains(response, self.t1) self.assertNotContains(response, self.t2) - self.assertContains(response, self.t3) \ No newline at end of file + self.assertContains(response, self.t3) + +class MediaIndexViewTestCase(BaseTestCase): + def test_upload_shows_up_on_index_page(self): + self.c1.save() + self.c3.save() + + self.f1.channel = self.c1 + self.f1.save() + + self.f2.channel = self.c3 + self.f2.save() + + response = self.client.get(reverse('mesh_media_index')) + self.assertEqual(response.status_code, 200) + + self.assertContains(response, self.f1.file_url) + self.assertNotContains(response, self.f2.file_url) + +class MediaDetailViewTestCase(BaseTestCase): + def test_detail_page_only_shows_correct_media(self): + self.c1.save() + self.c2.save() + + self.f1.channel = self.c1 + self.f1.save() + + self.f2.channel = self.c2 + self.f2.save() + + response = self.client.get(reverse('mesh_media_view', kwargs={'slug': self.f1.slug})) + self.assertEqual(response.status_code, 200) + + self.assertContains(response, self.f1.file_url) + self.assertNotContains(response, self.f2.file_url) + + +class OembedDetailViewTestCase(BaseTestCase): + # def test_post_request_raises_404(self): ######## you said we dont need to worry about this case right? + # self.c1.save() + # self.f1.channel = self.c1 + # self.f1.save() + + # response = self.client.post(reverse('mesh_oembed', kwargs={'slug': self.f1.slug})) + # self.assertEqual(response.status_code, 404) + + def test_get_request_returns_required_data_for_embedly_for_each_file_type(self): + self.c1.save() + self.f1.channel = self.c1 + self.f1.save() + + self.f4.channel = self.c1 + self.f4.save() + + response = self.client.get(reverse('mesh_oembed', kwargs={'slug': self.f1.slug})) + response2 = self.client.get(reverse('mesh_oembed', kwargs={'slug': self.f4.slug})) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response2.status_code, 200) + + self.assertContains(response, '"url": "%(url)s"' % {"url": self.f1.file_url}) + self.assertContains(response, '"type": "photo"') + self.assertContains(response, '"version": 1.0' ) + self.assertContains(response, '"width": 240' ) + self.assertContains(response, '"height": 160' ) + + self.assertContains(response2, '"url": "%(url)s"' % {"url": self.f4.file_url}) + self.assertContains(response2, '"type": "video"') + self.assertContains(response2, '"version": 1.0' ) + self.assertContains(response2, '"width": 700' ) + self.assertContains(response2, '"height": 350' ) + self.assertContains(response2, '"html": %(html)s' % {"html": json.dumps(self.f4.oembed_html)}) + diff --git a/django_mesh/tests/util.py b/django_mesh/tests/util.py index 45030cc..d1251b2 100644 --- a/django_mesh/tests/util.py +++ b/django_mesh/tests/util.py @@ -27,13 +27,11 @@ #App imports from .. import models -from ..models import Channel, Post, Tag +from ..models import Channel, Post, Tag, Media class BaseTestCase(TestCase): def setUp(self): - self._old_oembed_regex = models.oembed_regex - models.oembed_regex = re.compile(r'^(?P