]> git.openstreetmap.org Git - rails.git/commitdiff
Merge branch 'pull/3164'
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 14 Apr 2021 15:13:29 +0000 (16:13 +0100)
committerAndy Allan <git@gravitystorm.co.uk>
Wed, 14 Apr 2021 15:13:29 +0000 (16:13 +0100)
app/controllers/api/user_preferences_controller.rb
app/views/api/user_preferences/index.json.jbuilder [new file with mode: 0644]
test/controllers/api/user_preferences_controller_test.rb

index ddc5d7f430a9eff0c085bedaf40cf3a9d70a76b5..40ccfccbbc4a222a841c67f312d6665a13998a10 100644 (file)
@@ -7,12 +7,17 @@ module Api
 
     around_action :api_call_handle_error
 
+    before_action :set_request_formats
+
     ##
-    # return all the preferences as an XML document
+    # return all the preferences
     def index
       @user_preferences = current_user.preferences
 
-      render :formats => [:xml]
+      respond_to do |format|
+        format.xml
+        format.json
+      end
     end
 
     ##
diff --git a/app/views/api/user_preferences/index.json.jbuilder b/app/views/api/user_preferences/index.json.jbuilder
new file mode 100644 (file)
index 0000000..064bf27
--- /dev/null
@@ -0,0 +1,3 @@
+json.partial! "api/root_attributes"
+
+json.preferences @user_preferences.map { |pref| [pref.k, pref.v] }.to_h
index 7cfc875efb6f98b543f243a8120a7ffee04cce0a..3d3f7971201e6951967e53ea54512c8785ed403a 100644 (file)
@@ -9,6 +9,10 @@ module Api
         { :path => "/api/0.6/user/preferences", :method => :get },
         { :controller => "api/user_preferences", :action => "index" }
       )
+      assert_routing(
+        { :path => "/api/0.6/user/preferences.json", :method => :get },
+        { :controller => "api/user_preferences", :action => "index", :format => "json" }
+      )
       assert_routing(
         { :path => "/api/0.6/user/preferences", :method => :put },
         { :controller => "api/user_preferences", :action => "update_all" }
@@ -62,6 +66,16 @@ module Api
           assert_select "preference[k=\"#{user_preference2.k}\"][v=\"#{user_preference2.v}\"]", :count => 1
         end
       end
+
+      # Test json
+      get user_preferences_path(:format => "json"), :headers => auth_header
+      assert_response :success
+      assert_equal "application/json", @response.media_type
+
+      js = ActiveSupport::JSON.decode(@response.body)
+      assert_not_nil js
+      assert_equal 2, js["preferences"].count
+      assert_equal user_preference.v, js["preferences"][user_preference.k]
     end
 
     ##