Fix type errors on related change results

When results resolve for any of the five different types of related
changes, an observer is called which updates the hidden attribute of the
entire related changes UI. Over time, the type of value resolved for two
of these types of related changes evolved, but this code didn't evolve
with them. This resulted in a bug where in certain cases the related
changes section would not appear when it should.

Bug: Issue 9925
Change-Id: If8e390d7561a114bcad69c9316d0c9f31a3cb3cb
(cherry picked from commit afe4b4ab245ea32a011098c49bd8a61ba58b7819)
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 ff5b290..f2cfe87 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
@@ -290,14 +290,14 @@
     _resultsChanged(related, submittedTogether, conflicts,
         cherryPicks, sameTopic) {
       const results = [
-        related,
-        submittedTogether,
+        related && related.changes,
+        submittedTogether && submittedTogether.changes,
         conflicts,
         cherryPicks,
         sameTopic,
       ];
       for (let i = 0; i < results.length; i++) {
-        if (results[i].length > 0) {
+        if (results[i] && results[i].length > 0) {
           this.hidden = false;
           this.fire('update', null, {bubbles: false});
           return;
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 bfeb694..48cc565 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
@@ -382,7 +382,7 @@
           true);
     });
 
-    test('clear and empties', () => {
+    suite('hidden attribute and update event', () => {
       const changes = [{
         project: 'foo/bar',
         change_id: 'Ideadbeef',
@@ -397,33 +397,68 @@
         _current_revision_number: 1,
         status: 'NEW',
       }];
-      element._relatedResponse = {changes};
-      element._submittedTogether = {changes};
-      element._conflicts = changes;
-      element._cherryPicks = changes;
-      element._sameTopic = changes;
 
-      element.hidden = false;
-      element.clear();
-      assert.isTrue(element.hidden);
-      assert.equal(element._relatedResponse.changes.length, 0);
-      assert.equal(element._submittedTogether.changes.length, 0);
-      assert.equal(element._conflicts.length, 0);
-      assert.equal(element._cherryPicks.length, 0);
-      assert.equal(element._sameTopic.length, 0);
-    });
+      test('clear and empties', () => {
+        element._relatedResponse = {changes};
+        element._submittedTogether = {changes};
+        element._conflicts = changes;
+        element._cherryPicks = changes;
+        element._sameTopic = changes;
 
-    test('update fires', () => {
-      const updateHandler = sandbox.stub();
-      element.addEventListener('update', updateHandler);
+        element.hidden = false;
+        element.clear();
+        assert.isTrue(element.hidden);
+        assert.equal(element._relatedResponse.changes.length, 0);
+        assert.equal(element._submittedTogether.changes.length, 0);
+        assert.equal(element._conflicts.length, 0);
+        assert.equal(element._cherryPicks.length, 0);
+        assert.equal(element._sameTopic.length, 0);
+      });
 
-      element._resultsChanged([], [], [], [], []);
-      assert.isTrue(element.hidden);
-      assert.isFalse(updateHandler.called);
+      test('update fires', () => {
+        const updateHandler = sandbox.stub();
+        element.addEventListener('update', updateHandler);
 
-      element._resultsChanged([], [], [], [], ['test']);
-      assert.isFalse(element.hidden);
-      assert.isTrue(updateHandler.called);
+        element._resultsChanged({}, {}, [], [], []);
+        assert.isTrue(element.hidden);
+        assert.isFalse(updateHandler.called);
+
+        element._resultsChanged({}, {}, [], [], ['test']);
+        assert.isFalse(element.hidden);
+        assert.isTrue(updateHandler.called);
+      });
+
+      suite('hiding and unhiding', () => {
+        test('related response', () => {
+          assert.isTrue(element.hidden);
+          element._resultsChanged({changes}, {}, [], [], []);
+          assert.isFalse(element.hidden);
+        });
+
+        test('submitted together', () => {
+          assert.isTrue(element.hidden);
+          element._resultsChanged({}, {changes}, [], [], []);
+          assert.isFalse(element.hidden);
+        });
+
+        test('conflicts', () => {
+          assert.isTrue(element.hidden);
+          element._resultsChanged({}, {}, changes, [], []);
+          assert.isFalse(element.hidden);
+        });
+
+        test('cherrypicks', () => {
+          assert.isTrue(element.hidden);
+          element._resultsChanged({}, {}, [], changes, []);
+          assert.isFalse(element.hidden);
+        });
+
+        test('same topic', () => {
+          assert.isTrue(element.hidden);
+          element._resultsChanged({}, {}, [], [], changes);
+          assert.isFalse(element.hidden);
+        });
+      });
     });
 
     test('_computeChangeURL uses Gerrit.Nav', () => {