Move Merged as info from change header to change summary

Merged As info on change header points to the same change viewed
via a weblink(such as Gitiles).
The button has low usage(https://imgur.com/a/bHUg8ZU) and is taking
up valuable real estate, hence move to Change summary hidden by
default, similar to the parent metadata field.

Screenshot: https://imgur.com/a/MgZNe7G
Change-Id: Ie2a5715dc65a20447f296f5246962b6445836490
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
index 927d391..95aa20e 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
@@ -60,6 +60,7 @@
   getCurrentRevision,
   createEditRevision,
   createAccountWithIdNameAndEmail,
+  createChangeViewChange,
 } from '../../../test/test-data-generators';
 import {ChangeViewPatchRange, GrChangeView} from './gr-change-view';
 import {
@@ -410,7 +411,7 @@
       basePatchNum: ParentPatchSetNum,
       patchNum: 1 as RevisionPatchSetNum,
     };
-    element._change = createChange();
+    element._change = createChangeViewChange();
     const getUrlStub = sinon.stub(GerritNav, 'getUrlForChange');
     const replaceStateStub = sinon.stub(history, 'replaceState');
     element._handleMessageAnchorTap(
@@ -423,7 +424,7 @@
 
   test('_handleDiffAgainstBase', () => {
     element._change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       revisions: createRevisions(10),
     };
     element._patchRange = {
@@ -440,7 +441,7 @@
 
   test('_handleDiffAgainstLatest', () => {
     element._change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       revisions: createRevisions(10),
     };
     element._patchRange = {
@@ -460,7 +461,7 @@
 
   test('_handleDiffBaseAgainstLeft', () => {
     element._change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       revisions: createRevisions(10),
     };
     element._patchRange = {
@@ -479,7 +480,7 @@
 
   test('_handleDiffRightAgainstLatest', () => {
     element._change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       revisions: createRevisions(10),
     };
     element._patchRange = {
@@ -498,7 +499,7 @@
 
   test('_handleDiffBaseAgainstLatest', () => {
     element._change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       revisions: createRevisions(10),
     };
     element._patchRange = {
@@ -686,14 +687,14 @@
     test('A toggles overlay when logged in', done => {
       sinon.stub(element, '_getLoggedIn').returns(Promise.resolve(true));
       element._change = {
-        ...createChange(),
+        ...createChangeViewChange(),
         revisions: createRevisions(1),
         messages: createChangeMessages(1),
       };
       element._change.labels = {};
       stubRestApi('getChangeDetail').callsFake(() =>
         Promise.resolve({
-          ...createChange(),
+          ...createChangeViewChange(),
           // element has latest info
           revisions: createRevisions(1),
           messages: createChangeMessages(1),
@@ -723,7 +724,7 @@
       element._loggedIn = true;
       element._loading = false;
       element._change = {
-        ...createChange(),
+        ...createChangeViewChange(),
         labels: {},
         actions: {
           abandon: {
@@ -750,7 +751,7 @@
       element._loggedIn = true;
       element._loading = false;
       element._change = {
-        ...createChange(),
+        ...createChangeViewChange(),
         labels: {},
         actions: {
           abandon: {
@@ -837,7 +838,7 @@
         patchNum: 1 as RevisionPatchSetNum,
       };
       element._change = {
-        ...createChange(),
+        ...createChangeViewChange(),
         revisions: {
           rev1: createRevision(),
         },
@@ -958,7 +959,7 @@
   suite('_recomputeComments', () => {
     setup(() => {
       element._changeNum = TEST_NUMERIC_CHANGE_ID;
-      element._change = createChange();
+      element._change = createChangeViewChange();
       flush();
       // Fake computeDraftCount as its required for ChangeComments,
       // see gr-comment-api#reloadDrafts.
@@ -969,7 +970,7 @@
           computeDraftCount: () => 0,
         } as ChangeComments)
       );
-      element._change = createChange();
+      element._change = createChangeViewChange();
       element._changeNum = element._change._number;
     });
 
@@ -1080,7 +1081,7 @@
         patchNum: 1 as RevisionPatchSetNum,
       };
       element._change = {
-        ...createChange(),
+        ...createChangeViewChange(),
         revisions: {
           rev2: createRevision(2),
           rev1: createRevision(1),
@@ -1112,7 +1113,7 @@
     setup(done => {
       element._changeNum = TEST_NUMERIC_CHANGE_ID;
       element._change = {
-        ...createChange(),
+        ...createChangeViewChange(),
         revisions: {
           rev2: createRevision(2),
           rev1: createRevision(1),
@@ -1236,7 +1237,7 @@
   test('_changeStatuses', () => {
     element._loading = false;
     element._change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       revisions: {
         rev2: createRevision(2),
         rev1: createRevision(1),
@@ -1309,7 +1310,7 @@
       patchNum: 1 as RevisionPatchSetNum,
     };
     const change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       owner: createAccountWithIdNameAndEmail(),
       revisions: {
         rev2: createRevision(2),
@@ -1409,7 +1410,7 @@
 
   test('change num change', () => {
     const change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       labels: {},
     } as ParsedChangeInfo;
     stubRestApi('getChangeDetail').returns(Promise.resolve(change));
@@ -1592,29 +1593,9 @@
     });
   });
 
-  test('_computeMergedCommitInfo', () => {
-    const dummyRevs: {[revisionId: string]: RevisionInfo} = {
-      1: createRevision(1),
-      2: createRevision(2),
-    };
-    assert.deepEqual(
-      element._computeMergedCommitInfo('0' as CommitId, dummyRevs),
-      {}
-    );
-    assert.deepEqual(
-      element._computeMergedCommitInfo('1' as CommitId, dummyRevs),
-      dummyRevs[1].commit
-    );
-
-    // Regression test for issue 5337.
-    const commit = element._computeMergedCommitInfo('2' as CommitId, dummyRevs);
-    assert.notDeepEqual(commit, dummyRevs[2]);
-    assert.deepEqual(commit, dummyRevs[2].commit);
-  });
-
   test('_computeCopyTextForTitle', () => {
     const change: ChangeInfo = {
-      ...createChange(),
+      ...createChangeViewChange(),
       _number: 123 as NumericChangeId,
       subject: 'test subject',
       revisions: {
@@ -1645,6 +1626,7 @@
       revisions: {
         rev1: createRevision(1),
       },
+      current_revision: undefined,
     };
     assert.equal(element._getLatestRevisionSHA(change), 'rev1');
   });
@@ -1652,7 +1634,7 @@
   test('show commit message edit button', () => {
     const change = createChange();
     const mergedChanged: ChangeInfo = {
-      ...createChange(),
+      ...createChangeViewChange(),
       status: ChangeStatus.MERGED,
     };
     assert.isTrue(element._computeHideEditCommitMessage(false, false, change));
@@ -1671,7 +1653,7 @@
   });
 
   test('_handleCommitMessageSave trims trailing whitespace', () => {
-    element._change = createChange();
+    element._change = createChangeViewChange();
     // Response code is 500, because we want to avoid window reloading
     const putStub = stubRestApi('putChangeCommitMessage').returns(
       Promise.resolve(new Response(null, {status: 500}))
@@ -1694,7 +1676,7 @@
   test('_computeChangeIdCommitMessageError', () => {
     let commitMessage = 'Change-Id: I4ce18b2395bca69d7a9aa48bf4554faa56282483';
     let change: ChangeInfo = {
-      ...createChange(),
+      ...createChangeViewChange(),
       change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282483' as ChangeId,
     };
     assert.equal(
@@ -1703,7 +1685,7 @@
     );
 
     change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282484' as ChangeId,
     };
     assert.equal(
@@ -1724,7 +1706,7 @@
       'Change-Id: I4ce18b2395bca69d7a9aa48bf4554faa56282483',
     ].join('\n');
     let change: ChangeInfo = {
-      ...createChange(),
+      ...createChangeViewChange(),
       change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282483' as ChangeId,
     };
     assert.equal(
@@ -1732,7 +1714,7 @@
       null
     );
     change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282484' as ChangeId,
     };
     assert.equal(
@@ -1747,7 +1729,7 @@
       'Change-Id: I4ce18b2395bca69d7a9aa48bf4554faa56282483',
     ].join(' and ');
     let change: ChangeInfo = {
-      ...createChange(),
+      ...createChangeViewChange(),
       change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282484' as ChangeId,
     };
     assert.equal(
@@ -1755,7 +1737,7 @@
       null
     );
     change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282483' as ChangeId,
     };
     assert.equal(
@@ -1793,7 +1775,7 @@
     sinon.stub(element, '_changeChanged');
     stubRestApi('getChangeDetail').returns(
       Promise.resolve({
-        ...createChange(),
+        ...createChangeViewChange(),
         labels: {},
         current_revision: 'foo' as CommitId,
         revisions: {foo: createRevision()},
@@ -1810,7 +1792,7 @@
     sinon.stub(element, '_changeChanged');
     stubRestApi('getChangeDetail').callsFake(() =>
       Promise.resolve({
-        ...createChange(),
+        ...createChangeViewChange(),
         labels: {},
         current_revision: 'foo' as CommitId,
         revisions: {foo: createRevision()},
@@ -1828,7 +1810,7 @@
     const changeRevision = createRevision();
     stubRestApi('getChangeDetail').callsFake(() =>
       Promise.resolve({
-        ...createChange(),
+        ...createChangeViewChange(),
         labels: {},
         current_revision: 'foo' as CommitId,
         revisions: {foo: {...changeRevision}},
@@ -1862,7 +1844,7 @@
 
   test('_getBasePatchNum', () => {
     const _change: ChangeInfo = {
-      ...createChange(),
+      ...createChangeViewChange(),
       revisions: {
         '98da160735fb81604b4c40e93c368f380539dd0e': createRevision(),
       },
@@ -1878,7 +1860,7 @@
     };
 
     const _change2: ChangeInfo = {
-      ...createChange(),
+      ...createChangeViewChange(),
       revisions: {
         '98da160735fb81604b4c40e93c368f380539dd0e': {
           ...createRevision(1),
@@ -1992,7 +1974,7 @@
       patchNum: 2 as RevisionPatchSetNum,
     };
     element._change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       revisions: {
         rev1: createRevision(1),
         rev2: createRevision(2),
@@ -2053,14 +2035,14 @@
     setup(() => {
       sinon.stub(element.$.replyDialog, '_draftChanged');
       element._change = {
-        ...createChange(),
+        ...createChangeViewChange(),
         revisions: createRevisions(1),
         messages: createChangeMessages(1),
       };
       element._change.labels = {};
       stubRestApi('getChangeDetail').callsFake(() =>
         Promise.resolve({
-          ...createChange(),
+          ...createChangeViewChange(),
           // element has latest info
           revisions: {rev1: createRevision()},
           messages: createChangeMessages(1),
@@ -2145,14 +2127,14 @@
   suite('commit message expand/collapse', () => {
     setup(() => {
       element._change = {
-        ...createChange(),
+        ...createChangeViewChange(),
         revisions: createRevisions(1),
         messages: createChangeMessages(1),
       };
       element._change.labels = {};
       stubRestApi('getChangeDetail').callsFake(() =>
         Promise.resolve({
-          ...createChange(),
+          ...createChangeViewChange(),
           // new patchset was uploaded
           revisions: createRevisions(2),
           current_revision: getCurrentRevision(2),
@@ -2331,7 +2313,7 @@
         clock = sinon.useFakeTimers();
         startUpdateCheckTimerSpy = sinon.spy(element, '_startUpdateCheckTimer');
         element._change = {
-          ...createChange(),
+          ...createChangeViewChange(),
           revisions: createRevisions(1),
           messages: createChangeMessages(1),
         };
@@ -2340,7 +2322,7 @@
       test('_startUpdateCheckTimer negative delay', () => {
         const getChangeDetailStub = stubRestApi('getChangeDetail').returns(
           Promise.resolve({
-            ...createChange(),
+            ...createChangeViewChange(),
             // element has latest info
             revisions: {rev1: createRevision()},
             messages: createChangeMessages(1),
@@ -2361,7 +2343,7 @@
         const getChangeDetailStub = stubRestApi('getChangeDetail').callsFake(
           () =>
             Promise.resolve({
-              ...createChange(),
+              ...createChangeViewChange(),
               // element has latest info
               revisions: {rev1: createRevision()},
               messages: createChangeMessages(1),
@@ -2409,7 +2391,7 @@
       test('_startUpdateCheckTimer respects _loading', async () => {
         stubRestApi('getChangeDetail').callsFake(() =>
           Promise.resolve({
-            ...createChange(),
+            ...createChangeViewChange(),
             // new patchset was uploaded
             revisions: createRevisions(2),
             current_revision: getCurrentRevision(2),
@@ -2432,7 +2414,7 @@
       test('_startUpdateCheckTimer new status shows an alert', async () => {
         stubRestApi('getChangeDetail').callsFake(() =>
           Promise.resolve({
-            ...createChange(),
+            ...createChangeViewChange(),
             // element has latest info
             revisions: {rev1: createRevision()},
             messages: createChangeMessages(1),
@@ -2458,7 +2440,7 @@
       test('_startUpdateCheckTimer new messages shows an alert', async () => {
         stubRestApi('getChangeDetail').callsFake(() =>
           Promise.resolve({
-            ...createChange(),
+            ...createChangeViewChange(),
             revisions: {rev1: createRevision()},
             // element has new message
             messages: createChangeMessages(2),
@@ -2484,7 +2466,7 @@
     test('canStartReview computation', () => {
       const change1: ChangeInfo = createChange();
       const change2: ChangeInfo = {
-        ...createChange(),
+        ...createChangeViewChange(),
         actions: {
           ready: {
             enabled: true,
@@ -2492,7 +2474,7 @@
         },
       };
       const change3: ChangeInfo = {
-        ...createChange(),
+        ...createChangeViewChange(),
         actions: {
           ready: {
             label: 'Ready for Review',
@@ -2567,7 +2549,7 @@
   test('_processEdit', () => {
     element._patchRange = {};
     const change: ParsedChangeInfo = {
-      ...createChange(),
+      ...createChangeViewChange(),
       current_revision: 'foo' as CommitId,
       revisions: {
         foo: {...createRevision(), actions: {cherrypick: {enabled: true}}},
@@ -2622,7 +2604,7 @@
       patchNum: 1 as RevisionPatchSetNum,
     };
     element._change = {
-      ...createChange(),
+      ...createChangeViewChange(),
     };
     const fileList = element.$.fileList;
     const Actions = GrEditConstants.Actions;
@@ -2700,7 +2682,7 @@
     const revision2: RevisionInfo = createRevision(2);
     stubRestApi('getChangeDetail').returns(
       Promise.resolve({
-        ...createChange(),
+        ...createChangeViewChange(),
         revisions: {
           aaa: revision1,
           bbb: revision2,
@@ -2729,7 +2711,7 @@
     const revision3 = createEditRevision();
     stubRestApi('getChangeDetail').returns(
       Promise.resolve({
-        ...createChange(),
+        ...createChangeViewChange(),
         revisions: {
           aaa: revision1,
           bbb: revision2,
@@ -2751,7 +2733,7 @@
   });
 
   test('_sendShowChangeEvent', () => {
-    const change = {...createChange(), labels: {}};
+    const change = {...createChangeViewChange(), labels: {}};
     element._change = {...change};
     element._patchRange = {patchNum: 4 as RevisionPatchSetNum};
     element._mergeable = true;
@@ -2776,7 +2758,7 @@
       navigateToChangeStub.restore();
 
       element._change = {
-        ...createChange(),
+        ...createChangeViewChange(),
         revisions: {rev1: createRevision()},
       };
     });
@@ -2830,7 +2812,7 @@
 
   test('_handleStopEditTap', done => {
     element._change = {
-      ...createChange(),
+      ...createChangeViewChange(),
     };
     sinon.stub(element.$.metadata, '_computeLabelNames');
     navigateToChangeStub.restore();
@@ -2848,7 +2830,7 @@
 
   suite('plugin endpoints', () => {
     test('endpoint params', done => {
-      element._change = {...createChange(), labels: {}};
+      element._change = {...createChangeViewChange(), labels: {}};
       element._selectedRevision = createRevision();
       let hookEl: HTMLElement;
       let plugin: PluginApi;
@@ -2875,7 +2857,7 @@
   suite('_getMergeability', () => {
     let getMergeableStub: SinonStubbedMember<RestApiService['getMergeable']>;
     setup(() => {
-      element._change = {...createChange(), labels: {}};
+      element._change = {...createChangeViewChange(), labels: {}};
       getMergeableStub = stubRestApi('getMergeable').returns(
         Promise.resolve({...createMergeable(), mergeable: true})
       );
@@ -2927,7 +2909,7 @@
 
   test('_handleToggleStar called when star is tapped', () => {
     element._change = {
-      ...createChange(),
+      ...createChangeViewChange(),
       owner: {_account_id: 1 as AccountId},
       starred: false,
     };