Added database migration for contrib.contenttypes.
Moved contenttypes tests to allow them to run correctly in the presence of migrations. refs #22170.
This commit is contained in:
parent
6e3ac5f474
commit
eb8600a656
|
@ -0,0 +1,33 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ContentType',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('name', models.CharField(max_length=100)),
|
||||
('app_label', models.CharField(max_length=100)),
|
||||
('model', models.CharField(max_length=100, verbose_name='python model class name')),
|
||||
],
|
||||
options={
|
||||
'ordering': ('name',),
|
||||
'db_table': 'django_content_type',
|
||||
'verbose_name': 'content type',
|
||||
'verbose_name_plural': 'content types',
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='contenttype',
|
||||
unique_together=set([('app_label', 'model')]),
|
||||
),
|
||||
]
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.apps import apps
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
from django.db import models
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
from django.utils.http import urlquote
|
||||
|
||||
|
||||
class ConcreteModel(models.Model):
|
||||
name = models.CharField(max_length=10)
|
||||
|
||||
|
||||
class ProxyModel(ConcreteModel):
|
||||
class Meta:
|
||||
proxy = True
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class FooWithoutUrl(models.Model):
|
||||
"""
|
||||
Fake model not defining ``get_absolute_url`` for
|
||||
ContentTypesTests.test_shortcut_view_without_get_absolute_url()
|
||||
"""
|
||||
name = models.CharField(max_length=30, unique=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class FooWithUrl(FooWithoutUrl):
|
||||
"""
|
||||
Fake model defining ``get_absolute_url`` for
|
||||
ContentTypesTests.test_shortcut_view().
|
||||
"""
|
||||
|
||||
def get_absolute_url(self):
|
||||
return "/users/%s/" % urlquote(self.name)
|
||||
|
||||
|
||||
class FooWithBrokenAbsoluteUrl(FooWithoutUrl):
|
||||
"""
|
||||
Fake model defining a ``get_absolute_url`` method containing an error
|
||||
"""
|
||||
|
||||
def get_absolute_url(self):
|
||||
return "/users/%s/" % self.unknown_field
|
|
@ -3,51 +3,11 @@ from __future__ import unicode_literals
|
|||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.contenttypes.views import shortcut
|
||||
from django.contrib.sites.shortcuts import get_current_site
|
||||
from django.db import models
|
||||
from django.http import HttpRequest, Http404
|
||||
from django.test import TestCase, override_settings
|
||||
from django.utils.http import urlquote
|
||||
from django.utils import six
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
|
||||
|
||||
class ConcreteModel(models.Model):
|
||||
name = models.CharField(max_length=10)
|
||||
|
||||
|
||||
class ProxyModel(ConcreteModel):
|
||||
class Meta:
|
||||
proxy = True
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class FooWithoutUrl(models.Model):
|
||||
"""
|
||||
Fake model not defining ``get_absolute_url`` for
|
||||
:meth:`ContentTypesTests.test_shortcut_view_without_get_absolute_url`"""
|
||||
name = models.CharField(max_length=30, unique=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class FooWithUrl(FooWithoutUrl):
|
||||
"""
|
||||
Fake model defining ``get_absolute_url`` for
|
||||
:meth:`ContentTypesTests.test_shortcut_view`
|
||||
"""
|
||||
|
||||
def get_absolute_url(self):
|
||||
return "/users/%s/" % urlquote(self.name)
|
||||
|
||||
|
||||
class FooWithBrokenAbsoluteUrl(FooWithoutUrl):
|
||||
"""
|
||||
Fake model defining a ``get_absolute_url`` method containing an error
|
||||
"""
|
||||
|
||||
def get_absolute_url(self):
|
||||
return "/users/%s/" % self.unknown_field
|
||||
from .models import ConcreteModel, ProxyModel, FooWithoutUrl, FooWithUrl, FooWithBrokenAbsoluteUrl
|
||||
|
||||
|
||||
class ContentTypesTests(TestCase):
|
|
@ -77,7 +77,7 @@ class LoaderTests(TestCase):
|
|||
)
|
||||
|
||||
# Ensure we've included unmigrated apps in there too
|
||||
self.assertIn("contenttypes", project_state.real_apps)
|
||||
self.assertIn("auth", project_state.real_apps)
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_unmigdep"})
|
||||
def test_load_unmigrated_dependency(self):
|
||||
|
|
|
@ -128,6 +128,11 @@ def setup(verbosity, test_labels):
|
|||
settings.MIDDLEWARE_CLASSES = ALWAYS_MIDDLEWARE_CLASSES
|
||||
# Ensure the middleware classes are seen as overridden otherwise we get a compatibility warning.
|
||||
settings._explicit_settings.add('MIDDLEWARE_CLASSES')
|
||||
settings.MIGRATION_MODULES = {
|
||||
# this module doesn't actually exist, but this lets us skip creating
|
||||
# migrations for the test modules for some reason.
|
||||
'contenttypes': 'django.contrib.contenttypes.tests.migrations',
|
||||
}
|
||||
|
||||
if verbosity > 0:
|
||||
# Ensure any warnings captured to logging are piped through a verbose
|
||||
|
|
Loading…
Reference in New Issue