Wait for all plugins to load before sending plugin events

Bug: Issue 5068
Change-Id: I10694895c17e3f8b487fb6765d76b78cc98a58e8
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html
index 766da84..8efe77d 100644
--- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html
+++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html
@@ -45,6 +45,7 @@
       });
       element = fixture('basic');
       errorStub = sinon.stub(console, 'error');
+      Gerrit._setPluginsCount(1);
       Gerrit.install(function(p) { plugin = p; }, '0.1',
           'http://test.com/plugins/testplugin/static/test.js');
     });
@@ -75,10 +76,7 @@
     test('showchange event', function(done) {
       var testChange = {
         _number: 42,
-        revisions: {
-          def: {_number: 2},
-          abc: {_number: 1},
-        },
+        revisions: {def: {_number: 2}, abc: {_number: 1}},
       };
       plugin.on(element.EventType.SHOW_CHANGE, throwErrFn);
       plugin.on(element.EventType.SHOW_CHANGE, function(change, revision) {
@@ -91,6 +89,24 @@
           {change: testChange, patchNum: 1});
     });
 
+    test('handleEvent awaits plugins load', function(done) {
+      var testChange = {
+        _number: 42,
+        revisions: {def: {_number: 2}, abc: {_number: 1}},
+      };
+      var spy = sinon.spy();
+      Gerrit._setPluginsCount(1);
+      plugin.on(element.EventType.SHOW_CHANGE, spy);
+      element.handleEvent(element.EventType.SHOW_CHANGE,
+          {change: testChange, patchNum: 1});
+      assert.isFalse(spy.called);
+      Gerrit._setPluginsCount(0);
+      flush(function() {
+        assert.isTrue(spy.called);
+        done();
+      });
+    });
+
     test('comment event', function(done) {
       var testCommentNode = {foo: 'bar'};
       plugin.on(element.EventType.COMMENT, throwErrFn);
@@ -185,7 +201,7 @@
     });
 
     test('_arePluginsLoaded', function() {
-      assert.isFalse(Gerrit._arePluginsLoaded());
+      assert.isTrue(Gerrit._arePluginsLoaded());
       Gerrit._setPluginsCount(1);
       assert.isFalse(Gerrit._arePluginsLoaded());
       Gerrit._setPluginsCount(0);