summaryrefslogtreecommitdiff
path: root/tests/contenttypes_tests
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2018-06-21 11:50:44 -0400
committerTim Graham <timograham@gmail.com>2018-06-21 12:26:28 -0400
commitb49ed4be4798d54d905b835ca9d6b342d34aeab3 (patch)
tree8f3b54b9df98d3bb0f56f191e8774bb4dc596253 /tests/contenttypes_tests
parent238ed313c5b043a6c2f108df228ac37d88056d7f (diff)
Corrected location of some contenttypes_tests.
Diffstat (limited to 'tests/contenttypes_tests')
-rw-r--r--tests/contenttypes_tests/test_models.py82
-rw-r--r--tests/contenttypes_tests/test_views.py58
2 files changed, 59 insertions, 81 deletions
diff --git a/tests/contenttypes_tests/test_models.py b/tests/contenttypes_tests/test_models.py
index 34545e981d..84748a8878 100644
--- a/tests/contenttypes_tests/test_models.py
+++ b/tests/contenttypes_tests/test_models.py
@@ -1,13 +1,9 @@
from django.contrib.contenttypes.models import ContentType, ContentTypeManager
-from django.contrib.contenttypes.views import shortcut
-from django.contrib.sites.shortcuts import get_current_site
-from django.http import Http404, HttpRequest
+from django.db import models
from django.test import TestCase, override_settings
+from django.test.utils import isolate_apps
-from .models import (
- Author, ConcreteModel, FooWithBrokenAbsoluteUrl, FooWithoutUrl, FooWithUrl,
- ProxyModel,
-)
+from .models import Author, ConcreteModel, FooWithUrl, ProxyModel
class ContentTypesTests(TestCase):
@@ -93,6 +89,20 @@ class ContentTypesTests(TestCase):
FooWithUrl: ContentType.objects.get_for_model(FooWithUrl),
})
+ @isolate_apps('contenttypes_tests')
+ def test_get_for_model_create_contenttype(self):
+ """
+ ContentTypeManager.get_for_model() creates the corresponding content
+ type if it doesn't exist in the database.
+ """
+ class ModelCreatedOnTheFly(models.Model):
+ name = models.CharField()
+
+ ct = ContentType.objects.get_for_model(ModelCreatedOnTheFly)
+ self.assertEqual(ct.app_label, 'contenttypes_tests')
+ self.assertEqual(ct.model, 'modelcreatedonthefly')
+ self.assertEqual(str(ct), 'modelcreatedonthefly')
+
def test_get_for_concrete_model(self):
"""
Make sure the `for_concrete_model` kwarg correctly works
@@ -172,64 +182,6 @@ class ContentTypesTests(TestCase):
with self.assertNumQueries(0):
other_manager.get_for_model(ContentType)
- @override_settings(ALLOWED_HOSTS=['example.com'])
- def test_shortcut_view(self):
- """
- The shortcut view (used for the admin "view on site" functionality)
- returns a complete URL regardless of whether the sites framework is
- installed.
- """
- request = HttpRequest()
- request.META = {
- "SERVER_NAME": "Example.com",
- "SERVER_PORT": "80",
- }
- user_ct = ContentType.objects.get_for_model(FooWithUrl)
- obj = FooWithUrl.objects.create(name="john")
-
- with self.modify_settings(INSTALLED_APPS={'append': 'django.contrib.sites'}):
- response = shortcut(request, user_ct.id, obj.id)
- self.assertEqual(
- "http://%s/users/john/" % get_current_site(request).domain,
- response._headers.get("location")[1]
- )
-
- with self.modify_settings(INSTALLED_APPS={'remove': 'django.contrib.sites'}):
- response = shortcut(request, user_ct.id, obj.id)
- self.assertEqual("http://Example.com/users/john/", response._headers.get("location")[1])
-
- def test_shortcut_view_without_get_absolute_url(self):
- """
- The shortcut view (used for the admin "view on site" functionality)
- returns 404 when get_absolute_url is not defined.
- """
- request = HttpRequest()
- request.META = {
- "SERVER_NAME": "Example.com",
- "SERVER_PORT": "80",
- }
- user_ct = ContentType.objects.get_for_model(FooWithoutUrl)
- obj = FooWithoutUrl.objects.create(name="john")
-
- with self.assertRaises(Http404):
- shortcut(request, user_ct.id, obj.id)
-
- def test_shortcut_view_with_broken_get_absolute_url(self):
- """
- The shortcut view does not catch an AttributeError raised by
- the model's get_absolute_url() method (#8997).
- """
- request = HttpRequest()
- request.META = {
- "SERVER_NAME": "Example.com",
- "SERVER_PORT": "80",
- }
- user_ct = ContentType.objects.get_for_model(FooWithBrokenAbsoluteUrl)
- obj = FooWithBrokenAbsoluteUrl.objects.create(name="john")
-
- with self.assertRaises(AttributeError):
- shortcut(request, user_ct.id, obj.id)
-
def test_missing_model(self):
"""
Displaying content types in admin (or anywhere) doesn't break on
diff --git a/tests/contenttypes_tests/test_views.py b/tests/contenttypes_tests/test_views.py
index cdfa1e0961..1e4da28538 100644
--- a/tests/contenttypes_tests/test_views.py
+++ b/tests/contenttypes_tests/test_views.py
@@ -2,14 +2,15 @@ import datetime
from unittest import mock
from django.contrib.contenttypes.models import ContentType
+from django.contrib.contenttypes.views import shortcut
from django.contrib.sites.models import Site
-from django.db import models
+from django.contrib.sites.shortcuts import get_current_site
+from django.http import Http404, HttpRequest
from django.test import TestCase, override_settings
-from django.test.utils import isolate_apps
from .models import (
- Article, Author, ModelWithNullFKToSite, SchemeIncludedURL,
- Site as MockSite,
+ Article, Author, FooWithBrokenAbsoluteUrl, FooWithoutUrl, FooWithUrl,
+ ModelWithNullFKToSite, SchemeIncludedURL, Site as MockSite,
)
@@ -106,19 +107,44 @@ class ContentTypesViewsTests(TestCase):
response = self.client.get(url)
self.assertRedirects(response, '%s' % obj.get_absolute_url(), fetch_redirect_response=False)
- @isolate_apps('contenttypes_tests')
- def test_create_contenttype_on_the_spot(self):
+
+class ShortcutViewTests(TestCase):
+
+ def setUp(self):
+ self.request = HttpRequest()
+ self.request.META = {'SERVER_NAME': 'Example.com', 'SERVER_PORT': '80'}
+
+ @override_settings(ALLOWED_HOSTS=['example.com'])
+ def test_not_dependent_on_sites_app(self):
"""
- ContentTypeManager.get_for_model() creates the corresponding content
- type if it doesn't exist in the database.
+ The view returns a complete URL regardless of whether the sites
+ framework is installed.
"""
- class ModelCreatedOnTheFly(models.Model):
- name = models.CharField()
+ user_ct = ContentType.objects.get_for_model(FooWithUrl)
+ obj = FooWithUrl.objects.create(name='john')
+ with self.modify_settings(INSTALLED_APPS={'append': 'django.contrib.sites'}):
+ response = shortcut(self.request, user_ct.id, obj.id)
+ self.assertEqual(
+ 'http://%s/users/john/' % get_current_site(self.request).domain,
+ response._headers.get('location')[1]
+ )
+ with self.modify_settings(INSTALLED_APPS={'remove': 'django.contrib.sites'}):
+ response = shortcut(self.request, user_ct.id, obj.id)
+ self.assertEqual('http://Example.com/users/john/', response._headers.get('location')[1])
- class Meta:
- verbose_name = 'a model created on the fly'
+ def test_model_without_get_absolute_url(self):
+ """The view returns 404 when Model.get_absolute_url() isn't defined."""
+ user_ct = ContentType.objects.get_for_model(FooWithoutUrl)
+ obj = FooWithoutUrl.objects.create(name='john')
+ with self.assertRaises(Http404):
+ shortcut(self.request, user_ct.id, obj.id)
- ct = ContentType.objects.get_for_model(ModelCreatedOnTheFly)
- self.assertEqual(ct.app_label, 'contenttypes_tests')
- self.assertEqual(ct.model, 'modelcreatedonthefly')
- self.assertEqual(str(ct), 'modelcreatedonthefly')
+ def test_model_with_broken_get_absolute_url(self):
+ """
+ The view doesn't catch an AttributeError raised by
+ Model.get_absolute_url() (#8997).
+ """
+ user_ct = ContentType.objects.get_for_model(FooWithBrokenAbsoluteUrl)
+ obj = FooWithBrokenAbsoluteUrl.objects.create(name='john')
+ with self.assertRaises(AttributeError):
+ shortcut(self.request, user_ct.id, obj.id)