From 2d03eca7806589adfa0c8ae2f28441cb93542bcd Mon Sep 17 00:00:00 2001 From: Simon Ihmig Date: Sun, 18 Jun 2017 22:45:49 +0200 Subject: [PATCH] [BUGFIX beta] Fix flushing of pending saves, that include a deleted record (#4994) Fixes #4993 (cherry picked from commit 93e4d65b750d26fcd03f729a1f499454a1712b6b) --- addon/-private/system/store.js | 3 ++- .../integration/records/delete-record-test.js | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/addon/-private/system/store.js b/addon/-private/system/store.js index ec93477a6c4..37d1c76ff6a 100644 --- a/addon/-private/system/store.js +++ b/addon/-private/system/store.js @@ -1882,7 +1882,8 @@ Store = Service.extend({ let operation; if (internalModel.currentState.stateName === 'root.deleted.saved') { - return resolver.resolve(); + resolver.resolve(); + continue; } else if (internalModel.isNew()) { operation = 'createRecord'; } else if (internalModel.isDeleted()) { diff --git a/tests/integration/records/delete-record-test.js b/tests/integration/records/delete-record-test.js index f877e09ca28..a96a7901da6 100644 --- a/tests/integration/records/delete-record-test.js +++ b/tests/integration/records/delete-record-test.js @@ -289,3 +289,29 @@ test("Destroying an invalid newly created record should remove it from the store assert.equal(get(record, 'currentState.stateName'), 'root.deleted.saved'); assert.equal(get(store.peekAll('person'), 'length'), 0, 'The new person should be removed from the store'); }); + +test("Will resolve destroy and save in same loop", function(assert) { + let adam, dave; + let promises; + + assert.expect(1); + + env.adapter.createRecord = function() { + assert.ok(true, 'save operation resolves'); + return Ember.RSVP.Promise.resolve({ id: 123 }); + }; + + run(function() { + adam = env.store.createRecord('person', { name: 'Adam Sunderland' }); + dave = env.store.createRecord('person', { name: 'Dave Sunderland' }); + }); + + run(function() { + promises = [ + adam.destroyRecord(), + dave.save() + ]; + }); + + return Ember.RSVP.all(promises); +});