Check filter text before setting repos
This prevents a race condition where a longer response can resolve after an earlier one. This treatment is similar to that used in gr-autocomplete. Bug: Issue 8593 Change-Id: Ic581d1e0eb05cab97d9293d88b237c3bdd79a4f9
This commit is contained in:
@@ -63,7 +63,10 @@
|
||||
type: Boolean,
|
||||
value: true,
|
||||
},
|
||||
_filter: String,
|
||||
_filter: {
|
||||
type: String,
|
||||
value: '',
|
||||
},
|
||||
},
|
||||
|
||||
behaviors: [
|
||||
@@ -115,7 +118,8 @@
|
||||
this._repos = [];
|
||||
return this.$.restAPI.getRepos(filter, reposPerPage, offset)
|
||||
.then(repos => {
|
||||
if (!repos) { return; }
|
||||
// Late response.
|
||||
if (filter !== this._filter || !repos) { return; }
|
||||
this._repos = Object.keys(repos)
|
||||
.map(key => {
|
||||
const repo = repos[key];
|
||||
|
@@ -56,6 +56,7 @@ limitations under the License.
|
||||
|
||||
setup(() => {
|
||||
sandbox = sinon.sandbox.create();
|
||||
sandbox.stub(page, 'show');
|
||||
element = fixture('basic');
|
||||
counter = 0;
|
||||
});
|
||||
@@ -118,6 +119,11 @@ limitations under the License.
|
||||
});
|
||||
|
||||
suite('filter', () => {
|
||||
setup(() => {
|
||||
repos = _.times(25, repoGenerator);
|
||||
reposFiltered = _.times(1, repoGenerator);
|
||||
});
|
||||
|
||||
test('_paramsChanged', done => {
|
||||
sandbox.stub(element.$.restAPI, 'getRepos', () => {
|
||||
return Promise.resolve(repos);
|
||||
@@ -132,6 +138,19 @@ limitations under the License.
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('latest repos requested are always set', done => {
|
||||
const repoStub = sandbox.stub(element.$.restAPI, 'getRepos');
|
||||
repoStub.withArgs('test').returns(Promise.resolve(repos));
|
||||
repoStub.withArgs('filter').returns(Promise.resolve(reposFiltered));
|
||||
element._filter = 'test';
|
||||
|
||||
// Repos are not set because the element._filter differs.
|
||||
element._getRepos('filter', 25, 0).then(() => {
|
||||
assert.deepEqual(element._repos, []);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('loading', () => {
|
||||
|
Reference in New Issue
Block a user