Add submit button to PolyGerrit

+ Lays the groundwork for other actions as well.
+ Another change seemingly unrelated is within gr-reply-dropdown,
  which is in here because when a change is submitted, the
  permittedLabels property on the change goes to {}, which needs
  to be accounted for.

Change-Id: I14c4c62ad7e52df6d56894abb38b708d81964d1b
diff --git a/polygerrit-ui/app/test/gr-change-actions-test.html b/polygerrit-ui/app/test/gr-change-actions-test.html
new file mode 100644
index 0000000..69e2491
--- /dev/null
+++ b/polygerrit-ui/app/test/gr-change-actions-test.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<!--
+Copyright (C) 2016 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+<title>gr-change-actions</title>
+
+<script src="../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+<script src="../../bower_components/web-component-tester/browser.js"></script>
+<script src="../scripts/changes.js"></script>
+<script src="../scripts/util.js"></script>
+
+<link rel="import" href="../../bower_components/iron-test-helpers/iron-test-helpers.html">
+<link rel="import" href="../elements/gr-change-actions.html">
+
+<test-fixture id="basic">
+  <template>
+    <gr-change-actions></gr-change-actions>
+  </template>
+</test-fixture>
+
+<script>
+  suite('gr-change-actions tests', function() {
+    var element;
+    var server;
+
+    setup(function() {
+      element = fixture('basic');
+      server = sinon.fakeServer.create();
+
+      server.respondWith(
+        'GET',
+        '/changes/42/revisions/2/actions',
+        [
+          200,
+          { 'Content-Type': 'application/json' },
+          ')]}\'\n' +
+          JSON.stringify({
+            cherrypick: {
+              method: 'POST',
+              label: 'Cherry Pick',
+              title: 'Cherry pick change to a different branch',
+              enabled: true
+            },
+            rebase: {
+              method: 'POST',
+              label: 'Rebase',
+              title: 'Rebase onto tip of branch or parent change'
+            },
+            submit: {
+              method: 'POST',
+              label: 'Submit',
+              title: 'Submit patch set 1 into master',
+              enabled: true
+            }
+          }),
+        ]
+      );
+
+      server.respondWith(
+        'POST',
+        '/changes/42/revisions/2/submit',
+        [
+          200,
+          { 'Content-Type': 'application/json' },
+          ')]}\'\n{}',  // The response is not used by the element.
+        ]
+      );
+    });
+
+    test('submit button shows', function(done) {
+      element.changeNum = '42';
+      element.patchNum = '2';
+      element.reload();
+
+      server.respond();
+
+      element.async(function() {
+        var buttonEls = Polymer.dom(element.root).querySelectorAll('button');
+        assert.equal(buttonEls.length, 1);
+        assert.isFalse(element.hidden);
+        done();
+      }, 1);
+    });
+
+    test('submit change', function(done) {
+      element.changeNum = '42';
+      element.patchNum = '2';
+      element.reload();
+
+      server.respond();
+
+      element.async(function() {
+        var submitButton = element.$$('button[data-action-key="submit"]');
+        assert.ok(submitButton);
+        MockInteractions.tap(submitButton);
+        server.respond();
+
+        // Upon success it should fire the reload-change event.
+        element.addEventListener('reload-change', function(e) {
+          done();
+        });
+      }, 1);
+    });
+  });
+</script>
diff --git a/polygerrit-ui/app/test/index.html b/polygerrit-ui/app/test/index.html
index 85c0e1d..b1f6128 100644
--- a/polygerrit-ui/app/test/index.html
+++ b/polygerrit-ui/app/test/index.html
@@ -24,6 +24,7 @@
   var testFiles = [];
 
   [ 'gr-account-dropdown-test.html',
+    'gr-change-actions-test.html',
     'gr-change-list-item-test.html',
     'gr-change-list-test.html',
     'gr-change-view-test.html',