Show Merge Conflict status in change view

Bug: Issue 4057
Change-Id: Ic5abbae2b4f261dc4e182e892a74aff288ba3ce4
diff --git a/polygerrit-ui/app/behaviors/rest-client-behavior.html b/polygerrit-ui/app/behaviors/rest-client-behavior.html
index ce0b2a5..4def9b2 100644
--- a/polygerrit-ui/app/behaviors/rest-client-behavior.html
+++ b/polygerrit-ui/app/behaviors/rest-client-behavior.html
@@ -30,10 +30,10 @@
     },
 
     ChangeStatus: {
-      NEW: 'NEW',
-      MERGED: 'MERGED',
       ABANDONED: 'ABANDONED',
       DRAFT: 'DRAFT',
+      MERGED: 'MERGED',
+      NEW: 'NEW',
     },
 
     // Must be kept in sync with the ListChangesOption enum and protobuf.
@@ -108,6 +108,23 @@
       return status === this.ChangeStatus.NEW ||
           status === this.ChangeStatus.DRAFT;
     },
+
+    changeStatusString: function(change) {
+      // "Closed" states should take precedence over "open" ones.
+      if (change.status === this.ChangeStatus.MERGED) {
+        return 'Merged';
+      }
+      if (change.status === this.ChangeStatus.ABANDONED) {
+        return 'Abandoned';
+      }
+      if (change.mergeable === false) {
+        return 'Merge Conflict';
+      }
+      if (change.status === this.ChangeStatus.DRAFT) {
+        return 'Draft';
+      }
+      return '';
+    },
   };
 
   window.Gerrit = window.Gerrit || {};
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.html b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.html
index 24f915a..9126785 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.html
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.html
@@ -75,7 +75,7 @@
       [[change._number]]
     </a>
     <a class="cell subject" href$="[[changeURL]]">[[change.subject]]</a>
-    <span class="cell status">[[_computeChangeStatusString(change)]]</span>
+    <span class="cell status">[[changeStatusString(change)]]</span>
     <span class="cell owner">
       <gr-account-link account="[[change.owner]]"></gr-account-link>
     </span>
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js
index d160933..90b2e1d 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js
@@ -51,25 +51,6 @@
       return '/c/' + changeNum + '/';
     },
 
-    _computeChangeStatusString: function(change) {
-      // "Closed" states should take precedence over "open" ones.
-      if (change.status == this.ChangeStatus.MERGED) {
-        return 'Merged';
-      }
-      if (change.status == this.ChangeStatus.ABANDONED) {
-        return 'Abandoned';
-      }
-
-      if (change.mergeable != null && change.mergeable == false) {
-        return 'Merge Conflict';
-      }
-      if (change.status == this.ChangeStatus.DRAFT) {
-        return 'Draft';
-      }
-
-      return '';
-    },
-
     _computeLabelTitle: function(change, labelName) {
       var label = change.labels[labelName];
       if (!label) { return 'Label not applicable'; }
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html
index 5507b9f..b7c0853 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html
@@ -38,18 +38,21 @@
       element = fixture('basic');
     });
 
-    test('computed fields', function() {
-      assert.equal(element._computeChangeStatusString({mergeable: true}), '');
-      assert.equal(element._computeChangeStatusString({mergeable: false}),
-          'Merge Conflict');
-      assert.equal(element._computeChangeStatusString({status: 'NEW'}), '');
-      assert.equal(element._computeChangeStatusString({status: 'MERGED'}),
-          'Merged');
-      assert.equal(element._computeChangeStatusString({status: 'ABANDONED'}),
-          'Abandoned');
-      assert.equal(element._computeChangeStatusString({status: 'DRAFT'}),
-          'Draft');
+    test('change status', function() {
+      var getStatusForChange = function(change) {
+        element.change = change;
+        return element.$$('.cell.status').textContent;
+      };
 
+      assert.equal(getStatusForChange({mergeable: true}), '');
+      assert.equal(getStatusForChange({mergeable: false}), 'Merge Conflict');
+      assert.equal(getStatusForChange({status: 'NEW'}), '');
+      assert.equal(getStatusForChange({status: 'MERGED'}), 'Merged');
+      assert.equal(getStatusForChange({status: 'ABANDONED'}), 'Abandoned');
+      assert.equal(getStatusForChange({status: 'DRAFT'}), 'Draft');
+    });
+
+    test('computed fields', function() {
       assert.equal(element._computeLabelClass({labels: {}}),
           'cell label u-gray-background');
       assert.equal(element._computeLabelClass(
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
index 76874c0..90499dd 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
@@ -405,15 +405,17 @@
       return '/' + changeNum;
     },
 
-    _computeChangeStatus: function(change, patchNum) {
-      var status = change.status;
-      if (status == this.ChangeStatus.NEW) {
+    _computeChangeStatus: function(change,  patchNum) {
+      var statusString;
+      if (change.status === this.ChangeStatus.NEW) {
         var rev = this._getRevisionNumber(change, patchNum);
-        // TODO(davido): Figure out, why sometimes revision is not there
-        if (rev == undefined || !rev.draft) { return ''; }
-        status = this.ChangeStatus.DRAFT;
+        if (rev && rev.draft === true) {
+          statusString = 'Draft';
+        }
+      } else {
+        statusString = this.changeStatusString(change);
       }
-      return '(' + status.toLowerCase() + ')';
+      return statusString ? '(' + statusString + ')' : '';
     },
 
     _computeLatestPatchNum: function(allPatchSets) {
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html
index 141940d..633b72a 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html
@@ -257,7 +257,7 @@
         labels: {},
       };
       var status = element._computeChangeStatus(element._change, '1');
-      assert.equal(status, '(draft)');
+      assert.equal(status, '(Draft)');
     });
 
     test('revision status draft', function() {
@@ -280,7 +280,7 @@
         labels: {},
       };
       var status = element._computeChangeStatus(element._change, '2');
-      assert.equal(status, '(draft)');
+      assert.equal(status, '(Draft)');
     });
 
     test('show commit message edit button', function() {