diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2018-08-28 09:26:11 -0400 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci.zzzcomputing.com> | 2018-08-28 09:26:11 -0400 |
| commit | e6c2a651597e8be0d32d688b44bacd4d8a31f79c (patch) | |
| tree | 38d3ff3be76f3debf24e166574e4427b7edecdec /test | |
| parent | fe6d4a8eca50e3c6fccae7bdae3283ec1668b579 (diff) | |
| parent | cbd661e0cdfdba98663ae542c6af2863fc30ae09 (diff) | |
| download | sqlalchemy-e6c2a651597e8be0d32d688b44bacd4d8a31f79c.tar.gz | |
Merge "Add option to sort into inserts/updates to bulk_save_objects"
Diffstat (limited to 'test')
| -rw-r--r-- | test/orm/test_bulk.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/test/orm/test_bulk.py b/test/orm/test_bulk.py index 0763fe70c..9d0a00038 100644 --- a/test/orm/test_bulk.py +++ b/test/orm/test_bulk.py @@ -1,6 +1,7 @@ from sqlalchemy import testing from sqlalchemy.testing import eq_ from sqlalchemy.testing.schema import Table, Column +from sqlalchemy.testing import mock from sqlalchemy.testing import fixtures from sqlalchemy import Integer, String, ForeignKey, FetchedValue from sqlalchemy.orm import mapper, Session @@ -107,6 +108,56 @@ class BulkInsertUpdateTest(BulkTest, _fixtures.FixtureTest): ) eq_(objects[0].__dict__['id'], 1) + def test_bulk_save_mappings_preserve_order(self): + User, = self.classes("User", ) + + s = Session() + + # commit some object into db + user1 = User(name="i1") + user2 = User(name="i2") + s.add(user1) + s.add(user2) + s.commit() + + # make some changes + user1.name = "u1" + user3 = User(name="i3") + s.add(user3) + user2.name = "u2" + + objects = [user1, user3, user2] + + from sqlalchemy import inspect + + def _bulk_save_mappings( + mapper, mappings, isupdate, isstates, + return_defaults, update_changed_only, render_nulls): + mock_method(list(mappings), isupdate) + + mock_method = mock.Mock() + with mock.patch.object(s, '_bulk_save_mappings', _bulk_save_mappings): + s.bulk_save_objects(objects) + eq_( + mock_method.mock_calls, + [ + mock.call([inspect(user1)], True), + mock.call([inspect(user3)], False), + mock.call([inspect(user2)], True), + ] + ) + + mock_method = mock.Mock() + with mock.patch.object(s, '_bulk_save_mappings', _bulk_save_mappings): + s.bulk_save_objects(objects, preserve_order=False) + eq_( + mock_method.mock_calls, + [ + mock.call([inspect(user3)], False), + mock.call([inspect(user1), inspect(user2)], True), + ] + ) + def test_bulk_save_no_defaults(self): User, = self.classes("User",) |
