Merge pull request #1314 from Antonio-Maranhao/fix-link-changes-page

Fix: Changes page generates incorrect link for doc IDs with special chars
diff --git a/app/addons/documents/__tests__/changes.test.js b/app/addons/documents/__tests__/changes.test.js
index 6723f3c..6e0ce29 100644
--- a/app/addons/documents/__tests__/changes.test.js
+++ b/app/addons/documents/__tests__/changes.test.js
@@ -183,4 +183,15 @@
     const changeRow = mount(<ChangeRow change={change} databaseName="testDatabase" />);
     expect(changeRow.find('a.js-doc-link').length).toBe(1);
   });
+
+  it('generates correct URL for doc and db with special chars', () => {
+    const changeSpecialChars = {
+      id: 'space newline\nquestion_mark?',
+      seq: 5,
+      deleted: false,
+      changes: { code: 'here' }
+    };
+    const changeRow = mount(<ChangeRow change={changeSpecialChars} databaseName="db/name" />);
+    expect(changeRow.find('a.js-doc-link').at(0).prop('href')).toBe('#/database/db%2Fname/space%20newline%0Aquestion_mark%3F');
+  });
 });
diff --git a/app/addons/documents/changes/components/ChangeID.js b/app/addons/documents/changes/components/ChangeID.js
index 79c8a33..6a2b1a4 100644
--- a/app/addons/documents/changes/components/ChangeID.js
+++ b/app/addons/documents/changes/components/ChangeID.js
@@ -21,7 +21,7 @@
         <span className="js-doc-id">{id}</span>
       );
     }
-    const link = '#' + FauxtonAPI.urls('document', 'app', databaseName, id);
+    const link = '#' + FauxtonAPI.urls('document', 'app', encodeURIComponent(databaseName), encodeURIComponent(id));
     return (
       <a href={link} className="js-doc-link">{id}</a>
     );