diff options
| author | Andreas Pelme | 2014-03-02 12:40:30 +0100 | 
|---|---|---|
| committer | Andreas Pelme | 2014-03-02 12:40:30 +0100 | 
| commit | 971578ca345c3d3bae7fd93b87c41d43483b6f05 (patch) | |
| tree | 72a6d3d0ced5750a8ba01bedc3a6f8a936e05e2f /tests/test_description.py | |
| parent | 62786a7ad64918022f11f1b95ce84adb8d798830 (diff) | |
| download | django-rest-framework-971578ca345c3d3bae7fd93b87c41d43483b6f05.tar.bz2 | |
Support for running the test suite with py.test
 * Get rid of runtests.py
 * Moved test code  from rest_framework/tests and rest_framework/runtests to tests
 * Invoke py.test from setup.py
 * Invoke py.test from Travis
 * Invoke py.test from tox
 * Changed setUpClass to be just plain setUp in test_permissions.py
 * Updated contribution guideline to show how to invoke py.test
Diffstat (limited to 'tests/test_description.py')
| -rw-r--r-- | tests/test_description.py | 108 | 
1 files changed, 108 insertions, 0 deletions
| diff --git a/tests/test_description.py b/tests/test_description.py new file mode 100644 index 00000000..1e481f06 --- /dev/null +++ b/tests/test_description.py @@ -0,0 +1,108 @@ +# -- coding: utf-8 -- + +from __future__ import unicode_literals +from django.test import TestCase +from rest_framework.compat import apply_markdown, smart_text +from rest_framework.views import APIView +from .description import ViewWithNonASCIICharactersInDocstring +from .description import UTF8_TEST_DOCSTRING + +# We check that docstrings get nicely un-indented. +DESCRIPTION = """an example docstring +==================== + +* list +* list + +another header +-------------- + +    code block + +indented + +# hash style header #""" + +# If markdown is installed we also test it's working +# (and that our wrapped forces '=' to h2 and '-' to h3) + +# We support markdown < 2.1 and markdown >= 2.1 +MARKED_DOWN_lt_21 = """<h2>an example docstring</h2> +<ul> +<li>list</li> +<li>list</li> +</ul> +<h3>another header</h3> +<pre><code>code block +</code></pre> +<p>indented</p> +<h2 id="hash_style_header">hash style header</h2>""" + +MARKED_DOWN_gte_21 = """<h2 id="an-example-docstring">an example docstring</h2> +<ul> +<li>list</li> +<li>list</li> +</ul> +<h3 id="another-header">another header</h3> +<pre><code>code block +</code></pre> +<p>indented</p> +<h2 id="hash-style-header">hash style header</h2>""" + + +class TestViewNamesAndDescriptions(TestCase): +    def test_view_name_uses_class_name(self): +        """ +        Ensure view names are based on the class name. +        """ +        class MockView(APIView): +            pass +        self.assertEqual(MockView().get_view_name(), 'Mock') + +    def test_view_description_uses_docstring(self): +        """Ensure view descriptions are based on the docstring.""" +        class MockView(APIView): +            """an example docstring +            ==================== + +            * list +            * list + +            another header +            -------------- + +                code block + +            indented + +            # hash style header #""" + +        self.assertEqual(MockView().get_view_description(), DESCRIPTION) + +    def test_view_description_supports_unicode(self): +        """ +        Unicode in docstrings should be respected. +        """ + +        self.assertEqual( +            ViewWithNonASCIICharactersInDocstring().get_view_description(), +            smart_text(UTF8_TEST_DOCSTRING) +        ) + +    def test_view_description_can_be_empty(self): +        """ +        Ensure that if a view has no docstring, +        then it's description is the empty string. +        """ +        class MockView(APIView): +            pass +        self.assertEqual(MockView().get_view_description(), '') + +    def test_markdown(self): +        """ +        Ensure markdown to HTML works as expected. +        """ +        if apply_markdown: +            gte_21_match = apply_markdown(DESCRIPTION) == MARKED_DOWN_gte_21 +            lt_21_match = apply_markdown(DESCRIPTION) == MARKED_DOWN_lt_21 +            self.assertTrue(gte_21_match or lt_21_match) | 
