Skip to content

Commit 9ae72e4

Browse files
committed
add exclude_fields tests
1 parent 272f6f8 commit 9ae72e4

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

tests/tests.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.conf import settings
22
from django.db import IntegrityError
3+
from django.core.exceptions import FieldDoesNotExist
34
from django.db.models import Q
45
from django.test import TestCase
56

@@ -119,6 +120,39 @@ def test_fields_parameter(self):
119120
self.assertEqual(0, ret["stats"]["created"])
120121
self.assertEqual(0, ret["stats"]["deleted"])
121122

123+
def test_exclude_fields_parameter(self):
124+
c1 = Company.objects.create(name="Foo Products, Ltd.")
125+
c2 = Company.objects.create(name="Bar Microcontrollers, Inc.")
126+
127+
e1 = Employee.objects.create(name="Scott", age=40, company=c1)
128+
e2 = Employee.objects.create(name="Isaac", age=9, company=c2)
129+
130+
# We should update Scott's age, and not touch company.
131+
new_objs = [
132+
Employee(name="Scott", age=41, company=c1),
133+
Employee(name="Isaac", age=9, company=c1),
134+
]
135+
136+
with self.assertRaises(FieldDoesNotExist):
137+
# Crashes because we attempted to exclude a field that does not exist
138+
bulk_sync(new_models=new_objs, filters=None, key_fields=("name",), exclude_fields=['missing_field'])
139+
140+
ret = bulk_sync(new_models=new_objs, filters=None, key_fields=("name",), exclude_fields=['company'])
141+
142+
new_e1 = Employee.objects.get(id=e1.id)
143+
self.assertEqual("Scott", new_e1.name)
144+
self.assertEqual(41, new_e1.age)
145+
self.assertEqual(c1, new_e1.company)
146+
147+
new_e2 = Employee.objects.get(id=e2.id)
148+
self.assertEqual("Isaac", new_e2.name)
149+
self.assertEqual(9, new_e2.age)
150+
self.assertEqual(c2, new_e2.company)
151+
152+
self.assertEqual(2, ret["stats"]["updated"])
153+
self.assertEqual(0, ret["stats"]["created"])
154+
self.assertEqual(0, ret["stats"]["deleted"])
155+
122156
def test_skip_deletes(self):
123157
c1 = Company.objects.create(name="My Company LLC")
124158

0 commit comments

Comments
 (0)