Merge "Add resolvable comments checkbox"
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.html b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.html
index 2118f83..1a0ba99 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.html
@@ -240,6 +240,12 @@
             disabled$="[[_computeSaveDisabled(_messageText)]]">Save</gr-button>
         <gr-button class="action cancel hideOnPublished"
             on-tap="_handleCancel" hidden>Cancel</gr-button>
+        <div class="action resolve hideOnPublished">
+          <input type="checkbox"
+              checked$="[[resolved]]"
+              on-change="_handleToggleResolved">
+          <label>Resolved</label>
+        </div>
         <div class="danger">
           <gr-button class="action discard hideOnPublished"
               on-tap="_handleDiscard">Discard</gr-button>
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
index a1e36c5..3575ccc 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
@@ -288,6 +288,8 @@
       assert.isFalse(isVisible(element.$$('.quote')), 'quote is not visible');
       assert.isFalse(isVisible(element.$$('.ack')), 'ack is not visible');
       assert.isFalse(isVisible(element.$$('.done')), 'done is not visible');
+      assert.isFalse(isVisible(element.$$('.resolve')),
+          'resolve is not visible');
       assert.isFalse(element.$$('.humanActions').hasAttribute('hidden'));
       assert.isTrue(element.$$('.robotActions').hasAttribute('hidden'));
 
@@ -300,6 +302,7 @@
       assert.isFalse(isVisible(element.$$('.quote')), 'quote is not visible');
       assert.isFalse(isVisible(element.$$('.ack')), 'ack is not visible');
       assert.isFalse(isVisible(element.$$('.done')), 'done is not visible');
+      assert.isTrue(isVisible(element.$$('.resolve')), 'resolve is visible');
       assert.isFalse(element.$$('.humanActions').hasAttribute('hidden'));
       assert.isTrue(element.$$('.robotActions').hasAttribute('hidden'));
 
@@ -532,5 +535,20 @@
           'Should navigate to ' + dest + ' without triggering nav');
       showStub.restore();
     });
+
+    test('proper event fires on resolve', function(done) {
+      element.addEventListener('comment-update', function(e) {
+        assert.isTrue(e.detail.comment.unresolved);
+        done();
+      });
+      MockInteractions.tap(element.$$('.resolve input'));
+    });
+
+    test('resolved comment state indicated by checkbox', function() {
+      element.comment = {unresolved: false};
+      assert.isTrue(element.$$('.resolve input').checked);
+      element.comment = {unresolved: true};
+      assert.isFalse(element.$$('.resolve input').checked);
+    });
   });
 </script>