Merge "Fix wrong edit url being used within gr-file-list-header" into stable-3.2
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router.js b/polygerrit-ui/app/elements/core/gr-router/gr-router.js
index e861f2e..ae8162f 100644
--- a/polygerrit-ui/app/elements/core/gr-router/gr-router.js
+++ b/polygerrit-ui/app/elements/core/gr-router/gr-router.js
@@ -1367,6 +1367,15 @@
       queryMap: ctx.queryMap,
     };
 
+    // We do not want to allow "edit" to be used as a
+    // patch number. Instead redirect to ,edit.
+    if (ctx.params[4] === 'edit' && !ctx.params[6]) {
+      params.basePatchNum = undefined;
+      params.edit = true;
+      this._redirect(this._generateUrl(params));
+      return;
+    }
+
     this.$.reporting.setRepoName(params.project);
     this._redirectOrNavigate(params);
   }
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.html b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.html
index 2b2db0b..0e82a54 100644
--- a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.html
+++ b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.html
@@ -1428,16 +1428,16 @@
       suite('_handleChangeRoute', () => {
         let normalizeRangeStub;
 
-        function makeParams(path, hash) {
+        function makeParams(path, hash, baseNum, patchNum) {
           return {
             params: [
               'foo/bar', // 0 Project
               1234, // 1 Change number
               null, // 2 Unused
               null, // 3 Unused
-              4, // 4 Base patch number
+              baseNum ? baseNum : 4, // 4 Base patch number
               null, // 5 Unused
-              7, // 6 Patch number
+              patchNum ? patchNum : 7, // 6 Patch number
             ],
             queryMap: new Map(),
           };
@@ -1475,6 +1475,23 @@
           assert.isFalse(redirectStub.called);
           assert.isTrue(normalizeRangeStub.called);
         });
+
+        test('redirect due to patchNum being an edit', () => {
+          normalizeRangeStub.returns(true);
+          const ctx = makeParams(null, '');
+          element._handleChangeRoute(ctx, undefined, 'edit', false);
+          assert.isTrue(normalizeRangeStub.called);
+          assert.isFalse(setParamsStub.called);
+          assert.isTrue(redirectStub.calledOnce);
+
+          const params = {
+            view: GerritNav.View.CHANGE,
+            changeNum: '1234',
+            project: 'test',
+            edit: true,
+          };
+          assert.equal(element._generateUrl(params), '/c/test/+/1234,edit');
+        });
       });
 
       suite('_handleDiffRoute', () => {