From 4e2d27795df3b68a859f9b2547a53a4f23326bda Mon Sep 17 00:00:00 2001
From: George Lee <mclee@foolme.net>
Date: Sat, 16 Nov 2013 20:51:56 +0800
Subject: [PATCH] bugfixes, add tests

---
 lib/geocoder/lookups/baidu.rb            |  4 ++--
 lib/geocoder/results/baidu.rb            | 16 ++++++++++++++++
 test/fixtures/baidu_invalid_key          |  1 +
 test/fixtures/baidu_no_results           |  1 +
 test/fixtures/baidu_reverse              |  1 +
 test/fixtures/baidu_shanghai_pearl_tower | 12 ++++++++++++
 test/test_helper.rb                      |  9 +++++++++
 7 files changed, 42 insertions(+), 2 deletions(-)
 create mode 100644 test/fixtures/baidu_invalid_key
 create mode 100644 test/fixtures/baidu_no_results
 create mode 100644 test/fixtures/baidu_reverse
 create mode 100644 test/fixtures/baidu_shanghai_pearl_tower

diff --git a/lib/geocoder/lookups/baidu.rb b/lib/geocoder/lookups/baidu.rb
index 4bd80f21..51b74620 100644
--- a/lib/geocoder/lookups/baidu.rb
+++ b/lib/geocoder/lookups/baidu.rb
@@ -21,7 +21,7 @@ module Geocoder::Lookup
     def results(query, reverse = false)
       return [] unless doc = fetch_data(query)
       case doc['status']; when 0
-        return [doc['result']]
+        return [doc['result']] unless doc['result'].blank?
       when 1, 3, 4
         raise_error(Geocoder::Error, messages) ||
           warn("Baidu Geocoding API error: server error.")
@@ -46,7 +46,7 @@ module Geocoder::Lookup
         (query.reverse_geocode? ? :location : :address) => query.sanitized_text,
         :ak => configuration.api_key,
         :output => "json"
-      }
+      }.merge(super)
     end
 
   end
diff --git a/lib/geocoder/results/baidu.rb b/lib/geocoder/results/baidu.rb
index 27adbde1..62fbc6f1 100644
--- a/lib/geocoder/results/baidu.rb
+++ b/lib/geocoder/results/baidu.rb
@@ -43,6 +43,22 @@ module Geocoder::Result
       @data['addressComponent']
     end
 
+    def state_code
+      ""
+    end
+
+    def postal_code
+      ""
+    end
+
+    def country
+      "China"
+    end
+
+    def country_code
+      "CN"
+    end
+
     ##
     # Get address components of a given type. Valid types are defined in
     # Baidu's Geocoding API documentation and include (among others):
diff --git a/test/fixtures/baidu_invalid_key b/test/fixtures/baidu_invalid_key
new file mode 100644
index 00000000..9e706568
--- /dev/null
+++ b/test/fixtures/baidu_invalid_key
@@ -0,0 +1 @@
+{"results":[],"status":5,"msg":"AK Illegal or Not Exist:"}
diff --git a/test/fixtures/baidu_no_results b/test/fixtures/baidu_no_results
new file mode 100644
index 00000000..1ab1ab3f
--- /dev/null
+++ b/test/fixtures/baidu_no_results
@@ -0,0 +1 @@
+{"status":0,"result":[]}
diff --git a/test/fixtures/baidu_reverse b/test/fixtures/baidu_reverse
new file mode 100644
index 00000000..bf6dcf0c
--- /dev/null
+++ b/test/fixtures/baidu_reverse
@@ -0,0 +1 @@
+{"status":0,"result":{"location":{"lng":121.48789948569,"lat":31.249161555654},"formatted_address":"上海市闸北区天潼路619号","business":"七浦路,海宁路,北京东路","addressComponent":{"city":"上海市","district":"闸北区","province":"上海市","street":"天潼路","street_number":"619号"},"cityCode":289}}
diff --git a/test/fixtures/baidu_shanghai_pearl_tower b/test/fixtures/baidu_shanghai_pearl_tower
new file mode 100644
index 00000000..f5619fe2
--- /dev/null
+++ b/test/fixtures/baidu_shanghai_pearl_tower
@@ -0,0 +1,12 @@
+{
+	"status":0,
+		"result":{
+			"location":{
+				"lng":116.30814954222,
+				"lat":40.056885091681
+			},
+			"precise":1,
+			"confidence":80,
+			"level":"\u5546\u52a1\u5927\u53a6"
+		}
+}
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 24ca32c7..06e3272f 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -147,6 +147,15 @@ module Geocoder
       end
     end
 
+    class Baidu
+      private
+      def fixture_prefix
+        "baidu"
+      end
+      def default_fixture_filename
+        "baidu_shanghai_pearl_tower"
+      end
+    end
   end
 end
 
-- 
GitLab