From d4454617279aef74f5c1bb6693325f3213c2d45e Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 22 May 2017 21:04:01 +0200 Subject: [PATCH] Fix flushing of pending saves, that include a deleted record Fixes #4993 --- 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 3c01a50e429..7c6c816edf8 100644 --- a/addon/-private/system/store.js +++ b/addon/-private/system/store.js @@ -1870,7 +1870,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); +});