diff --git a/packages/forest_admin_datasource_rpc/lib/forest_admin_datasource_rpc/collection.rb b/packages/forest_admin_datasource_rpc/lib/forest_admin_datasource_rpc/collection.rb index c797d77f7..46a17c196 100644 --- a/packages/forest_admin_datasource_rpc/lib/forest_admin_datasource_rpc/collection.rb +++ b/packages/forest_admin_datasource_rpc/lib/forest_admin_datasource_rpc/collection.rb @@ -127,7 +127,7 @@ def execute(caller, name, data, filter = nil) "Forwarding '#{@name}' action #{name} call to the Rpc agent on #{url}." ) - @client.call_rpc(url, caller: caller, method: :post, payload: params) + @client.call_rpc(url, caller: caller, method: :post, payload: params, symbolize_keys: true) end def get_form(caller, name, data = nil, filter = nil, metas = nil) diff --git a/packages/forest_admin_datasource_rpc/spec/lib/forest_admin_datasource_rpc/collection_spec.rb b/packages/forest_admin_datasource_rpc/spec/lib/forest_admin_datasource_rpc/collection_spec.rb index 953797ff8..83b3d05af 100644 --- a/packages/forest_admin_datasource_rpc/spec/lib/forest_admin_datasource_rpc/collection_spec.rb +++ b/packages/forest_admin_datasource_rpc/spec/lib/forest_admin_datasource_rpc/collection_spec.rb @@ -233,6 +233,30 @@ module ForestAdminDatasourceRpc ) end end + + it 'asks the RPC client to symbolize response keys so ActionResult.parse sees :type' do + collection.execute(caller, 'my_action', {}) + + expect(rpc_client).to have_received(:call_rpc) do |_url, options| + expect(options[:symbolize_keys]).to be(true) + end + end + + it 'returns the action result as-is so :type and other keys reach ActionResult.parse' do + success_result = { + type: 'Success', + message: 'ok', + invalidated: ['books'], + html: nil, + response_headers: {} + } + allow(rpc_client).to receive(:call_rpc).and_return(success_result) + + result = collection.execute(caller, 'my_action', {}) + + expect(result).to eq(success_result) + expect(result[:type]).to eq('Success') + end end context 'when call get_form' do