From 864d5d4efdf542e94df47fff1f3687d72525f5de Mon Sep 17 00:00:00 2001 From: Geremia Taglialatela Date: Sun, 26 Feb 2023 20:23:18 +0100 Subject: [PATCH 1/2] Support Rails' `parsed_body` in Integration tests Ref: https://api.rubyonrails.org/classes/ActionDispatch/TestResponse.html Close #140 --- lib/jsonapi/rails/railtie.rb | 7 +++++++ spec/parsed_body_spec.rb | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 spec/parsed_body_spec.rb diff --git a/lib/jsonapi/rails/railtie.rb b/lib/jsonapi/rails/railtie.rb index 152c809..68d06fb 100644 --- a/lib/jsonapi/rails/railtie.rb +++ b/lib/jsonapi/rails/railtie.rb @@ -23,6 +23,7 @@ class Railtie < ::Rails::Railtie initializer 'jsonapi-rails.init' do |app| register_mime_type register_parameter_parser + register_encoder register_renderers ActiveSupport.on_load(:action_controller) do require 'jsonapi/rails/controller' @@ -46,6 +47,12 @@ def register_parameter_parser end end + def register_encoder + ActiveSupport.on_load(:action_dispatch_integration_test) do + register_encoder :jsonapi, response_parser: ->(body) { JSON.parse(body) } + end + end + # rubocop:disable Metrics/MethodLength def register_renderers ActiveSupport.on_load(:action_controller) do diff --git a/spec/parsed_body_spec.rb b/spec/parsed_body_spec.rb new file mode 100644 index 0000000..985d582 --- /dev/null +++ b/spec/parsed_body_spec.rb @@ -0,0 +1,17 @@ +require 'rails_helper' + +describe ActionController::Base, type: :controller, if: Rails.version >= '6.0' do + controller do + def index + render jsonapi: nil + end + end + + subject(:parsed_body) { response.parsed_body } + + it 'allows using parsed_body in ActionController::TestCase' do + get :index + + expect(parsed_body).to eq(JSON.parse(response.body)) + end +end From ff7a189fa314101927a7b3e7985c6186b346c32f Mon Sep 17 00:00:00 2001 From: Ben Mills Date: Tue, 23 May 2023 14:22:49 -0600 Subject: [PATCH 2/2] Add param_encoder to register_encoder --- lib/jsonapi/rails/railtie.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/jsonapi/rails/railtie.rb b/lib/jsonapi/rails/railtie.rb index 68d06fb..295383f 100644 --- a/lib/jsonapi/rails/railtie.rb +++ b/lib/jsonapi/rails/railtie.rb @@ -49,7 +49,9 @@ def register_parameter_parser def register_encoder ActiveSupport.on_load(:action_dispatch_integration_test) do - register_encoder :jsonapi, response_parser: ->(body) { JSON.parse(body) } + register_encoder :jsonapi, + param_encoder: -> (params) { params.to_json }, + response_parser: -> (body) { JSON.parse(body) } end end