diff --git a/lib/committee/rails/request_object.rb b/lib/committee/rails/request_object.rb index 6b0c941..1d6f375 100644 --- a/lib/committee/rails/request_object.rb +++ b/lib/committee/rails/request_object.rb @@ -2,7 +2,7 @@ module Committee::Rails class RequestObject - delegate(*ActionDispatch::Request.public_instance_methods, to: :@request) + delegate_missing_to :@request def initialize(request) @request = request diff --git a/lib/committee/rails/test/methods.rb b/lib/committee/rails/test/methods.rb index 7aab56f..ed85b32 100644 --- a/lib/committee/rails/test/methods.rb +++ b/lib/committee/rails/test/methods.rb @@ -10,7 +10,7 @@ def committee_options if defined?(RSpec) && (options = RSpec.try(:configuration).try(:committee_options)) options else - { schema_path: default_schema } + { schema_path: default_schema, query_hash_key: 'rack.request.query_hash', parse_response_by_content_type: false } end end diff --git a/spec/lib/methods_spec.rb b/spec/lib/methods_spec.rb index 43847bb..859e388 100644 --- a/spec/lib/methods_spec.rb +++ b/spec/lib/methods_spec.rb @@ -6,13 +6,13 @@ context 'when set option' do before do RSpec.configuration.add_setting :committee_options - RSpec.configuration.committee_options = { schema_path: Rails.root.join('schema', 'schema.yml').to_s, old_assert_behavior: false } + RSpec.configuration.committee_options = { schema_path: Rails.root.join('schema', 'schema.yml').to_s, old_assert_behavior: false, query_hash_key: 'rack.request.query_hash', parse_response_by_content_type: false } end context 'and when response conform YAML Schema' do it 'pass' do post '/users', params: { nickname: 'willnet' }.to_json, headers: { 'Content-Type' => 'application/json' } - assert_schema_conform + assert_schema_conform(200) end context 'and override #request method' do @@ -22,7 +22,7 @@ def request it 'pass' do post '/users', params: { nickname: 'willnet' }.to_json, headers: { 'Content-Type' => 'application/json' } - assert_schema_conform + assert_schema_conform(200) end end @@ -33,7 +33,7 @@ def response it 'pass' do post '/users', params: { nickname: 'willnet' }.to_json, headers: { 'Content-Type' => 'application/json' } - assert_schema_conform + assert_schema_conform(200) end end end @@ -41,22 +41,25 @@ def response context "and when response doesn't conform YAML Schema" do it 'raise Committee::InvalidResponse' do patch '/users/1', params: { nickname: 'willnet' }.to_json, headers: { 'Content-Type' => 'application/json', 'Accept' => 'application/json' } - expect { assert_schema_conform }.to raise_error(Committee::InvalidResponse) + expect { assert_schema_conform(200) }.to raise_error(Committee::InvalidResponse) end end context 'and when bad request' do around do |example| + original_show_detailed_exceptions = Rails.application.env_config['action_dispatch.show_detailed_exceptions'] + original_show_exceptions = Rails.application.env_config['action_dispatch.show_exceptions'] Rails.application.env_config['action_dispatch.show_detailed_exceptions'] = false Rails.application.env_config['action_dispatch.show_exceptions'] = true - - example.run - - Rails.application.env_config['action_dispatch.show_detailed_exceptions'] = true - Rails.application.env_config['action_dispatch.show_exceptions'] = false + begin + example.run + ensure + Rails.application.env_config['action_dispatch.show_detailed_exceptions'] = original_show_detailed_exceptions + Rails.application.env_config['action_dispatch.show_exceptions'] = original_show_exceptions + end end - it 'pass' do + it 'pass as 400' do patch '/users/0', params: { nickname: 'willnet' }.to_json, headers: { 'Content-Type': 'application/json', 'Accept' => 'application/json' } assert_schema_conform(400) end @@ -71,18 +74,18 @@ def response it 'use default setting' do post '/users', params: { nickname: 'willnet' } - expect{ assert_schema_conform }.to raise_error(Errno::ENOENT) # not exist doc/schema/schema.json + expect{ assert_schema_conform(200) }.to raise_error(Errno::ENOENT) # not exist doc/schema/schema.json end end context 'when override default setting' do def committee_options - { schema_path: Rails.root.join('schema', 'schema.yml').to_s, old_assert_behavior: false } + { schema_path: Rails.root.join('schema', 'schema.yml').to_s, old_assert_behavior: false, query_hash_key: 'rack.request.query_hash', parse_response_by_content_type: false } end it 'use the setting' do post '/users', params: { nickname: 'willnet' }.to_json, headers: { 'Content-Type' => 'application/json' } - assert_schema_conform + assert_schema_conform(200) end end end