diff --git a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list.js b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list.js index 2c0a737455..5560972d01 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list.js +++ b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list.js @@ -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]; diff --git a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.html b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.html index 731437fa79..4bc023ffda 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.html +++ b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.html @@ -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', () => {