From 3c25ca2f9f11157f74b4a694400600462d130e1e Mon Sep 17 00:00:00 2001
From: Guo Xiang Tan <tgx_world@hotmail.com>
Date: Wed, 15 Jul 2015 09:54:55 +0800
Subject: [PATCH] FIX: Encode percent character in search terms.

---
 .../discourse/adapters/topic-list.js.es6            |  4 ++--
 test/javascripts/adapaters/topic-list-test.js.es6   | 13 +++++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)
 create mode 100644 test/javascripts/adapaters/topic-list-test.js.es6

diff --git a/app/assets/javascripts/discourse/adapters/topic-list.js.es6 b/app/assets/javascripts/discourse/adapters/topic-list.js.es6
index 46a3a566837..bb7375597dc 100644
--- a/app/assets/javascripts/discourse/adapters/topic-list.js.es6
+++ b/app/assets/javascripts/discourse/adapters/topic-list.js.es6
@@ -1,6 +1,6 @@
 import RestAdapter from 'discourse/adapters/rest';
 
-function finderFor(filter, params) {
+export function finderFor(filter, params) {
   return function() {
     let url = Discourse.getURL("/") + filter + ".json";
 
@@ -9,7 +9,7 @@ function finderFor(filter, params) {
           encoded = [];
 
       keys.forEach(function(p) {
-        const value = params[p];
+        const value = encodeURI(params[p]);
         if (typeof value !== 'undefined') {
           encoded.push(p + "=" + value);
         }
diff --git a/test/javascripts/adapaters/topic-list-test.js.es6 b/test/javascripts/adapaters/topic-list-test.js.es6
new file mode 100644
index 00000000000..89af1b92294
--- /dev/null
+++ b/test/javascripts/adapaters/topic-list-test.js.es6
@@ -0,0 +1,13 @@
+module("adapter:topic-list");
+
+import { finderFor } from 'discourse/adapters/topic-list';
+
+test("finderFor", function() {
+  // Mocking instead of using a pretender which decodes the path and thus does
+  // not reflect the behavior of an actual web server.
+  var mock = sandbox.mock(Discourse);
+  mock.expects("ajax").withArgs("/search.json?q=test%25%25");
+  var finderForFunction = finderFor('search', { q: "test%%" });
+  finderForFunction();
+  mock.verify();
+});