|
1 | 1 | from django.conf import settings
|
2 | 2 | from django.db import IntegrityError
|
| 3 | +from django.core.exceptions import FieldDoesNotExist |
3 | 4 | from django.db.models import Q
|
4 | 5 | from django.test import TestCase
|
5 | 6 |
|
@@ -119,6 +120,39 @@ def test_fields_parameter(self):
|
119 | 120 | self.assertEqual(0, ret["stats"]["created"])
|
120 | 121 | self.assertEqual(0, ret["stats"]["deleted"])
|
121 | 122 |
|
| 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 | + |
122 | 156 | def test_skip_deletes(self):
|
123 | 157 | c1 = Company.objects.create(name="My Company LLC")
|
124 | 158 |
|
|
0 commit comments