diff options
author | Matthijs Kooijman <matthijs@stdin.nl> | 2020-04-07 11:28:25 +0200 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-04-07 12:01:19 +0200 |
commit | 481d8fc324545cc35b11311707ccebca6102838a (patch) | |
tree | 9cfe27c052d7f8c3cbb1f7104e67802df13ed4bf /tests/fixtures | |
parent | cf21fc9bf010c71385dbead215d26151fb70d2ad (diff) | |
download | django-481d8fc324545cc35b11311707ccebca6102838a.tar.gz |
Refs #31051 -- Added test for loaddata/dumpdata with circular references without natural keys.
Diffstat (limited to 'tests/fixtures')
-rw-r--r-- | tests/fixtures/fixtures/circular_reference.json | 18 | ||||
-rw-r--r-- | tests/fixtures/models.py | 10 | ||||
-rw-r--r-- | tests/fixtures/tests.py | 20 |
3 files changed, 46 insertions, 2 deletions
diff --git a/tests/fixtures/fixtures/circular_reference.json b/tests/fixtures/fixtures/circular_reference.json new file mode 100644 index 0000000000..0656c30c93 --- /dev/null +++ b/tests/fixtures/fixtures/circular_reference.json @@ -0,0 +1,18 @@ +[ + { + "model": "fixtures.circulara", + "pk": 1, + "fields": { + "key": "x", + "obj": 1 + } + }, + { + "model": "fixtures.circularb", + "pk": 1, + "fields": { + "key": "y", + "obj": 1 + } + } +] diff --git a/tests/fixtures/models.py b/tests/fixtures/models.py index 2ecb56537f..db7d7fbd7a 100644 --- a/tests/fixtures/models.py +++ b/tests/fixtures/models.py @@ -134,3 +134,13 @@ class NaturalKeyThing(models.Model): def __str__(self): return self.key + + +class CircularA(models.Model): + key = models.CharField(max_length=3, unique=True) + obj = models.ForeignKey('CircularB', models.SET_NULL, null=True) + + +class CircularB(models.Model): + key = models.CharField(max_length=3, unique=True) + obj = models.ForeignKey('CircularA', models.SET_NULL, null=True) diff --git a/tests/fixtures/tests.py b/tests/fixtures/tests.py index 0027c62c20..cf05717277 100644 --- a/tests/fixtures/tests.py +++ b/tests/fixtures/tests.py @@ -17,8 +17,8 @@ from django.db import IntegrityError, connection from django.test import TestCase, TransactionTestCase, skipUnlessDBFeature from .models import ( - Article, Category, NaturalKeyThing, PrimaryKeyUUIDModel, ProxySpy, Spy, - Tag, Visa, + Article, Category, CircularA, CircularB, NaturalKeyThing, + PrimaryKeyUUIDModel, ProxySpy, Spy, Tag, Visa, ) @@ -804,3 +804,19 @@ class ForwardReferenceTests(TestCase): t1.other_things.order_by('key'), ['<NaturalKeyThing: t2>', '<NaturalKeyThing: t3>'] ) + + +class CircularReferenceTests(DumpDataAssertMixin, TestCase): + def test_circular_reference(self): + management.call_command('loaddata', 'circular_reference.json', verbosity=0) + obj_a = CircularA.objects.get() + obj_b = CircularB.objects.get() + self.assertEqual(obj_a.obj, obj_b) + self.assertEqual(obj_b.obj, obj_a) + self._dumpdata_assert( + ['fixtures'], + '[{"model": "fixtures.circulara", "pk": 1, ' + '"fields": {"key": "x", "obj": 1}}, ' + '{"model": "fixtures.circularb", "pk": 1, ' + '"fields": {"key": "y", "obj": 1}}]', + ) |