Refs #27745 -- Improved test coverage of contrib.contenttypes.
This commit is contained in:
parent
aa14528910
commit
4d6584000a
|
@ -1,8 +1,12 @@
|
||||||
|
import json
|
||||||
|
|
||||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.test import SimpleTestCase
|
from django.test import SimpleTestCase, TestCase
|
||||||
from django.test.utils import isolate_apps
|
from django.test.utils import isolate_apps
|
||||||
|
|
||||||
|
from .models import Answer, Question
|
||||||
|
|
||||||
|
|
||||||
@isolate_apps('contenttypes_tests')
|
@isolate_apps('contenttypes_tests')
|
||||||
class GenericForeignKeyTests(SimpleTestCase):
|
class GenericForeignKeyTests(SimpleTestCase):
|
||||||
|
@ -11,3 +15,21 @@ class GenericForeignKeyTests(SimpleTestCase):
|
||||||
class Model(models.Model):
|
class Model(models.Model):
|
||||||
field = GenericForeignKey()
|
field = GenericForeignKey()
|
||||||
self.assertEqual(str(Model.field), 'contenttypes_tests.Model.field')
|
self.assertEqual(str(Model.field), 'contenttypes_tests.Model.field')
|
||||||
|
|
||||||
|
def test_get_content_type_no_arguments(self):
|
||||||
|
with self.assertRaisesMessage(Exception, 'Impossible arguments to GFK.get_content_type!'):
|
||||||
|
Answer.question.get_content_type()
|
||||||
|
|
||||||
|
def test_incorrect_get_prefetch_queryset_arguments(self):
|
||||||
|
with self.assertRaisesMessage(ValueError, "Custom queryset can't be used for this lookup."):
|
||||||
|
Answer.question.get_prefetch_queryset(Answer.objects.all(), Answer.objects.all())
|
||||||
|
|
||||||
|
|
||||||
|
class GenericRelationTests(TestCase):
|
||||||
|
|
||||||
|
def test_value_to_string(self):
|
||||||
|
question = Question.objects.create(text='test')
|
||||||
|
answer1 = Answer.objects.create(question=question)
|
||||||
|
answer2 = Answer.objects.create(question=question)
|
||||||
|
result = json.loads(Question.answer_set.field.value_to_string(question))
|
||||||
|
self.assertCountEqual(result, [answer1.pk, answer2.pk])
|
||||||
|
|
|
@ -2,9 +2,10 @@ from django import forms
|
||||||
from django.contrib.contenttypes.forms import generic_inlineformset_factory
|
from django.contrib.contenttypes.forms import generic_inlineformset_factory
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.core.exceptions import FieldError
|
from django.core.exceptions import FieldError
|
||||||
from django.db import IntegrityError
|
from django.db import IntegrityError, models
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.test import SimpleTestCase, TestCase
|
from django.test import SimpleTestCase, TestCase
|
||||||
|
from django.test.utils import isolate_apps
|
||||||
|
|
||||||
from .models import (
|
from .models import (
|
||||||
AllowsNullGFK, Animal, Carrot, Comparison, ConcreteRelatedModel,
|
AllowsNullGFK, Animal, Carrot, Comparison, ConcreteRelatedModel,
|
||||||
|
@ -272,6 +273,11 @@ class GenericRelationsTests(TestCase):
|
||||||
with self.assertRaisesMessage(ValueError, msg):
|
with self.assertRaisesMessage(ValueError, msg):
|
||||||
self.bacon.tags.add(t1)
|
self.bacon.tags.add(t1)
|
||||||
|
|
||||||
|
def test_add_rejects_wrong_instances(self):
|
||||||
|
msg = "'TaggedItem' instance expected, got <Animal: Lion>"
|
||||||
|
with self.assertRaisesMessage(TypeError, msg):
|
||||||
|
self.bacon.tags.add(self.lion)
|
||||||
|
|
||||||
def test_set(self):
|
def test_set(self):
|
||||||
bacon = Vegetable.objects.create(name="Bacon", is_yucky=False)
|
bacon = Vegetable.objects.create(name="Bacon", is_yucky=False)
|
||||||
fatty = bacon.tags.create(tag="fatty")
|
fatty = bacon.tags.create(tag="fatty")
|
||||||
|
@ -596,6 +602,15 @@ class GenericInlineFormsetTest(TestCase):
|
||||||
form = Formset().forms[0]
|
form = Formset().forms[0]
|
||||||
self.assertIsInstance(form['tag'].field.widget, CustomWidget)
|
self.assertIsInstance(form['tag'].field.widget, CustomWidget)
|
||||||
|
|
||||||
|
@isolate_apps('generic_relations')
|
||||||
|
def test_incorrect_content_type(self):
|
||||||
|
class BadModel(models.Model):
|
||||||
|
content_type = models.PositiveIntegerField()
|
||||||
|
|
||||||
|
msg = "fk_name 'generic_relations.BadModel.content_type' is not a ForeignKey to ContentType"
|
||||||
|
with self.assertRaisesMessage(Exception, msg):
|
||||||
|
generic_inlineformset_factory(BadModel, TaggedItemForm)
|
||||||
|
|
||||||
def test_save_new_uses_form_save(self):
|
def test_save_new_uses_form_save(self):
|
||||||
"""
|
"""
|
||||||
Regression for #16260: save_new should call form.save()
|
Regression for #16260: save_new should call form.save()
|
||||||
|
|
Loading…
Reference in New Issue