Fix changeStatusString logic

Migrates all changeStatusString computation logic to the behavior,
consolidates tests from the individual elements into the behavior suite.

Change statuses are now a comma separated list of statuses, e.g.
"Merge Conflict, Private, WIP" or "Draft, WIP" -- no more parentheses to
avoid unnecessary complexity and cognitive load.

Also, no longer computes extra bits for closed changes.

Bug: Issue 6795
Change-Id: I36e7875a07ee9e5ff2172328b87c6bc22c3bcaa4
diff --git a/polygerrit-ui/app/behaviors/rest-client-behavior/rest-client-behavior.html b/polygerrit-ui/app/behaviors/rest-client-behavior/rest-client-behavior.html
index 05b24a6..cf54eac 100644
--- a/polygerrit-ui/app/behaviors/rest-client-behavior/rest-client-behavior.html
+++ b/polygerrit-ui/app/behaviors/rest-client-behavior/rest-client-behavior.html
@@ -116,35 +116,19 @@
           status === this.ChangeStatus.DRAFT;
     },
 
-    wipOrPrivateStatus(change) {
-      if (change.work_in_progress && change.is_private) {
-        return ' (Private) (WIP)';
-      } else if (change.work_in_progress) {
-        return ' (WIP)';
-      } else if (change.is_private) {
-        return ' (Private)';
-      }
-      return '';
-    },
-
     changeStatusString(change) {
-      // "Closed" states should take precedence over "open" ones.
+      const states = [];
       if (change.status === this.ChangeStatus.MERGED) {
-        return 'Merged' + this.wipOrPrivateStatus(change);
+        states.push('Merged');
+      } else if (change.status === this.ChangeStatus.ABANDONED) {
+        states.push('Abandoned');
+      } else if (!change.mergeable) {
+        states.push('Merge Conflict');
       }
-      if (change.status === this.ChangeStatus.ABANDONED) {
-        return 'Abandoned' + this.wipOrPrivateStatus(change);
-      }
-      if (change.mergeable === false) {
-        return 'Merge Conflict' + this.wipOrPrivateStatus(change);
-      }
-      if (change.status === this.ChangeStatus.DRAFT) {
-        return 'Draft' + this.wipOrPrivateStatus(change);
-      }
-      if (change.status === this.ChangeStatus.NEW) {
-        return this.wipOrPrivateStatus(change);
-      }
-      return '';
+      if (change.work_in_progress) { states.push('WIP'); }
+      if (change.is_private) { states.push('Private'); }
+      if (change.status === this.ChangeStatus.DRAFT) { states.push('Draft'); }
+      return states.join(', ');
     },
   };