From 1a170438d2069939f55bef0647bed4b2f8ffc44e Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Fri, 22 Jun 2018 04:16:57 -0400 Subject: [PATCH] Add "optionals not required" build (#6047) --- .travis.yml | 1 + tests/test_encoders.py | 1 + tests/test_filters.py | 2 ++ tests/test_renderers.py | 2 ++ tests/test_schemas.py | 6 ++++++ tests/urls.py | 10 +++++++--- tox.ini | 8 +++++++- 7 files changed, 26 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index f0d2e05f2..2f068970d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ matrix: - { python: "3.6", env: DJANGO=1.11 } - { python: "3.6", env: DJANGO=2.0 } - { python: "3.6", env: DJANGO=2.1 } + - { python: "3.6", env: TOXENV=base } - { python: "2.7", env: TOXENV=lint } - { python: "2.7", env: TOXENV=docs } diff --git a/tests/test_encoders.py b/tests/test_encoders.py index 27136df87..12eca8105 100644 --- a/tests/test_encoders.py +++ b/tests/test_encoders.py @@ -76,6 +76,7 @@ class JSONEncoderTests(TestCase): unique_id = uuid4() assert self.encoder.default(unique_id) == str(unique_id) + @pytest.mark.skipif(not coreapi, reason='coreapi is not installed') def test_encode_coreapi_raises_error(self): """ Tests encoding a coreapi objects raises proper error diff --git a/tests/test_filters.py b/tests/test_filters.py index f9e068fec..a7d9a07c1 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -10,6 +10,7 @@ from django.test.utils import override_settings from django.utils.six.moves import reload_module from rest_framework import filters, generics, serializers +from rest_framework.compat import coreschema from rest_framework.test import APIRequestFactory factory = APIRequestFactory() @@ -28,6 +29,7 @@ class BaseFilterTests(TestCase): with pytest.raises(NotImplementedError): self.filter_backend.filter_queryset(None, None, None) + @pytest.mark.skipif(not coreschema, reason='coreschema is not installed') def test_get_schema_fields_checks_for_coreapi(self): filters.coreapi = None with pytest.raises(AssertionError): diff --git a/tests/test_renderers.py b/tests/test_renderers.py index 667631f29..d468398d3 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -709,6 +709,7 @@ class AdminRendererTests(TestCase): self.assertContains(response, 'Iteritemsa string', html=True) +@pytest.mark.skipif(not coreapi, reason='coreapi is not installed') class TestDocumentationRenderer(TestCase): def test_document_with_link_named_data(self): @@ -738,6 +739,7 @@ class TestDocumentationRenderer(TestCase): assert '

Data Endpoint API

' in html +@pytest.mark.skipif(not coreapi, reason='coreapi is not installed') class TestSchemaJSRenderer(TestCase): def test_schemajs_output(self): diff --git a/tests/test_schemas.py b/tests/test_schemas.py index 47afe867d..f929fece5 100644 --- a/tests/test_schemas.py +++ b/tests/test_schemas.py @@ -663,6 +663,7 @@ class TestAutoSchema(TestCase): with pytest.raises(AssertionError): descriptor.get_link(None, None, None) # ???: Do the dummy arguments require a tighter assert? + @pytest.mark.skipif(not coreapi, reason='coreapi is not installed') def test_update_fields(self): """ That updating fields by-name helper is correct @@ -698,6 +699,7 @@ class TestAutoSchema(TestCase): assert len(fields) == 1 assert fields[0].required is False + @pytest.mark.skipif(not coreapi, reason='coreapi is not installed') def test_get_manual_fields(self): """That get_manual_fields is applied during get_link""" @@ -718,6 +720,7 @@ class TestAutoSchema(TestCase): assert len(fields) == 2 assert "my_extra_field" in [f.name for f in fields] + @pytest.mark.skipif(not coreapi, reason='coreapi is not installed') def test_view_with_manual_schema(self): path = '/example' @@ -764,6 +767,7 @@ class TestAutoSchema(TestCase): link = view.schema.get_link(path, method, base_url) assert link == expected + @unittest.skipUnless(coreschema, 'coreschema is not installed') def test_field_to_schema(self): label = 'Test label' help_text = 'This is a helpful test text' @@ -983,6 +987,7 @@ naming_collisions_router = SimpleRouter() naming_collisions_router.register(r'collision', NamingCollisionViewSet, base_name="collision") +@pytest.mark.skipif(not coreapi, reason='coreapi is not installed') class TestURLNamingCollisions(TestCase): """ Ref: https://github.com/encode/django-rest-framework/issues/4704 @@ -1167,6 +1172,7 @@ def test_head_and_options_methods_are_excluded(): assert inspector.get_allowed_methods(callback) == ["GET"] +@pytest.mark.skipif(not coreapi, reason='coreapi is not installed') class TestAutoSchemaAllowsFilters(object): class MockAPIView(APIView): filter_backends = [filters.OrderingFilter] diff --git a/tests/urls.py b/tests/urls.py index 930c1f217..76ada5e3d 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -5,8 +5,12 @@ We need only the docs urls for DocumentationRenderer tests. """ from django.conf.urls import url +from rest_framework.compat import coreapi from rest_framework.documentation import include_docs_urls -urlpatterns = [ - url(r'^docs/', include_docs_urls(title='Test Suite API')), -] +if coreapi: + urlpatterns = [ + url(r'^docs/', include_docs_urls(title='Test Suite API')), + ] +else: + urlpatterns = [] diff --git a/tox.ini b/tox.ini index 852de5e6e..dcd44f161 100644 --- a/tox.ini +++ b/tox.ini @@ -5,7 +5,7 @@ envlist = {py34,py35,py36}-django20, {py35,py36}-django21 {py35,py36}-djangomaster, - dist,lint,docs, + base,dist,lint,docs, [travis:env] DJANGO = @@ -30,6 +30,12 @@ deps = -rrequirements/requirements-testing.txt -rrequirements/requirements-optionals.txt +[testenv:base] +; Ensure optional dependencies are not required +deps = + django + -rrequirements/requirements-testing.txt + [testenv:dist] commands = ./runtests.py --fast {posargs} --no-pkgroot --staticfiles -rw deps =