summaryrefslogtreecommitdiff
path: root/tests/force_insert_update
diff options
context:
space:
mode:
authorAkash Kumar Sen <Akash-Kumar-Sen@users.noreply.github.com>2023-06-29 11:47:42 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-06-29 11:49:32 +0200
commitce204bed7f59e34a9ec226e1699db257ec33da30 (patch)
tree2000a94161e00f3f74d1262b8288f1fd7c0cca2b /tests/force_insert_update
parent6a523500af5bab3e05d9be9fc1a74d986c102f1a (diff)
Refs #30382 -- Added more tests for using force_insert with model inheritance.
Diffstat (limited to 'tests/force_insert_update')
-rw-r--r--tests/force_insert_update/models.py4
-rw-r--r--tests/force_insert_update/tests.py42
2 files changed, 45 insertions, 1 deletions
diff --git a/tests/force_insert_update/models.py b/tests/force_insert_update/models.py
index a98eadb4f9..586be12f13 100644
--- a/tests/force_insert_update/models.py
+++ b/tests/force_insert_update/models.py
@@ -23,6 +23,10 @@ class SubCounter(Counter):
pass
+class SubSubCounter(SubCounter):
+ pass
+
+
class WithCustomPK(models.Model):
name = models.IntegerField(primary_key=True)
value = models.IntegerField()
diff --git a/tests/force_insert_update/tests.py b/tests/force_insert_update/tests.py
index 73648ee18a..e2fefd3269 100644
--- a/tests/force_insert_update/tests.py
+++ b/tests/force_insert_update/tests.py
@@ -1,7 +1,14 @@
from django.db import DatabaseError, IntegrityError, transaction
from django.test import TestCase
-from .models import Counter, InheritedCounter, ProxyCounter, SubCounter, WithCustomPK
+from .models import (
+ Counter,
+ InheritedCounter,
+ ProxyCounter,
+ SubCounter,
+ SubSubCounter,
+ WithCustomPK,
+)
class ForceTests(TestCase):
@@ -66,3 +73,36 @@ class InheritanceTests(TestCase):
a.save()
a.value = 2
a.save(force_update=True)
+
+
+class ForceInsertInheritanceTests(TestCase):
+ def test_force_insert_false(self):
+ with self.assertNumQueries(3):
+ obj = SubCounter.objects.create(pk=1, value=0)
+ with self.assertNumQueries(2):
+ SubCounter(pk=obj.pk, value=1).save()
+ obj.refresh_from_db()
+ self.assertEqual(obj.value, 1)
+ with self.assertNumQueries(2):
+ SubCounter(pk=obj.pk, value=2).save(force_insert=False)
+ obj.refresh_from_db()
+ self.assertEqual(obj.value, 2)
+
+ def test_force_insert_false_with_existing_parent(self):
+ parent = Counter.objects.create(pk=1, value=1)
+ with self.assertNumQueries(2):
+ SubCounter.objects.create(pk=parent.pk, value=2)
+
+ def test_force_insert_parent(self):
+ with self.assertNumQueries(3):
+ SubCounter(pk=1, value=1).save(force_insert=True)
+
+ def test_force_insert_with_grandparent(self):
+ with self.assertNumQueries(4):
+ SubSubCounter(pk=1, value=1).save(force_insert=True)
+
+ def test_force_insert_with_existing_grandparent(self):
+ # Force insert only the last child.
+ grandparent = Counter.objects.create(pk=1, value=1)
+ with self.assertNumQueries(4):
+ SubSubCounter(pk=grandparent.pk, value=1).save(force_insert=True)