diff --git a/tests/fixtures/fixtures/forward_reference_fk.json b/tests/fixtures/fixtures/forward_reference_fk.json new file mode 100644 index 0000000000..c553d2b487 --- /dev/null +++ b/tests/fixtures/fixtures/forward_reference_fk.json @@ -0,0 +1,18 @@ +[ + { + "model": "fixtures.naturalkeything", + "pk": 1, + "fields": { + "key": "t1", + "other_thing": 2 + } + }, + { + "model": "fixtures.naturalkeything", + "pk": 2, + "fields": { + "key": "t2", + "other_thing": 1 + } + } +] diff --git a/tests/fixtures/fixtures/forward_reference_m2m.json b/tests/fixtures/fixtures/forward_reference_m2m.json new file mode 100644 index 0000000000..927bac62b6 --- /dev/null +++ b/tests/fixtures/fixtures/forward_reference_m2m.json @@ -0,0 +1,24 @@ +[ + { + "model": "fixtures.naturalkeything", + "pk": 1, + "fields": { + "key": "t1", + "other_things": [2, 3] + } + }, + { + "model": "fixtures.naturalkeything", + "pk": 2, + "fields": { + "key": "t2" + } + }, + { + "model": "fixtures.naturalkeything", + "pk": 3, + "fields": { + "key": "t3" + } + } +] diff --git a/tests/fixtures/tests.py b/tests/fixtures/tests.py index a1e9b8ccaf..2ed17d57be 100644 --- a/tests/fixtures/tests.py +++ b/tests/fixtures/tests.py @@ -789,6 +789,20 @@ class FixtureTransactionTests(DumpDataAssertMixin, TransactionTestCase): class ForwardReferenceTests(DumpDataAssertMixin, TestCase): + def test_forward_reference_fk(self): + management.call_command('loaddata', 'forward_reference_fk.json', verbosity=0) + self.assertEqual(NaturalKeyThing.objects.count(), 2) + t1, t2 = NaturalKeyThing.objects.all() + self.assertEqual(t1.other_thing, t2) + self.assertEqual(t2.other_thing, t1) + self._dumpdata_assert( + ['fixtures'], + '[{"model": "fixtures.naturalkeything", "pk": 1, ' + '"fields": {"key": "t1", "other_thing": 2, "other_things": []}}, ' + '{"model": "fixtures.naturalkeything", "pk": 2, ' + '"fields": {"key": "t2", "other_thing": 1, "other_things": []}}]', + ) + def test_forward_reference_fk_natural_key(self): management.call_command( 'loaddata', @@ -809,6 +823,24 @@ class ForwardReferenceTests(DumpDataAssertMixin, TestCase): natural_foreign_keys=True, ) + def test_forward_reference_m2m(self): + management.call_command('loaddata', 'forward_reference_m2m.json', verbosity=0) + self.assertEqual(NaturalKeyThing.objects.count(), 3) + t1 = NaturalKeyThing.objects.get_by_natural_key('t1') + self.assertQuerysetEqual( + t1.other_things.order_by('key'), + ['', ''] + ) + self._dumpdata_assert( + ['fixtures'], + '[{"model": "fixtures.naturalkeything", "pk": 1, ' + '"fields": {"key": "t1", "other_thing": null, "other_things": [2, 3]}}, ' + '{"model": "fixtures.naturalkeything", "pk": 2, ' + '"fields": {"key": "t2", "other_thing": null, "other_things": []}}, ' + '{"model": "fixtures.naturalkeything", "pk": 3, ' + '"fields": {"key": "t3", "other_thing": null, "other_things": []}}]', + ) + def test_forward_reference_m2m_natural_key(self): management.call_command( 'loaddata',