Merge "Add check before requesting conflicts in related change view"
diff --git a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.js b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.js
index cac45c6..c066b17 100644
--- a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.js
+++ b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.js
@@ -60,14 +60,18 @@
         this._getSubmittedTogether().then(function(response) {
           this._submittedTogether = response;
         }.bind(this)),
-        this._getConflicts().then(function(response) {
-          this._conflicts = response;
-        }.bind(this)),
         this._getCherryPicks().then(function(response) {
           this._cherryPicks = response;
         }.bind(this)),
       ];
 
+      // Get conflicts if change is open and is mergeable.
+      if (this.changeIsOpen(this.change.status) && this.change.mergeable) {
+        promises.push(this._getConflicts().then(function(response) {
+          this._conflicts = response;
+        }.bind(this)));
+      }
+
       promises.push(this._getServerConfig().then(function(config) {
         if (this.change.topic && !config.change.submit_whole_topic) {
           return this._getChangesWithSameTopic().then(function(response) {
diff --git a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.html b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.html
index f7864ce..21903d2 100644
--- a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.html
+++ b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.html
@@ -33,9 +33,15 @@
 <script>
   suite('gr-related-changes-list tests', function() {
     var element;
+    var sandbox;
 
     setup(function() {
       element = fixture('basic');
+      sandbox = sinon.sandbox.create();
+    });
+
+    teardown(function() {
+      sandbox.restore();
     });
 
     test('connected revisions', function() {
@@ -223,5 +229,64 @@
       assert.equal(element._computeChangeContainerClass(
           change1, change2).indexOf('thisChange'), -1);
     });
+
+    suite('get conflicts tests', function() {
+      var element;
+      var conflictsStub;
+
+      setup(function() {
+        element = fixture('basic');
+
+        sandbox.stub(element, '_getRelatedChanges',
+            function() { return Promise.resolve(); });
+        sandbox.stub(element, '_getSubmittedTogether',
+            function() { return Promise.resolve(); });
+        sandbox.stub(element, '_getCherryPicks',
+            function() { return Promise.resolve(); });
+        conflictsStub = sandbox.stub(element, '_getConflicts',
+            function() { return Promise.resolve(); });
+      });
+
+      test('request conflicts if open and mergeable', function() {
+        element.patchNum = 7;
+        element.change = {
+          status: 'NEW',
+          mergeable: true,
+        };
+        element.reload();
+        assert.isTrue(conflictsStub.called);
+      });
+
+      test('does not request conflicts if closed and mergeable', function() {
+        element.patchNum = 7;
+        element.change = {
+          status: 'MERGED',
+          mergeable: true,
+        };
+        element.reload();
+        assert.isFalse(conflictsStub.called);
+      });
+
+      test('does not request conflicts if open and not mergeable', function() {
+        element.patchNum = 7;
+        element.change = {
+          status: 'NEW',
+          mergeable: false,
+        };
+        element.reload();
+        assert.isFalse(conflictsStub.called);
+      });
+
+      test('does not request conflicts if closed and not mergeable',
+          function() {
+        element.patchNum = 7;
+        element.change = {
+          status: 'MERGED',
+          mergeable: false,
+        };
+        element.reload();
+        assert.isFalse(conflictsStub.called);
+      });
+    });
   });
 </script>