summaryrefslogtreecommitdiff
path: root/tests/contenttypes_tests/tests.py
diff options
context:
space:
mode:
authorNick Sandford <nick@sandford.id.au>2014-07-23 04:01:55 +0100
committerTim Graham <timograham@gmail.com>2014-07-23 08:45:09 -0400
commitfa3cf006b2912708e8c0b294cea91933cf35781f (patch)
tree0c2d051025d0583a3d5a532685faf8ca640663be /tests/contenttypes_tests/tests.py
parent8c30df15f17c180fbfb3e378c5469c63cde6599b (diff)
Fixed #23078 -- Regression in update_contenttypes() interactivity.
Thanks raymond at adaptiv.nl for the report.
Diffstat (limited to 'tests/contenttypes_tests/tests.py')
-rw-r--r--tests/contenttypes_tests/tests.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/contenttypes_tests/tests.py b/tests/contenttypes_tests/tests.py
index 2bec2927bd..1e3a92cc2c 100644
--- a/tests/contenttypes_tests/tests.py
+++ b/tests/contenttypes_tests/tests.py
@@ -1,16 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
+import sys
+
from django.apps.registry import Apps, apps
from django.contrib.contenttypes.fields import (
GenericForeignKey, GenericRelation
)
+from django.contrib.contenttypes import management
from django.contrib.contenttypes.models import ContentType
from django.core import checks
from django.db import connections, models, router
from django.test import TestCase
from django.test.utils import override_settings
from django.utils.encoding import force_str
+from django.utils.six import StringIO
from .models import Author, Article, SchemeIncludedURL
@@ -358,6 +362,40 @@ class GenericRelationshipTests(IsolatedModelsTestCase):
self.assertEqual(errors, expected)
+class UpdateContentTypesTests(TestCase):
+ def setUp(self):
+ self.before_count = ContentType.objects.count()
+ ContentType.objects.create(name='fake', app_label='contenttypes_tests', model='Fake')
+ self.app_config = apps.get_app_config('contenttypes_tests')
+
+ def test_interactive_true(self):
+ """
+ interactive mode of update_contenttypes() (the default) should delete
+ stale contenttypes.
+ """
+ self.old_stdout = sys.stdout
+ sys.stdout = StringIO()
+ management.input = lambda x: force_str("yes")
+ management.update_contenttypes(self.app_config)
+ output = sys.stdout.getvalue()
+ sys.stdout = self.old_stdout
+ self.assertIn("Deleting stale content type", output)
+ self.assertEqual(ContentType.objects.count(), self.before_count)
+
+ def test_interactive_false(self):
+ """
+ non-interactive mode of update_contenttypes() shouldn't delete stale
+ content types.
+ """
+ self.old_stdout = sys.stdout
+ sys.stdout = StringIO()
+ management.update_contenttypes(self.app_config, interactive=False)
+ output = sys.stdout.getvalue()
+ sys.stdout = self.old_stdout
+ self.assertIn("Stale content types remain.", output)
+ self.assertEqual(ContentType.objects.count(), self.before_count + 1)
+
+
class TestRouter(object):
def db_for_read(self, model, **hints):
return 'other'