diff options
Diffstat (limited to 'tests/postgres_tests/test_bulk_update.py')
| -rw-r--r-- | tests/postgres_tests/test_bulk_update.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/postgres_tests/test_bulk_update.py b/tests/postgres_tests/test_bulk_update.py new file mode 100644 index 0000000000..6dd7036a9b --- /dev/null +++ b/tests/postgres_tests/test_bulk_update.py @@ -0,0 +1,34 @@ +from datetime import date + +from . import PostgreSQLTestCase +from .models import ( + HStoreModel, IntegerArrayModel, JSONModel, NestedIntegerArrayModel, + NullableIntegerArrayModel, OtherTypesArrayModel, RangesModel, +) + +try: + from psycopg2.extras import NumericRange, DateRange +except ImportError: + pass # psycopg2 isn't installed. + + +class BulkSaveTests(PostgreSQLTestCase): + def test_bulk_update(self): + test_data = [ + (IntegerArrayModel, 'field', [], [1, 2, 3]), + (NullableIntegerArrayModel, 'field', [1, 2, 3], None), + (JSONModel, 'field', {'a': 'b'}, {'c': 'd'}), + (NestedIntegerArrayModel, 'field', [], [[1, 2, 3]]), + (HStoreModel, 'field', {}, {1: 2}), + (RangesModel, 'ints', None, NumericRange(lower=1, upper=10)), + (RangesModel, 'dates', None, DateRange(lower=date.today(), upper=date.today())), + (OtherTypesArrayModel, 'ips', [], ['1.2.3.4']), + (OtherTypesArrayModel, 'json', [], [{'a': 'b'}]) + ] + for Model, field, initial, new in test_data: + with self.subTest(model=Model, field=field): + instances = Model.objects.bulk_create(Model(**{field: initial}) for _ in range(20)) + for instance in instances: + setattr(instance, field, new) + Model.objects.bulk_update(instances, [field]) + self.assertSequenceEqual(Model.objects.filter(**{field: new}), instances) |
