Loading AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -541,6 +541,7 @@ answer newbie questions, and generally made Django that much better: Ivan Sagalaev (Maniac) <http://www.softwaremaniacs.org/> Vinay Sajip <vinay_sajip@yahoo.co.uk> Bartolome Sanchez Salado <i42sasab@uco.es> Nick Sandford <nick.sandford@gmail.com> Mark Sandstrom <mark@deliciouslynerdy.com> Kadesarin Sanjek Tim Saylor <tim.saylor@gmail.com> Loading django/contrib/contenttypes/management.py +1 −1 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ def update_contenttypes(app_config, verbosity=2, interactive=True, using=DEFAULT # Confirm that the content type is stale before deletion. if to_remove: if kwargs.get('interactive', False): if interactive: content_type_display = '\n'.join( ' %s | %s' % (ct.app_label, ct.model) for ct in to_remove Loading tests/contenttypes_tests/tests.py +38 −0 Original line number Diff line number Diff line # -*- 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 Loading Loading @@ -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' Loading Loading
AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -541,6 +541,7 @@ answer newbie questions, and generally made Django that much better: Ivan Sagalaev (Maniac) <http://www.softwaremaniacs.org/> Vinay Sajip <vinay_sajip@yahoo.co.uk> Bartolome Sanchez Salado <i42sasab@uco.es> Nick Sandford <nick.sandford@gmail.com> Mark Sandstrom <mark@deliciouslynerdy.com> Kadesarin Sanjek Tim Saylor <tim.saylor@gmail.com> Loading
django/contrib/contenttypes/management.py +1 −1 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ def update_contenttypes(app_config, verbosity=2, interactive=True, using=DEFAULT # Confirm that the content type is stale before deletion. if to_remove: if kwargs.get('interactive', False): if interactive: content_type_display = '\n'.join( ' %s | %s' % (ct.app_label, ct.model) for ct in to_remove Loading
tests/contenttypes_tests/tests.py +38 −0 Original line number Diff line number Diff line # -*- 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 Loading Loading @@ -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' Loading