Merge "Nearly convert <gr-rest-api-interface> element to a simple class"
This commit is contained in:
		@@ -75,7 +75,7 @@ export class GrGroupAuditLog extends ListViewMixin(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const errFn: ErrorCallback = response => {
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
      firePageError(response);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return this.restApiService
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@
 | 
			
		||||
import '../../../test/common-test-setup-karma.js';
 | 
			
		||||
import './gr-group-audit-log.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-group-audit-log');
 | 
			
		||||
 | 
			
		||||
@@ -84,7 +85,7 @@ suite('gr-group-audit-log tests', () => {
 | 
			
		||||
        errFn(response);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      element.addEventListener('page-error', e => {
 | 
			
		||||
      addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
        assert.deepEqual(e.detail.response, response);
 | 
			
		||||
        done();
 | 
			
		||||
      });
 | 
			
		||||
 
 | 
			
		||||
@@ -139,7 +139,7 @@ export class GrGroupMembers extends GestureEventListeners(
 | 
			
		||||
    const promises: Promise<void>[] = [];
 | 
			
		||||
 | 
			
		||||
    const errFn: ErrorCallback = response => {
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
      firePageError(response);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return this.restApiService
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
import '../../../test/common-test-setup-karma.js';
 | 
			
		||||
import './gr-group-members.js';
 | 
			
		||||
import {dom, flush} from '@polymer/polymer/lib/legacy/polymer.dom.js';
 | 
			
		||||
import {stubBaseUrl, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, stubBaseUrl, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-group-members');
 | 
			
		||||
 | 
			
		||||
@@ -352,7 +352,7 @@ suite('gr-group-members tests', () => {
 | 
			
		||||
        .callsFake((group, errFn) => {
 | 
			
		||||
          errFn(response);
 | 
			
		||||
        });
 | 
			
		||||
    element.addEventListener('page-error', e => {
 | 
			
		||||
    addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
      assert.deepEqual(e.detail.response, response);
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -148,7 +148,7 @@ export class GrGroup extends GestureEventListeners(
 | 
			
		||||
    const promises: Promise<unknown>[] = [];
 | 
			
		||||
 | 
			
		||||
    const errFn: ErrorCallback = response => {
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
      firePageError(response);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return this.restApiService
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@
 | 
			
		||||
import '../../../test/common-test-setup-karma.js';
 | 
			
		||||
import './gr-group.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-group');
 | 
			
		||||
 | 
			
		||||
@@ -216,7 +217,7 @@ suite('gr-group tests', () => {
 | 
			
		||||
      errFn(response);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    element.addEventListener('page-error', e => {
 | 
			
		||||
    addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
      assert.deepEqual(e.detail.response, response);
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -95,7 +95,7 @@ export class GrPluginList extends ListViewMixin(
 | 
			
		||||
 | 
			
		||||
  _getPlugins(filter: string, pluginsPerPage: number, offset?: number) {
 | 
			
		||||
    const errFn: ErrorCallback = response => {
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
      firePageError(response);
 | 
			
		||||
    };
 | 
			
		||||
    return this.restApiService
 | 
			
		||||
      .getPlugins(filter, pluginsPerPage, offset, errFn)
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
import '../../../test/common-test-setup-karma.js';
 | 
			
		||||
import './gr-plugin-list.js';
 | 
			
		||||
import 'lodash/lodash.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-plugin-list');
 | 
			
		||||
 | 
			
		||||
@@ -155,7 +155,7 @@ suite('gr-plugin-list tests', () => {
 | 
			
		||||
            errFn(response);
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
      element.addEventListener('page-error', e => {
 | 
			
		||||
      addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
        assert.deepEqual(e.detail.response, response);
 | 
			
		||||
        done();
 | 
			
		||||
      });
 | 
			
		||||
 
 | 
			
		||||
@@ -151,7 +151,7 @@ export class GrRepoAccess extends GestureEventListeners(
 | 
			
		||||
 | 
			
		||||
  _reload(repo: RepoName) {
 | 
			
		||||
    const errFn = (response?: Response | null) => {
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
      firePageError(response);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    this._editing = false;
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ import './gr-repo-access.js';
 | 
			
		||||
import {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';
 | 
			
		||||
import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
 | 
			
		||||
import {toSortedPermissionsArray} from '../../../utils/access-util.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-repo-access');
 | 
			
		||||
 | 
			
		||||
@@ -242,7 +242,7 @@ suite('gr-repo-access tests', () => {
 | 
			
		||||
      errFn(response);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    element.addEventListener('page-error', e => {
 | 
			
		||||
    addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
      assert.deepEqual(e.detail.response, response);
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -106,7 +106,7 @@ export class GrRepoCommands extends GestureEventListeners(
 | 
			
		||||
      // Do not process the error, if the component is not attached to the DOM
 | 
			
		||||
      // anymore, which at least in tests can happen.
 | 
			
		||||
      if (!this.isConnected) return;
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
      firePageError(response);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    this.restApiService.getProjectConfig(this.repo, errFn).then(config => {
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
import '../../../test/common-test-setup-karma.js';
 | 
			
		||||
import './gr-repo-commands.js';
 | 
			
		||||
import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-repo-commands');
 | 
			
		||||
 | 
			
		||||
@@ -121,7 +121,7 @@ suite('gr-repo-commands tests', () => {
 | 
			
		||||
      stubRestApi('getProjectConfig').callsFake((repo, errFn) => {
 | 
			
		||||
        errFn(response);
 | 
			
		||||
      });
 | 
			
		||||
      element.addEventListener('page-error', e => {
 | 
			
		||||
      addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
        assert.deepEqual(e.detail.response, response);
 | 
			
		||||
        done();
 | 
			
		||||
      });
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ export class GrRepoDashboards extends GestureEventListeners(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const errFn: ErrorCallback = response => {
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
      firePageError(response);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return this.restApiService
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
import '../../../test/common-test-setup-karma.js';
 | 
			
		||||
import './gr-repo-dashboards.js';
 | 
			
		||||
import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-repo-dashboards');
 | 
			
		||||
 | 
			
		||||
@@ -128,7 +128,7 @@ suite('gr-repo-dashboards tests', () => {
 | 
			
		||||
        errFn(response);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      element.addEventListener('page-error', e => {
 | 
			
		||||
      addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
        assert.deepEqual(e.detail.response, response);
 | 
			
		||||
        done();
 | 
			
		||||
      });
 | 
			
		||||
 
 | 
			
		||||
@@ -181,7 +181,7 @@ export class GrRepoDetailList extends ListViewMixin(
 | 
			
		||||
    this._items = [];
 | 
			
		||||
    flush();
 | 
			
		||||
    const errFn: ErrorCallback = response => {
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
      firePageError(response);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    if (detailType === RepoDetailView.BRANCHES) {
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ import './gr-repo-detail-list.js';
 | 
			
		||||
import 'lodash/lodash.js';
 | 
			
		||||
import {page} from '../../../utils/page-wrapper-utils.js';
 | 
			
		||||
import {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-repo-detail-list');
 | 
			
		||||
 | 
			
		||||
@@ -293,7 +293,7 @@ suite('gr-repo-detail-list', () => {
 | 
			
		||||
              errFn(response);
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
        element.addEventListener('page-error', e => {
 | 
			
		||||
        addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
          assert.deepEqual(e.detail.response, response);
 | 
			
		||||
          done();
 | 
			
		||||
        });
 | 
			
		||||
@@ -488,7 +488,7 @@ suite('gr-repo-detail-list', () => {
 | 
			
		||||
              errFn(response);
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
        element.addEventListener('page-error', e => {
 | 
			
		||||
        addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
          assert.deepEqual(e.detail.response, response);
 | 
			
		||||
          done();
 | 
			
		||||
        });
 | 
			
		||||
 
 | 
			
		||||
@@ -171,7 +171,7 @@ export class GrRepo extends GestureEventListeners(
 | 
			
		||||
    const promises = [];
 | 
			
		||||
 | 
			
		||||
    const errFn: ErrorCallback = response => {
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
      firePageError(response);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    promises.push(
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
import '../../../test/common-test-setup-karma.js';
 | 
			
		||||
import './gr-repo.js';
 | 
			
		||||
import {PolymerElement} from '@polymer/polymer/polymer-element.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-repo');
 | 
			
		||||
 | 
			
		||||
@@ -235,7 +235,7 @@ suite('gr-repo tests', () => {
 | 
			
		||||
    stubRestApi('getProjectConfig').callsFake((repo, errFn) => {
 | 
			
		||||
      errFn(response);
 | 
			
		||||
    });
 | 
			
		||||
    element.addEventListener('page-error', e => {
 | 
			
		||||
    addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
      assert.deepEqual(e.detail.response, response);
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -172,7 +172,7 @@ export class GrDashboardView extends GestureEventListeners(
 | 
			
		||||
    dashboard: DashboardId
 | 
			
		||||
  ): Promise<UserDashboard | undefined> {
 | 
			
		||||
    const errFn = (response?: Response | null) => {
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
      firePageError(response);
 | 
			
		||||
    };
 | 
			
		||||
    return this.restApiService
 | 
			
		||||
      .getDashboard(project, dashboard, errFn)
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ import {GerritView} from '../../../services/router/router-model.js';
 | 
			
		||||
import {changeIsOpen} from '../../../utils/change-util.js';
 | 
			
		||||
import {ChangeStatus} from '../../../constants/constants.js';
 | 
			
		||||
import {createAccountWithId} from '../../../test/test-data-generators.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-dashboard-view');
 | 
			
		||||
 | 
			
		||||
@@ -377,7 +377,7 @@ suite('gr-dashboard-view tests', () => {
 | 
			
		||||
        async (project, dashboard, errFn) => {
 | 
			
		||||
          errFn(response);
 | 
			
		||||
        });
 | 
			
		||||
    element.addEventListener('page-error', e => {
 | 
			
		||||
    addListenerForTest(document, 'page-error', e => {
 | 
			
		||||
      assert.strictEqual(e.detail.response, response);
 | 
			
		||||
      paramsChangedPromise.then(done);
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -1855,7 +1855,7 @@ export class GrChangeView extends KeyboardShortcutMixin(
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  _handleGetChangeDetailError(response?: Response | null) {
 | 
			
		||||
    firePageError(this, response);
 | 
			
		||||
    firePageError(response);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  _getLoggedIn() {
 | 
			
		||||
 
 | 
			
		||||
@@ -65,6 +65,7 @@ import {
 | 
			
		||||
} from '../../gr-app-types';
 | 
			
		||||
import {LocationChangeEventDetail} from '../../../types/events';
 | 
			
		||||
import {GerritView, updateState} from '../../../services/router/router-model';
 | 
			
		||||
import {firePageError} from '../../../utils/event-util';
 | 
			
		||||
 | 
			
		||||
const RoutePattern = {
 | 
			
		||||
  ROOT: '/',
 | 
			
		||||
@@ -1777,9 +1778,7 @@ export class GrRouter extends GestureEventListeners(
 | 
			
		||||
    // Note: the app's 404 display is tightly-coupled with catching 404
 | 
			
		||||
    // network responses, so we simulate a 404 response status to display it.
 | 
			
		||||
    // TODO: Decouple the gr-app error view from network responses.
 | 
			
		||||
    this._appElement().dispatchEvent(
 | 
			
		||||
      new CustomEvent('page-error', {detail: {response: {status: 404}}})
 | 
			
		||||
    );
 | 
			
		||||
    firePageError(new Response('', {status: 404}));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ import {GerritNav} from '../gr-navigation/gr-navigation.js';
 | 
			
		||||
import {stubBaseUrl} from '../../../test/test-utils.js';
 | 
			
		||||
import {_testOnly_RoutePattern} from './gr-router.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-router');
 | 
			
		||||
 | 
			
		||||
@@ -664,13 +665,11 @@ suite('gr-router tests', () => {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('_handleDefaultRoute on first load', () => {
 | 
			
		||||
      const appElementStub = {dispatchEvent: sinon.stub()};
 | 
			
		||||
      element._appElement = () => appElementStub;
 | 
			
		||||
      const spy = sinon.spy();
 | 
			
		||||
      addListenerForTest(document, 'page-error', spy);
 | 
			
		||||
      element._handleDefaultRoute();
 | 
			
		||||
      assert.isTrue(appElementStub.dispatchEvent.calledOnce);
 | 
			
		||||
      assert.equal(
 | 
			
		||||
          appElementStub.dispatchEvent.lastCall.args[0].detail.response.status,
 | 
			
		||||
          404);
 | 
			
		||||
      assert.isTrue(spy.calledOnce);
 | 
			
		||||
      assert.equal(spy.lastCall.args[0].detail.response.status, 404);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('_handleDefaultRoute after internal navigation', () => {
 | 
			
		||||
@@ -684,8 +683,6 @@ suite('gr-router tests', () => {
 | 
			
		||||
      sinon.stub(page, 'base');
 | 
			
		||||
      element._startRouter();
 | 
			
		||||
 | 
			
		||||
      const appElementStub = {dispatchEvent: sinon.stub()};
 | 
			
		||||
      element._appElement = () => appElementStub;
 | 
			
		||||
      element._handleDefaultRoute();
 | 
			
		||||
 | 
			
		||||
      onExit('', () => {}); // we left page;
 | 
			
		||||
 
 | 
			
		||||
@@ -609,7 +609,7 @@ export class GrDiffHost extends GestureEventListeners(
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    firePageError(this, response);
 | 
			
		||||
    firePageError(response);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ import {Side, CommentSide} from '../../../constants/constants.js';
 | 
			
		||||
import {createChange} from '../../../test/test-data-generators.js';
 | 
			
		||||
import {FILE} from '../gr-diff/gr-diff-line.js';
 | 
			
		||||
import {CoverageType} from '../../../types/types.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {createDefaultDiffPrefs} from '../../../constants/constants.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-diff-host');
 | 
			
		||||
@@ -296,13 +296,9 @@ suite('gr-diff-host tests', () => {
 | 
			
		||||
 | 
			
		||||
      setup(() => {
 | 
			
		||||
        serverErrorStub = sinon.stub();
 | 
			
		||||
        document.addEventListener('server-error', serverErrorStub);
 | 
			
		||||
        addListenerForTest(document, 'server-error', serverErrorStub);
 | 
			
		||||
        pageErrorStub = sinon.stub();
 | 
			
		||||
        element.addEventListener('page-error', pageErrorStub);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      teardown(() => {
 | 
			
		||||
        document.removeEventListener('server-error', serverErrorStub);
 | 
			
		||||
        addListenerForTest(document, 'page-error', pageErrorStub);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      test('page error on HTTP-409', () => {
 | 
			
		||||
@@ -313,7 +309,10 @@ suite('gr-diff-host tests', () => {
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      test('server error on non-HTTP-409', () => {
 | 
			
		||||
        element._handleGetDiffError({status: 500});
 | 
			
		||||
        element._handleGetDiffError({
 | 
			
		||||
          status: 500,
 | 
			
		||||
          text: () => Promise.resolve(''),
 | 
			
		||||
        });
 | 
			
		||||
        assert.isFalse(serverErrorStub.called);
 | 
			
		||||
        assert.isTrue(pageErrorStub.calledOnce);
 | 
			
		||||
        assert.isNotOk(element._errorMessage);
 | 
			
		||||
 
 | 
			
		||||
@@ -210,7 +210,7 @@ export class GrAppElement extends KeyboardShortcutMixin(
 | 
			
		||||
  created() {
 | 
			
		||||
    super.created();
 | 
			
		||||
    this._bindKeyboardShortcuts();
 | 
			
		||||
    this.addEventListener(EventType.PAGE_ERROR, e => {
 | 
			
		||||
    document.addEventListener(EventType.PAGE_ERROR, e => {
 | 
			
		||||
      this._handlePageError(e);
 | 
			
		||||
    });
 | 
			
		||||
    this.addEventListener(EventType.TITLE_CHANGE, e => {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@ import '../../../test/common-test-setup-karma.js';
 | 
			
		||||
import './gr-js-api-interface.js';
 | 
			
		||||
import {GrPluginActionContext} from './gr-plugin-action-context.js';
 | 
			
		||||
import {_testOnly_initGerritPluginApi} from './gr-gerrit.js';
 | 
			
		||||
import {addListenerForTest} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const pluginApi = _testOnly_initGerritPluginApi();
 | 
			
		||||
 | 
			
		||||
@@ -137,7 +138,7 @@ suite('gr-plugin-action-context tests', () => {
 | 
			
		||||
      send: sendStub,
 | 
			
		||||
    });
 | 
			
		||||
    const errorStub = sinon.stub();
 | 
			
		||||
    document.addEventListener('show-alert', errorStub);
 | 
			
		||||
    addListenerForTest(document, 'show-alert', errorStub);
 | 
			
		||||
    instance.call();
 | 
			
		||||
    await flush();
 | 
			
		||||
    assert.isTrue(errorStub.calledOnce);
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ import {_testOnly_resetPluginLoader} from './gr-plugin-loader.js';
 | 
			
		||||
import {resetPlugins, stubBaseUrl} from '../../../test/test-utils.js';
 | 
			
		||||
import {_testOnly_flushPreinstalls} from './gr-gerrit.js';
 | 
			
		||||
import {_testOnly_initGerritPluginApi} from './gr-gerrit.js';
 | 
			
		||||
import {stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-js-api-interface');
 | 
			
		||||
 | 
			
		||||
@@ -149,7 +149,7 @@ suite('gr-plugin-loader tests', () => {
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    const alertStub = sinon.stub();
 | 
			
		||||
    document.addEventListener('show-alert', alertStub);
 | 
			
		||||
    addListenerForTest(document, 'show-alert', alertStub);
 | 
			
		||||
 | 
			
		||||
    sinon.stub(pluginLoader, '_loadJsPlugin').callsFake( url => {
 | 
			
		||||
      pluginApi.install(() => {
 | 
			
		||||
@@ -177,7 +177,7 @@ suite('gr-plugin-loader tests', () => {
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    const alertStub = sinon.stub();
 | 
			
		||||
    document.addEventListener('show-alert', alertStub);
 | 
			
		||||
    addListenerForTest(document, 'show-alert', alertStub);
 | 
			
		||||
 | 
			
		||||
    sinon.stub(pluginLoader, '_loadJsPlugin').callsFake( url => {
 | 
			
		||||
      pluginApi.install(() => {
 | 
			
		||||
@@ -210,7 +210,7 @@ suite('gr-plugin-loader tests', () => {
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    const alertStub = sinon.stub();
 | 
			
		||||
    document.addEventListener('show-alert', alertStub);
 | 
			
		||||
    addListenerForTest(document, 'show-alert', alertStub);
 | 
			
		||||
 | 
			
		||||
    sinon.stub(pluginLoader, '_loadJsPlugin').callsFake( url => {
 | 
			
		||||
      pluginApi.install(() => {
 | 
			
		||||
@@ -236,7 +236,7 @@ suite('gr-plugin-loader tests', () => {
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    const alertStub = sinon.stub();
 | 
			
		||||
    document.addEventListener('show-alert', alertStub);
 | 
			
		||||
    addListenerForTest(document, 'show-alert', alertStub);
 | 
			
		||||
 | 
			
		||||
    sinon.stub(pluginLoader, '_loadJsPlugin').callsFake( url => {
 | 
			
		||||
      pluginApi.install(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -16,8 +16,6 @@
 | 
			
		||||
 */
 | 
			
		||||
/* NB: Order is important, because of namespaced classes. */
 | 
			
		||||
 | 
			
		||||
import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners';
 | 
			
		||||
import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin';
 | 
			
		||||
import {PolymerElement} from '@polymer/polymer/polymer-element';
 | 
			
		||||
import {GrEtagDecorator} from './gr-etag-decorator';
 | 
			
		||||
import {
 | 
			
		||||
@@ -41,7 +39,7 @@ import {
 | 
			
		||||
  listChangesOptionsToHex,
 | 
			
		||||
} from '../../../utils/change-util';
 | 
			
		||||
import {assertNever, hasOwnProperty} from '../../../utils/common-util';
 | 
			
		||||
import {customElement, property} from '@polymer/decorators';
 | 
			
		||||
import {customElement} from '@polymer/decorators';
 | 
			
		||||
import {AuthRequestInit, AuthService} from '../../../services/gr-auth/gr-auth';
 | 
			
		||||
import {
 | 
			
		||||
  AccountCapabilityInfo,
 | 
			
		||||
@@ -297,22 +295,16 @@ declare global {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@customElement('gr-rest-api-interface')
 | 
			
		||||
export class GrRestApiInterface
 | 
			
		||||
  extends GestureEventListeners(LegacyElementMixin(PolymerElement))
 | 
			
		||||
export class GrRestApiInterface extends PolymerElement
 | 
			
		||||
  implements RestApiService {
 | 
			
		||||
  @property({type: Object})
 | 
			
		||||
  readonly _cache = siteBasedCache; // Shared across instances.
 | 
			
		||||
 | 
			
		||||
  @property({type: Object})
 | 
			
		||||
  readonly _sharedFetchPromises = fetchPromisesCache; // Shared across instances.
 | 
			
		||||
 | 
			
		||||
  @property({type: Object})
 | 
			
		||||
  readonly _pendingRequests = pendingRequest; // Shared across instances.
 | 
			
		||||
 | 
			
		||||
  @property({type: Object})
 | 
			
		||||
  readonly _etags = grEtagDecorator; // Shared across instances.
 | 
			
		||||
 | 
			
		||||
  @property({type: Object})
 | 
			
		||||
  readonly _projectLookup = projectLookup; // Shared across instances.
 | 
			
		||||
 | 
			
		||||
  // The value is set in created, before any other actions
 | 
			
		||||
@@ -3067,8 +3059,7 @@ export class GrRestApiInterface
 | 
			
		||||
      return Promise.resolve(project);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const onError = (response?: Response | null) =>
 | 
			
		||||
      firePageError(this, response);
 | 
			
		||||
    const onError = (response?: Response | null) => firePageError(response);
 | 
			
		||||
 | 
			
		||||
    return this.getChange(changeNum, onError).then(change => {
 | 
			
		||||
      if (!change || !change.project) {
 | 
			
		||||
 
 | 
			
		||||
@@ -16,8 +16,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import '../../../test/common-test-setup-karma.js';
 | 
			
		||||
import './gr-rest-api-interface.js';
 | 
			
		||||
import {mockPromise} from '../../../test/test-utils.js';
 | 
			
		||||
import {addListenerForTest, mockPromise} from '../../../test/test-utils.js';
 | 
			
		||||
import {GrReviewerUpdatesParser} from './gr-reviewer-updates-parser.js';
 | 
			
		||||
import {ListChangesOption} from '../../../utils/change-util.js';
 | 
			
		||||
import {appContext} from '../../../services/app-context.js';
 | 
			
		||||
@@ -28,8 +27,7 @@ import {
 | 
			
		||||
  readResponsePayload,
 | 
			
		||||
} from './gr-rest-apis/gr-rest-api-helper.js';
 | 
			
		||||
import {JSON_PREFIX} from './gr-rest-apis/gr-rest-api-helper.js';
 | 
			
		||||
 | 
			
		||||
const basicFixture = fixtureFromElement('gr-rest-api-interface');
 | 
			
		||||
import {GrRestApiInterface} from './gr-rest-api-interface.js';
 | 
			
		||||
 | 
			
		||||
suite('gr-rest-api-interface tests', () => {
 | 
			
		||||
  let element;
 | 
			
		||||
@@ -53,7 +51,7 @@ suite('gr-rest-api-interface tests', () => {
 | 
			
		||||
    // fake auth
 | 
			
		||||
    sinon.stub(appContext.authService, 'authCheck')
 | 
			
		||||
        .returns(Promise.resolve(true));
 | 
			
		||||
    element = basicFixture.instantiate();
 | 
			
		||||
    element = new GrRestApiInterface();
 | 
			
		||||
    element._projectLookup = {};
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -267,7 +265,7 @@ suite('gr-rest-api-interface tests', () => {
 | 
			
		||||
    const getResponseObjectStub = sinon.stub(element, 'getResponseObject');
 | 
			
		||||
    window.fetch.returns(Promise.resolve({ok: false}));
 | 
			
		||||
    const serverErrorEventPromise = new Promise(resolve => {
 | 
			
		||||
      document.addEventListener('server-error', resolve);
 | 
			
		||||
      addListenerForTest(document, 'server-error', resolve);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return Promise.all([element._restApiHelper.fetchJSON({}).then(response => {
 | 
			
		||||
@@ -1253,7 +1251,7 @@ suite('gr-rest-api-interface tests', () => {
 | 
			
		||||
  test('getFileContent suppresses 404s', () => {
 | 
			
		||||
    const res = {status: 404};
 | 
			
		||||
    const spy = sinon.spy();
 | 
			
		||||
    document.addEventListener('server-error', spy);
 | 
			
		||||
    addListenerForTest(document, 'server-error', spy);
 | 
			
		||||
    sinon.stub(appContext.authService, 'fetch').returns(Promise.resolve(res));
 | 
			
		||||
    sinon.stub(element, '_changeBaseURL').returns(Promise.resolve(''));
 | 
			
		||||
    return element.getFileContent('1', 'tst/path', '1')
 | 
			
		||||
@@ -1306,7 +1304,7 @@ suite('gr-rest-api-interface tests', () => {
 | 
			
		||||
  test('_logCall only reports requests with anonymized URLss', () => {
 | 
			
		||||
    sinon.stub(Date, 'now').returns(200);
 | 
			
		||||
    const handler = sinon.stub();
 | 
			
		||||
    document.addEventListener('gr-rpc-log', handler);
 | 
			
		||||
    addListenerForTest(document, 'gr-rpc-log', handler);
 | 
			
		||||
 | 
			
		||||
    element._restApiHelper._logCall({url: 'url'}, 100, 200);
 | 
			
		||||
    assert.isFalse(handler.called);
 | 
			
		||||
@@ -1320,14 +1318,13 @@ suite('gr-rest-api-interface tests', () => {
 | 
			
		||||
  test('ported comment errors do not trigger error dialog', () => {
 | 
			
		||||
    const change = createChange();
 | 
			
		||||
    const handler = sinon.stub();
 | 
			
		||||
    document.addEventListener('server-error', handler);
 | 
			
		||||
    addListenerForTest(document, 'server-error', handler);
 | 
			
		||||
    sinon.stub(element._restApiHelper, 'fetchJSON').returns(Promise.resolve({
 | 
			
		||||
      ok: false}));
 | 
			
		||||
 | 
			
		||||
    element.getPortedComments(change._number, CURRENT);
 | 
			
		||||
 | 
			
		||||
    assert.isFalse(handler.called);
 | 
			
		||||
    document.removeEventListener('server-error', handler);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  test('ported drafts are not requested user is not logged in', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ export interface PageErrorEventDetail {
 | 
			
		||||
export type PageErrorEvent = CustomEvent<PageErrorEventDetail>;
 | 
			
		||||
 | 
			
		||||
declare global {
 | 
			
		||||
  interface HTMLElementEventMap {
 | 
			
		||||
  interface DocumentEventMap {
 | 
			
		||||
    'page-error': PageErrorEvent;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -46,8 +46,8 @@ export function fireAlert(target: EventTarget, message: string) {
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function firePageError(target: EventTarget, response?: Response | null) {
 | 
			
		||||
  target.dispatchEvent(
 | 
			
		||||
export function firePageError(response?: Response | null) {
 | 
			
		||||
  document.dispatchEvent(
 | 
			
		||||
    new CustomEvent(EventType.PAGE_ERROR, {
 | 
			
		||||
      detail: {response},
 | 
			
		||||
      composed: true,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user