From c9e836a6cb070dc28deac3298994ba0118222e91 Mon Sep 17 00:00:00 2001 From: mmd-osm Date: Tue, 8 Mar 2022 20:21:35 +0100 Subject: [PATCH] JSON output added to permissions endpoint --- app/controllers/api/permissions_controller.rb | 6 +++++ app/views/api/permissions/show.json.jbuilder | 3 +++ .../{show.builder => show.xml.builder} | 0 .../api/permissions_controller_test.rb | 25 +++++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 app/views/api/permissions/show.json.jbuilder rename app/views/api/permissions/{show.builder => show.xml.builder} (100%) diff --git a/app/controllers/api/permissions_controller.rb b/app/controllers/api/permissions_controller.rb index 73b84f8ed..07685ed68 100644 --- a/app/controllers/api/permissions_controller.rb +++ b/app/controllers/api/permissions_controller.rb @@ -4,6 +4,7 @@ module Api before_action :check_api_readable before_action :setup_user_auth + before_action :set_request_formats around_action :api_call_handle_error, :api_call_timeout # External apps that use the api are able to query which permissions @@ -21,6 +22,11 @@ module Api else [] end + + respond_to do |format| + format.xml + format.json + end end end end diff --git a/app/views/api/permissions/show.json.jbuilder b/app/views/api/permissions/show.json.jbuilder new file mode 100644 index 000000000..ae048bf22 --- /dev/null +++ b/app/views/api/permissions/show.json.jbuilder @@ -0,0 +1,3 @@ +json.partial! "api/root_attributes" + +json.permissions @permissions diff --git a/app/views/api/permissions/show.builder b/app/views/api/permissions/show.xml.builder similarity index 100% rename from app/views/api/permissions/show.builder rename to app/views/api/permissions/show.xml.builder diff --git a/test/controllers/api/permissions_controller_test.rb b/test/controllers/api/permissions_controller_test.rb index 3101abee2..cca85b404 100644 --- a/test/controllers/api/permissions_controller_test.rb +++ b/test/controllers/api/permissions_controller_test.rb @@ -9,6 +9,10 @@ module Api { :path => "/api/0.6/permissions", :method => :get }, { :controller => "api/permissions", :action => "show" } ) + assert_routing( + { :path => "/api/0.6/permissions.json", :method => :get }, + { :controller => "api/permissions", :action => "show", :format => "json" } + ) end def test_permissions_anonymous @@ -17,6 +21,15 @@ module Api assert_select "osm > permissions", :count => 1 do assert_select "permission", :count => 0 end + + # Test json + get permissions_path(:format => "json") + assert_response :success + assert_equal "application/json", @response.media_type + + js = ActiveSupport::JSON.decode(@response.body) + assert_not_nil js + assert_equal 0, js["permissions"].count end def test_permissions_basic_auth @@ -29,6 +42,18 @@ module Api assert_select "permission[name='#{p}']", :count => 1 end end + + # Test json + get permissions_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 ClientApplication.all_permissions.size, js["permissions"].count + ClientApplication.all_permissions.each do |p| + assert_includes js["permissions"], p.to_s + end end def test_permissions_oauth1 -- 2.43.2