From c12fff95dc59165fb4e8a3e513a5cb7326cdc76e Mon Sep 17 00:00:00 2001 From: Wong Pei Yi Date: Fri, 9 Sep 2016 15:25:25 +0800 Subject: [PATCH] isUpdating should be true only if a reload happens `findAll` should not set `isUpdating` to true if `backgroundReload` or `shouldBackgroundReloadAll` returns false --- addon/-private/system/store.js | 5 ++-- tests/integration/adapter/find-all-test.js | 31 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/addon/-private/system/store.js b/addon/-private/system/store.js index be8b7ea3e24..fc3b917fbec 100644 --- a/addon/-private/system/store.js +++ b/addon/-private/system/store.js @@ -1375,15 +1375,15 @@ Store = Service.extend({ assert("You tried to load all records but you have no adapter (for " + typeClass + ")", adapter); assert("You tried to load all records but your adapter does not implement `findAll`", typeof adapter.findAll === 'function'); - set(array, 'isUpdating', true); - if (options.reload) { + set(array, 'isUpdating', true); return promiseArray(_findAll(adapter, this, typeClass, sinceToken, options)); } var snapshotArray = array.createSnapshot(options); if (adapter.shouldReloadAll(this, snapshotArray)) { + set(array, 'isUpdating', true); return promiseArray(_findAll(adapter, this, typeClass, sinceToken, options)); } @@ -1392,6 +1392,7 @@ Store = Service.extend({ } if (options.backgroundReload || adapter.shouldBackgroundReloadAll(this, snapshotArray)) { + set(array, 'isUpdating', true); _findAll(adapter, this, typeClass, sinceToken, options); } diff --git a/tests/integration/adapter/find-all-test.js b/tests/integration/adapter/find-all-test.js index dfe533356bd..b9ba670bbe6 100644 --- a/tests/integration/adapter/find-all-test.js +++ b/tests/integration/adapter/find-all-test.js @@ -238,3 +238,34 @@ test("isUpdating is true while records are fetched in the background", function( }); }); }); + +test("isUpdating is false if records are not fetched in the background", function(assert) { + let findAllDeferred = Ember.RSVP.defer(); + env.registry.register('adapter:person', DS.Adapter.extend({ + findAll() { + return findAllDeferred.promise; + }, + shouldReloadAll: () => false, + shouldBackgroundReloadAll: () => false + })); + + run(function() { + store.push({ + data: [{ + type: 'person', + id: 1 + }] + }); + }); + + let persons = store.peekAll('person'); + assert.equal(persons.get("length"), 1); + + run(function() { + store.findAll('person').then(function(persons) { + assert.equal(persons.get("isUpdating"), false); + }); + }); + + assert.equal(persons.get("isUpdating"), false); +});