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