summaryrefslogtreecommitdiff
path: root/tests/fixtures
diff options
context:
space:
mode:
authorMatthijs Kooijman <matthijs@stdin.nl>2020-04-07 11:28:25 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-04-07 12:01:19 +0200
commit481d8fc324545cc35b11311707ccebca6102838a (patch)
tree9cfe27c052d7f8c3cbb1f7104e67802df13ed4bf /tests/fixtures
parentcf21fc9bf010c71385dbead215d26151fb70d2ad (diff)
downloaddjango-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.json18
-rw-r--r--tests/fixtures/models.py10
-rw-r--r--tests/fixtures/tests.py20
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}}]',
+ )