Skip to content

Commit

Permalink
[BUGFIX release] isUpdating flag is set correctly for store.findAll
Browse files Browse the repository at this point in the history
A regression for the `isUpdating` flag on the RecordArray returned for
`store.peekAll` has been introduced in #4316: the flag isn't set to true
anymore when records are reloaded or a background reloaded.
  • Loading branch information
pangratz committed May 16, 2016
1 parent 52ea222 commit 50b4c27
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 0 deletions.
2 changes: 2 additions & 0 deletions addon/-private/system/store.js
Original file line number Diff line number Diff line change
Expand Up @@ -1313,6 +1313,8 @@ 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) {
return promiseArray(_findAll(adapter, this, typeClass, sinceToken, options));
}
Expand Down
86 changes: 86 additions & 0 deletions tests/integration/adapter/find-all-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -155,3 +155,89 @@ testInDebug('When all records are requested, assert the payload is not blank', (
run(() => store.findAll('person'));
}, /You made a `findAll` request for person records, but the adapter's response did not have any data/);
});

test("isUpdating is true while records are fetched", function(assert) {
let done = assert.async();

let findAllDeferred = Ember.RSVP.defer();
env.registry.register('adapter:person', DS.Adapter.extend({
findAll() {
return findAllDeferred.promise;
},

shouldReloadAll: () => true
}));

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("length"), 2);

done();
});
});

assert.equal(persons.get("isUpdating"), true);

findAllDeferred.resolve([{ id: 2 }]);
});

test("isUpdating is true while records are fetched in the background", function(assert) {
let done = assert.async();

let findAllDeferred = Ember.RSVP.defer();
env.registry.register('adapter:person', DS.Adapter.extend({
findAll() {
return findAllDeferred.promise;
},

shouldReloadAll: () => false,
shouldBackgroundReloadAll: () => true
}));

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"), true);
assert.equal(persons.get("length"), 1, "persons are updated in the background");
});
});

assert.equal(persons.get("isUpdating"), true);

run(function() {
findAllDeferred.resolve([{ id: 2 }]);
});

run(function() {
findAllDeferred.promise.then(function() {
assert.equal(persons.get("isUpdating"), false);
assert.equal(persons.get("length"), 2);

done();
});
});
});

0 comments on commit 50b4c27

Please sign in to comment.