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,
|
type: Boolean,
|
||||||
value: true,
|
value: true,
|
||||||
},
|
},
|
||||||
_filter: String,
|
_filter: {
|
||||||
|
type: String,
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
behaviors: [
|
behaviors: [
|
||||||
@@ -115,7 +118,8 @@
|
|||||||
this._repos = [];
|
this._repos = [];
|
||||||
return this.$.restAPI.getRepos(filter, reposPerPage, offset)
|
return this.$.restAPI.getRepos(filter, reposPerPage, offset)
|
||||||
.then(repos => {
|
.then(repos => {
|
||||||
if (!repos) { return; }
|
// Late response.
|
||||||
|
if (filter !== this._filter || !repos) { return; }
|
||||||
this._repos = Object.keys(repos)
|
this._repos = Object.keys(repos)
|
||||||
.map(key => {
|
.map(key => {
|
||||||
const repo = repos[key];
|
const repo = repos[key];
|
||||||
|
@@ -56,6 +56,7 @@ limitations under the License.
|
|||||||
|
|
||||||
setup(() => {
|
setup(() => {
|
||||||
sandbox = sinon.sandbox.create();
|
sandbox = sinon.sandbox.create();
|
||||||
|
sandbox.stub(page, 'show');
|
||||||
element = fixture('basic');
|
element = fixture('basic');
|
||||||
counter = 0;
|
counter = 0;
|
||||||
});
|
});
|
||||||
@@ -118,6 +119,11 @@ limitations under the License.
|
|||||||
});
|
});
|
||||||
|
|
||||||
suite('filter', () => {
|
suite('filter', () => {
|
||||||
|
setup(() => {
|
||||||
|
repos = _.times(25, repoGenerator);
|
||||||
|
reposFiltered = _.times(1, repoGenerator);
|
||||||
|
});
|
||||||
|
|
||||||
test('_paramsChanged', done => {
|
test('_paramsChanged', done => {
|
||||||
sandbox.stub(element.$.restAPI, 'getRepos', () => {
|
sandbox.stub(element.$.restAPI, 'getRepos', () => {
|
||||||
return Promise.resolve(repos);
|
return Promise.resolve(repos);
|
||||||
@@ -132,6 +138,19 @@ limitations under the License.
|
|||||||
done();
|
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', () => {
|
suite('loading', () => {
|
||||||
|
Reference in New Issue
Block a user