diff --git a/committee.gemspec b/committee.gemspec index 2aa6cd2c..1dd1efd4 100644 --- a/committee.gemspec +++ b/committee.gemspec @@ -33,10 +33,5 @@ Gem::Specification.new do |s| s.add_development_dependency "rubocop-performance" s.add_development_dependency "simplecov" - s.metadata = { - "bug_tracker_uri" => "https://github.com/interagent/committee/issues", - "changelog_uri" => "https://github.com/interagent/committee/blob/master/CHANGELOG.md", - "rubygems_mfa_required" => "true", - "source_code_uri" => "https://github.com/interagent/committee" - } + s.metadata = { "bug_tracker_uri" => "https://github.com/interagent/committee/issues", "changelog_uri" => "https://github.com/interagent/committee/blob/master/CHANGELOG.md", "rubygems_mfa_required" => "true", "source_code_uri" => "https://github.com/interagent/committee" } end diff --git a/lib/committee/drivers.rb b/lib/committee/drivers.rb index c5dcecd9..6c911057 100644 --- a/lib/committee/drivers.rb +++ b/lib/committee/drivers.rb @@ -61,9 +61,7 @@ def self.load_from_data(hash, schema_path = nil, parser_options: {}) # if it is not explicitly set. See: https://github.com/interagent/committee/issues/343#issuecomment-997400329 opts = parser_options.dup - Committee.warn_deprecated_until_6(!opts.key?(:strict_reference_validation), 'openapi_parser will default to strict reference validation ' + - 'from next version. Pass config `strict_reference_validation: true` (or false, if you must) ' + - 'to quiet this warning.') + Committee.warn_deprecated_until_6(!opts.key?(:strict_reference_validation), 'openapi_parser will default to strict reference validation ' + 'from next version. Pass config `strict_reference_validation: true` (or false, if you must) ' + 'to quiet this warning.') opts[:strict_reference_validation] ||= false openapi = OpenAPIParser.parse_with_filepath(hash, schema_path, opts) diff --git a/lib/committee/schema_validator/hyper_schema.rb b/lib/committee/schema_validator/hyper_schema.rb index b4fca83f..fa14d64c 100644 --- a/lib/committee/schema_validator/hyper_schema.rb +++ b/lib/committee/schema_validator/hyper_schema.rb @@ -65,13 +65,7 @@ def coerce_query_params(request) end def request_unpack(request) - unpacker = Committee::RequestUnpacker.new( - allow_form_params: validator_option.allow_form_params, - allow_get_body: validator_option.allow_get_body, - allow_query_params: validator_option.allow_query_params, - allow_non_get_query_params: validator_option.allow_non_get_query_params, - optimistic_json: validator_option.optimistic_json, - ) + unpacker = Committee::RequestUnpacker.new(allow_form_params: validator_option.allow_form_params, allow_get_body: validator_option.allow_get_body, allow_query_params: validator_option.allow_query_params, allow_non_get_query_params: validator_option.allow_non_get_query_params, optimistic_json: validator_option.optimistic_json,) request.env[validator_option.headers_key] = unpacker.unpack_headers(request) @@ -109,12 +103,7 @@ def request_schema_validation(request) def parameter_coerce!(request, link, coerce_key) return unless link_exist? - Committee::SchemaValidator::HyperSchema::ParameterCoercer. - new(request.env[coerce_key], - link.schema, - coerce_date_times: validator_option.coerce_date_times, - coerce_recursive: validator_option.coerce_recursive). - call! + Committee::SchemaValidator::HyperSchema::ParameterCoercer.new(request.env[coerce_key], link.schema, coerce_date_times: validator_option.coerce_date_times, coerce_recursive: validator_option.coerce_recursive).call! end end end diff --git a/lib/committee/schema_validator/hyper_schema/response_generator.rb b/lib/committee/schema_validator/hyper_schema/response_generator.rb index 4be004aa..5777303b 100644 --- a/lib/committee/schema_validator/hyper_schema/response_generator.rb +++ b/lib/committee/schema_validator/hyper_schema/response_generator.rb @@ -73,9 +73,7 @@ def generate_properties(link, schema) {} else - raise(%{At "#{link.method} #{link.href}" "#{schema.pointer}": no } + - %{"example" attribute and "null" } + - %{is not allowed; don't know how to generate property.}) + raise(%{At "#{link.method} #{link.href}" "#{schema.pointer}": no } + %{"example" attribute and "null" } + %{is not allowed; don't know how to generate property.}) end end diff --git a/lib/committee/schema_validator/open_api_3.rb b/lib/committee/schema_validator/open_api_3.rb index faedfc18..911d2a38 100644 --- a/lib/committee/schema_validator/open_api_3.rb +++ b/lib/committee/schema_validator/open_api_3.rb @@ -43,9 +43,7 @@ def response_validate(status, headers, response, test_method = false, custom_bod # TODO: refactoring name strict = test_method - Committee::SchemaValidator::OpenAPI3::ResponseValidator. - new(@operation_object, validator_option). - call(status, headers, data, strict) + Committee::SchemaValidator::OpenAPI3::ResponseValidator.new(@operation_object, validator_option).call(status, headers, data, strict) end def link_exist? @@ -85,14 +83,7 @@ def header(request) end def request_unpack(request) - unpacker = Committee::RequestUnpacker.new( - allow_empty_date_and_datetime: validator_option.allow_empty_date_and_datetime, - allow_form_params: validator_option.allow_form_params, - allow_get_body: validator_option.allow_get_body, - allow_query_params: validator_option.allow_query_params, - allow_non_get_query_params: validator_option.allow_non_get_query_params, - optimistic_json: validator_option.optimistic_json, - ) + unpacker = Committee::RequestUnpacker.new(allow_empty_date_and_datetime: validator_option.allow_empty_date_and_datetime, allow_form_params: validator_option.allow_form_params, allow_get_body: validator_option.allow_get_body, allow_query_params: validator_option.allow_query_params, allow_non_get_query_params: validator_option.allow_non_get_query_params, optimistic_json: validator_option.optimistic_json,) request.env[validator_option.headers_key] = unpacker.unpack_headers(request) diff --git a/lib/committee/schema_validator/open_api_3/operation_wrapper.rb b/lib/committee/schema_validator/open_api_3/operation_wrapper.rb index 2da83420..f3d81828 100644 --- a/lib/committee/schema_validator/open_api_3/operation_wrapper.rb +++ b/lib/committee/schema_validator/open_api_3/operation_wrapper.rb @@ -34,9 +34,7 @@ def coerce_path_parameter(validator_option) def validate_response_params(status_code, headers, response_data, strict, check_header, validator_options: {}) response_body = OpenAPIParser::RequestOperation::ValidatableResponseBody.new(status_code, response_data, headers) - return request_operation.validate_response_body( - response_body, - response_validate_options(strict, check_header, validator_options: validator_options)) + return request_operation.validate_response_body(response_body, response_validate_options(strict, check_header, validator_options: validator_options)) rescue OpenAPIParser::OpenAPIError => e raise Committee::InvalidResponse.new(e.message, original_error: e) end diff --git a/lib/committee/schema_validator/option.rb b/lib/committee/schema_validator/option.rb index a70be297..5b020973 100644 --- a/lib/committee/schema_validator/option.rb +++ b/lib/committee/schema_validator/option.rb @@ -4,23 +4,7 @@ module Committee module SchemaValidator class Option # Boolean Options - attr_reader :allow_blank_structures, - :allow_empty_date_and_datetime, - :allow_form_params, - :allow_get_body, - :allow_query_params, - :allow_non_get_query_params, - :check_content_type, - :check_header, - :coerce_date_times, - :coerce_form_params, - :coerce_path_params, - :coerce_query_params, - :coerce_recursive, - :optimistic_json, - :validate_success_only, - :parse_response_by_content_type, - :parameter_overwrite_by_rails_rule + attr_reader :allow_blank_structures, :allow_empty_date_and_datetime, :allow_form_params, :allow_get_body, :allow_query_params, :allow_non_get_query_params, :check_content_type, :check_header, :coerce_date_times, :coerce_form_params, :coerce_path_params, :coerce_query_params, :coerce_recursive, :optimistic_json, :validate_success_only, :parse_response_by_content_type, :parameter_overwrite_by_rails_rule # Non-boolean options: attr_reader :headers_key, :params_key, :query_hash_key, :request_body_hash_key, :path_hash_key, :prefix diff --git a/test/drivers/open_api_2/driver_test.rb b/test/drivers/open_api_2/driver_test.rb index 1f6b06d0..a8b00bb6 100644 --- a/test/drivers/open_api_2/driver_test.rb +++ b/test/drivers/open_api_2/driver_test.rb @@ -50,10 +50,7 @@ end it "prefers a 200 response first" do - schema_data = schema_data_with_responses({ - '201' => { 'schema' => { 'description' => '201 response' } }, - '200' => { 'schema' => { 'description' => '200 response' } }, - }) + schema_data = schema_data_with_responses({ '201' => { 'schema' => { 'description' => '201 response' } }, '200' => { 'schema' => { 'description' => '200 response' } }, }) schema = @driver.parse(schema_data) link = schema.routes['GET'][0][1] @@ -62,10 +59,7 @@ end it "prefers a 201 response next" do - schema_data = schema_data_with_responses({ - '302' => { 'schema' => { 'description' => '302 response' } }, - '201' => { 'schema' => { 'description' => '201 response' } }, - }) + schema_data = schema_data_with_responses({ '302' => { 'schema' => { 'description' => '302 response' } }, '201' => { 'schema' => { 'description' => '201 response' } }, }) schema = @driver.parse(schema_data) link = schema.routes['GET'][0][1] @@ -74,10 +68,7 @@ end it "prefers any three-digit response next" do - schema_data = schema_data_with_responses({ - 'default' => { 'schema' => { 'description' => 'default response' } }, - '302' => { 'schema' => { 'description' => '302 response' } }, - }) + schema_data = schema_data_with_responses({ 'default' => { 'schema' => { 'description' => 'default response' } }, '302' => { 'schema' => { 'description' => '302 response' } }, }) schema = @driver.parse(schema_data) link = schema.routes['GET'][0][1] @@ -86,10 +77,7 @@ end it "prefers any numeric three-digit response next" do - schema_data = schema_data_with_responses({ - 'default' => { 'schema' => { 'description' => 'default response' } }, - 302 => { 'schema' => { 'description' => '302 response' } }, - }) + schema_data = schema_data_with_responses({ 'default' => { 'schema' => { 'description' => 'default response' } }, 302 => { 'schema' => { 'description' => '302 response' } }, }) schema = @driver.parse(schema_data) link = schema.routes['GET'][0][1] diff --git a/test/drivers/open_api_2/parameter_schema_builder_test.rb b/test/drivers/open_api_2/parameter_schema_builder_test.rb index eee3b230..cb8ffa9d 100644 --- a/test/drivers/open_api_2/parameter_schema_builder_test.rb +++ b/test/drivers/open_api_2/parameter_schema_builder_test.rb @@ -38,20 +38,7 @@ end it "reflects an array with an items schema into a schema" do - data = { - "parameters" => [ - { - "name" => "tags", - "type" => "array", - "minItems" => 1, - "maxItems" => 10, - "uniqueItems" => true, - "items" => { - "type" => "string" - } - } - ] - } + data = { "parameters" => [{ "name" => "tags", "type" => "array", "minItems" => 1, "maxItems" => 10, "uniqueItems" => true, "items" => { "type" => "string" } }] } schema, schema_data = call(data) assert_nil schema_data @@ -71,18 +58,7 @@ end it "reflects string properties into a schema" do - data = { - "parameters" => [ - { - "name" => "password", - "type" => "string", - "format" => "password", - "pattern" => "[a-zA-Z0-9]+", - "minLength" => 6, - "maxLength" => 30 - } - ] - } + data = { "parameters" => [{ "name" => "password", "type" => "string", "format" => "password", "pattern" => "[a-zA-Z0-9]+", "minLength" => 6, "maxLength" => 30 }] } schema, schema_data = call(data) assert_nil schema_data @@ -93,19 +69,7 @@ end it "reflects number properties into a schema" do - data = { - "parameters" => [ - { - "name" => "limit", - "type" => "integer", - "minimum" => 20, - "exclusiveMinimum" => true, - "maximum" => 100, - "exclusiveMaximum" => false, - "multipleOf" => 10 - } - ] - } + data = { "parameters" => [{ "name" => "limit", "type" => "integer", "minimum" => 20, "exclusiveMinimum" => true, "maximum" => 100, "exclusiveMaximum" => false, "multipleOf" => 10 }] } schema, schema_data = call(data) assert_nil schema_data @@ -117,17 +81,7 @@ end it "returns schema data for a body parameter" do - data = { - "parameters" => [ - { - "name" => "payload", - "in" => "body", - "schema" => { - "$ref" => "#/definitions/foo", - } - } - ] - } + data = { "parameters" => [{ "name" => "payload", "in" => "body", "schema" => { "$ref" => "#/definitions/foo", } }] } schema, schema_data = call(data) assert_nil schema diff --git a/test/drivers_test.rb b/test/drivers_test.rb index 02e20ab7..85026b4a 100644 --- a/test/drivers_test.rb +++ b/test/drivers_test.rb @@ -74,27 +74,18 @@ describe 'cache behavior' do describe 'when loading the same file' do it 'returns the same object when the options are identical' do - assert_equal( - Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: true }).object_id, - Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: true }).object_id, - ) + assert_equal(Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: true }).object_id, Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: true }).object_id,) end it 'returns different objects if the options are different' do - refute_equal( - Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: true }).object_id, - Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: false }).object_id, - ) + refute_equal(Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: true }).object_id, Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: false }).object_id,) end it 'returns different objects if the file contents have changed' do object_id = Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: true }).object_id original_file_contents = File.read(open_api_3_schema_path) File.write(open_api_3_schema_path, original_file_contents + "\n") - refute_equal( - Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: true }).object_id, - object_id, - ) + refute_equal(Committee::Drivers.load_from_file(open_api_3_schema_path, parser_options: { strict_reference_validation: true }).object_id, object_id,) File.write(open_api_3_schema_path, original_file_contents) end end @@ -152,15 +143,7 @@ end describe Committee::Drivers::Driver do - DRIVER_METHODS = { - default_allow_get_body: [], - default_coerce_form_params: [], - default_path_params: [], - default_query_params: [], - name: [], - parse: [nil], - schema_class: [], - } + DRIVER_METHODS = { default_allow_get_body: [], default_coerce_form_params: [], default_path_params: [], default_query_params: [], name: [], parse: [nil], schema_class: [], } it "has a set of abstract methods" do driver = Committee::Drivers::Driver.new diff --git a/test/middleware/request_validation_open_api_3_test.rb b/test/middleware/request_validation_open_api_3_test.rb index e5be3066..c3dc61b7 100644 --- a/test/middleware/request_validation_open_api_3_test.rb +++ b/test/middleware/request_validation_open_api_3_test.rb @@ -84,42 +84,14 @@ def app [200, {}, []] } - @app = new_rack_app_with_lambda(check_parameter, - schema: open_api_3_schema, - coerce_date_times: true, - allow_get_body: true) + @app = new_rack_app_with_lambda(check_parameter, schema: open_api_3_schema, coerce_date_times: true, allow_get_body: true) get "/string_params_coercer", { no_problem: true }, { input: params.to_json } assert_equal 200, last_response.status end it "passes given a datetime and with coerce_date_times enabled on POST endpoint" do - params = { - "nested_array" => [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "nested_coercer_object" => { - "update_time" => "2016-04-01T16:00:00.000+09:00", - }, - "nested_no_coercer_object" => { - "update_time" => "2016-04-01T16:00:00.000+09:00", - }, - "nested_coercer_array" => [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - } - ], - "nested_no_coercer_array" => [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - } - ] - }, - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - } - ] - } + params = { "nested_array" => [{ "update_time" => "2016-04-01T16:00:00.000+09:00", "nested_coercer_object" => { "update_time" => "2016-04-01T16:00:00.000+09:00", }, "nested_no_coercer_object" => { "update_time" => "2016-04-01T16:00:00.000+09:00", }, "nested_coercer_array" => [{ "update_time" => "2016-04-01T16:00:00.000+09:00", }], "nested_no_coercer_array" => [{ "update_time" => "2016-04-01T16:00:00.000+09:00", }] }, { "update_time" => "2016-04-01T16:00:00.000+09:00", }] } check_parameter = lambda { |env| nested_array = env['committee.params']["nested_array"] @@ -166,11 +138,7 @@ def app [200, {}, []] } - @app = new_rack_app_with_lambda(check_parameter, - coerce_query_params: true, - coerce_recursive: true, - coerce_date_times: true, - schema: open_api_3_schema) + @app = new_rack_app_with_lambda(check_parameter, coerce_query_params: true, coerce_recursive: true, coerce_date_times: true, schema: open_api_3_schema) get "/string_params_coercer", params @@ -178,51 +146,7 @@ def app end it "passes given a nested datetime and with coerce_recursive=true and coerce_date_times=true on POST endpoint" do - params = { - "nested_array" => [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "per_page" => 1, - "nested_coercer_object" => { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "threshold" => 1.5 - }, - "nested_no_coercer_object" => { - "per_page" => 1, - "threshold" => 1.5 - }, - "nested_coercer_array" => [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "threshold" => 1.5 - } - ], - "nested_no_coercer_array" => [ - { - "per_page" => 1, - "threshold" => 1.5 - } - ], - "integer_array" => [ - 1, 2, 3 - ], - "datetime_array" => [ - "2016-04-01T16:00:00.000+09:00", - "2016-04-01T17:00:00.000+09:00", - "2016-04-01T18:00:00.000+09:00" - ] - }, - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "per_page" => 1, - "threshold" => 1.5 - }, - { - "threshold" => 1.5, - "per_page" => 1 - } - ] - } + params = { "nested_array" => [{ "update_time" => "2016-04-01T16:00:00.000+09:00", "per_page" => 1, "nested_coercer_object" => { "update_time" => "2016-04-01T16:00:00.000+09:00", "threshold" => 1.5 }, "nested_no_coercer_object" => { "per_page" => 1, "threshold" => 1.5 }, "nested_coercer_array" => [{ "update_time" => "2016-04-01T16:00:00.000+09:00", "threshold" => 1.5 }], "nested_no_coercer_array" => [{ "per_page" => 1, "threshold" => 1.5 }], "integer_array" => [1, 2, 3], "datetime_array" => ["2016-04-01T16:00:00.000+09:00", "2016-04-01T17:00:00.000+09:00", "2016-04-01T18:00:00.000+09:00"] }, { "update_time" => "2016-04-01T16:00:00.000+09:00", "per_page" => 1, "threshold" => 1.5 }, { "threshold" => 1.5, "per_page" => 1 }] } check_parameter = lambda { |env| hash = env['committee.params'] diff --git a/test/middleware/request_validation_test.rb b/test/middleware/request_validation_test.rb index 634d8afe..adc07262 100644 --- a/test/middleware/request_validation_test.rb +++ b/test/middleware/request_validation_test.rb @@ -9,49 +9,7 @@ def app @app end - ARRAY_PROPERTY = [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "per_page" => 1, - "nested_coercer_object" => { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "threshold" => 1.5 - }, - "nested_no_coercer_object" => { - "per_page" => 1, - "threshold" => 1.5 - }, - "nested_coercer_array" => [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "threshold" => 1.5 - } - ], - "nested_no_coercer_array" => [ - { - "per_page" => 1, - "threshold" => 1.5 - } - ], - "integer_array" => [ - 1, 2, 3 - ], - "datetime_array" => [ - "2016-04-01T16:00:00.000+09:00", - "2016-04-01T17:00:00.000+09:00", - "2016-04-01T18:00:00.000+09:00" - ] - }, - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "per_page" => 1, - "threshold" => 1.5 - }, - { - "threshold" => 1.5, - "per_page" => 1 - } - ] + ARRAY_PROPERTY = [{ "update_time" => "2016-04-01T16:00:00.000+09:00", "per_page" => 1, "nested_coercer_object" => { "update_time" => "2016-04-01T16:00:00.000+09:00", "threshold" => 1.5 }, "nested_no_coercer_object" => { "per_page" => 1, "threshold" => 1.5 }, "nested_coercer_array" => [{ "update_time" => "2016-04-01T16:00:00.000+09:00", "threshold" => 1.5 }], "nested_no_coercer_array" => [{ "per_page" => 1, "threshold" => 1.5 }], "integer_array" => [1, 2, 3], "datetime_array" => ["2016-04-01T16:00:00.000+09:00", "2016-04-01T17:00:00.000+09:00", "2016-04-01T18:00:00.000+09:00"] }, { "update_time" => "2016-04-01T16:00:00.000+09:00", "per_page" => 1, "threshold" => 1.5 }, { "threshold" => 1.5, "per_page" => 1 }] it "passes through a valid request" do @app = new_rack_app(schema: hyper_schema) @@ -98,11 +56,7 @@ def app it "passes a nested object with recursive option" do key_name = "update_time" - params = { - key_name => "2016-04-01T16:00:00.000+09:00", - "query" => "cloudnasium", - "array_property" => ARRAY_PROPERTY - } + params = { key_name => "2016-04-01T16:00:00.000+09:00", "query" => "cloudnasium", "array_property" => ARRAY_PROPERTY } check_parameter = lambda { |env| hash = env['rack.request.query_hash'] @@ -116,11 +70,7 @@ def app [200, {}, []] } - @app = new_rack_app_with_lambda(check_parameter, - coerce_query_params: true, - coerce_recursive: true, - coerce_date_times: true, - schema: hyper_schema) + @app = new_rack_app_with_lambda(check_parameter, coerce_query_params: true, coerce_recursive: true, coerce_date_times: true, schema: hyper_schema) get "/search/apps", params assert_equal 200, last_response.status @@ -128,11 +78,7 @@ def app it "passes a nested object with coerce_recursive false" do key_name = "update_time" - params = { - key_name => "2016-04-01T16:00:00.000+09:00", - "query" => "cloudnasium", - "array_property" => ARRAY_PROPERTY - } + params = { key_name => "2016-04-01T16:00:00.000+09:00", "query" => "cloudnasium", "array_property" => ARRAY_PROPERTY } @app = new_rack_app(coerce_query_params: true, coerce_date_times: true, coerce_recursive: false, schema: hyper_schema) @@ -142,11 +88,7 @@ def app it "passes a nested object with coerce_recursive default(true)" do key_name = "update_time" - params = { - key_name => "2016-04-01T16:00:00.000+09:00", - "query" => "cloudnasium", - "array_property" => ARRAY_PROPERTY - } + params = { key_name => "2016-04-01T16:00:00.000+09:00", "query" => "cloudnasium", "array_property" => ARRAY_PROPERTY } @app = new_rack_app(coerce_query_params: true, coerce_date_times: true, schema: hyper_schema) @@ -429,13 +371,7 @@ def app end it "not exist path and options" do - options = { - coerce_form_params: true, - coerce_date_times: true, - coerce_query_params: true, - coerce_path_params: true, - coerce_recursive: true - } + options = { coerce_form_params: true, coerce_date_times: true, coerce_query_params: true, coerce_path_params: true, coerce_recursive: true } @app = new_rack_app({ schema: hyper_schema }.merge(options)) header "Content-Type", "application/x-www-form-urlencoded" diff --git a/test/middleware/response_validation_open_api_3_test.rb b/test/middleware/response_validation_open_api_3_test.rb index b230b421..cd45df9f 100644 --- a/test/middleware/response_validation_open_api_3_test.rb +++ b/test/middleware/response_validation_open_api_3_test.rb @@ -187,12 +187,7 @@ def app describe 'validate error option' do it "detects an invalid response status code" do - @app = new_response_rack({ integer: '1' }.to_json, - {}, - app_status: 400, - schema: open_api_3_schema, - raise: true, - validate_success_only: false) + @app = new_response_rack({ integer: '1' }.to_json, {}, app_status: 400, schema: open_api_3_schema, raise: true, validate_success_only: false) e = assert_raises(Committee::InvalidResponse) do get "/characters" @@ -202,12 +197,7 @@ def app end it "detects an invalid response status code with validate_success_only=true" do - @app = new_response_rack({ string_1: :honoka }.to_json, - {}, - app_status: 400, - schema: open_api_3_schema, - raise: true, - validate_success_only: true) + @app = new_response_rack({ string_1: :honoka }.to_json, {}, app_status: 400, schema: open_api_3_schema, raise: true, validate_success_only: true) get "/characters" @@ -269,11 +259,7 @@ def app end it "strict and invalid content type with raise" do - @app = new_response_rack("abc", - {}, - { schema: open_api_3_schema, strict: true, raise: true }, - { content_type: 'application/text' } - ) + @app = new_response_rack("abc", {}, { schema: open_api_3_schema, strict: true, raise: true }, { content_type: 'application/text' }) assert_raises(Committee::InvalidResponse) do get "/characters" diff --git a/test/middleware/response_validation_test.rb b/test/middleware/response_validation_test.rb index aed9cccb..d781f3dc 100644 --- a/test/middleware/response_validation_test.rb +++ b/test/middleware/response_validation_test.rb @@ -199,10 +199,7 @@ def app describe 'streaming response' do describe "text/event-stream; e.g. server-sent events" do it 'validates the response stream as a string' do - options = { - schema: open_api_3_streaming_response_schema, - streaming_content_parsers: { 'text/event-stream' => ->(body) { body } }, - } + options = { schema: open_api_3_streaming_response_schema, streaming_content_parsers: { 'text/event-stream' => ->(body) { body } }, } status = 200 headers = { 'content-type' => 'text/event-stream' } @app = Rack::Builder.new { @@ -221,11 +218,7 @@ def app it "successfully validates the response as a special stream using a customized parser" do error_handler_called = false error_handler = ->(_e, _env) { error_handler_called = true } - options = { - schema: open_api_3_streaming_response_schema, - streaming_content_parsers: { 'application/x-json-stream' => ->(body) { JSON.parse!(body) } }, - error_handler: error_handler, - } + options = { schema: open_api_3_streaming_response_schema, streaming_content_parsers: { 'application/x-json-stream' => ->(body) { JSON.parse!(body) } }, error_handler: error_handler, } status = 200 headers = { 'content-type' => 'application/x-json-stream' } @app = Rack::Builder.new { @@ -243,11 +236,7 @@ def app it "fails to validate the response as a special stream using a customized parser due to a schema mismatch" do error_handler_called = false error_handler = ->(_e, _env) { error_handler_called = true } - options = { - schema: open_api_3_streaming_response_schema, - streaming_content_parsers: { 'application/x-json-stream' => ->(body) { JSON.parse!(body) } }, - error_handler: error_handler, - } + options = { schema: open_api_3_streaming_response_schema, streaming_content_parsers: { 'application/x-json-stream' => ->(body) { JSON.parse!(body) } }, error_handler: error_handler, } status = 200 headers = { 'content-type' => 'application/x-json-stream' } @app = Rack::Builder.new { diff --git a/test/request_unpacker_test.rb b/test/request_unpacker_test.rb index 5e3e1fb9..56128cc1 100644 --- a/test/request_unpacker_test.rb +++ b/test/request_unpacker_test.rb @@ -137,22 +137,14 @@ end it "includes request body when`use_get_body` is true" do - env = { - "rack.input" => StringIO.new('{"x":1, "y":2}'), - "REQUEST_METHOD" => "GET", - "QUERY_STRING" => "data=value&x=aaa", - } + env = { "rack.input" => StringIO.new('{"x":1, "y":2}'), "REQUEST_METHOD" => "GET", "QUERY_STRING" => "data=value&x=aaa", } request = Rack::Request.new(env) unpacker = Committee::RequestUnpacker.new({ allow_query_params: true, allow_get_body: true }) assert_equal([{ 'x' => 1, 'y' => 2 }, false], unpacker.unpack_request_params(request)) end it "doesn't include request body when `use_get_body` is false" do - env = { - "rack.input" => StringIO.new('{"x":1, "y":2}'), - "REQUEST_METHOD" => "GET", - "QUERY_STRING" => "data=value&x=aaa", - } + env = { "rack.input" => StringIO.new('{"x":1, "y":2}'), "REQUEST_METHOD" => "GET", "QUERY_STRING" => "data=value&x=aaa", } request = Rack::Request.new(env) unpacker = Committee::RequestUnpacker.new({ allow_query_params: true, use_get_body: false }) assert_equal({ 'data' => 'value', 'x' => 'aaa' }, unpacker.unpack_query_params(request)) diff --git a/test/schema_validator/hyper_schema/parameter_coercer_test.rb b/test/schema_validator/hyper_schema/parameter_coercer_test.rb index af388e2a..e11531f5 100644 --- a/test/schema_validator/hyper_schema/parameter_coercer_test.rb +++ b/test/schema_validator/hyper_schema/parameter_coercer_test.rb @@ -35,43 +35,7 @@ end it "pass array property" do - params = { - "array_property" => [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "per_page" => 1, - "nested_coercer_object" => { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "threshold" => 1.5 - }, - "nested_no_coercer_object" => { - "per_page" => 1, - "threshold" => 1.5 - }, - "nested_coercer_array" => [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "threshold" => 1.5 - } - ], - "nested_no_coercer_array" => [ - { - "per_page" => 1, - "threshold" => 1.5 - } - ] - }, - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "per_page" => 1, - "threshold" => 1.5 - }, - { - "threshold" => 1.5, - "per_page" => 1 - } - ], - } + params = { "array_property" => [{ "update_time" => "2016-04-01T16:00:00.000+09:00", "per_page" => 1, "nested_coercer_object" => { "update_time" => "2016-04-01T16:00:00.000+09:00", "threshold" => 1.5 }, "nested_no_coercer_object" => { "per_page" => 1, "threshold" => 1.5 }, "nested_coercer_array" => [{ "update_time" => "2016-04-01T16:00:00.000+09:00", "threshold" => 1.5 }], "nested_no_coercer_array" => [{ "per_page" => 1, "threshold" => 1.5 }] }, { "update_time" => "2016-04-01T16:00:00.000+09:00", "per_page" => 1, "threshold" => 1.5 }, { "threshold" => 1.5, "per_page" => 1 }], } call(params, coerce_date_times: true, coerce_recursive: true) first_data = params["array_property"][0] diff --git a/test/schema_validator/hyper_schema/request_validator_test.rb b/test/schema_validator/hyper_schema/request_validator_test.rb index 21a6ddf4..ade863bc 100644 --- a/test/schema_validator/hyper_schema/request_validator_test.rb +++ b/test/schema_validator/hyper_schema/request_validator_test.rb @@ -11,11 +11,7 @@ @schema.expand_references! # POST /apps/:id @link = @schema.properties["app"].links[0] - @request = Rack::Request.new({ - "CONTENT_TYPE" => "application/json", - "rack.input" => StringIO.new("{}"), - "REQUEST_METHOD" => "POST" - }) + @request = Rack::Request.new({ "CONTENT_TYPE" => "application/json", "rack.input" => StringIO.new("{}"), "REQUEST_METHOD" => "POST" }) end it "passes through a valid request with Content-Type options" do @@ -29,22 +25,14 @@ end it "passes through a valid request with Content-Type options" do - @request = - Rack::Request.new({ - "CONTENT_TYPE" => "application/json; charset=utf-8", - "rack.input" => StringIO.new("{}"), - }) + @request = Rack::Request.new({ "CONTENT_TYPE" => "application/json; charset=utf-8", "rack.input" => StringIO.new("{}"), }) data = { "name" => "heroku-api", } call(data) end it "detects an invalid request Content-Type" do e = assert_raises(Committee::InvalidRequest) { - @request = - Rack::Request.new({ - "CONTENT_TYPE" => "application/x-www-form-urlencoded", - "rack.input" => StringIO.new("{}"), - }) + @request = Rack::Request.new({ "CONTENT_TYPE" => "application/x-www-form-urlencoded", "rack.input" => StringIO.new("{}"), }) call({}) } message = %{"Content-Type" request header must be set to "application/json".} @@ -52,11 +40,7 @@ end it "allows skipping content_type check" do - @request = - Rack::Request.new({ - "CONTENT_TYPE" => "application/x-www-form-urlencoded", - "rack.input" => StringIO.new("{}"), - }) + @request = Rack::Request.new({ "CONTENT_TYPE" => "application/x-www-form-urlencoded", "rack.input" => StringIO.new("{}"), }) call({}, {}, check_content_type: false) end @@ -73,11 +57,7 @@ end it "allows an invalid Content-Type with an empty body" do - @request = - Rack::Request.new({ - "CONTENT_TYPE" => "application/x-www-form-urlencoded", - "rack.input" => StringIO.new(""), - }) + @request = Rack::Request.new({ "CONTENT_TYPE" => "application/x-www-form-urlencoded", "rack.input" => StringIO.new(""), }) call({}) end @@ -103,11 +83,7 @@ def call(data, headers = {}, options = {}) before do @schema = open_api_2_schema @link = @schema.routes['GET'][0][1] - @request = Rack::Request.new({ - "CONTENT_TYPE" => "application/json", - "rack.input" => StringIO.new("{}"), - "REQUEST_METHOD" => "POST" - }) + @request = Rack::Request.new({ "CONTENT_TYPE" => "application/json", "rack.input" => StringIO.new("{}"), "REQUEST_METHOD" => "POST" }) end it "passes through a valid request" do diff --git a/test/schema_validator/hyper_schema/string_params_coercer_test.rb b/test/schema_validator/hyper_schema/string_params_coercer_test.rb index ad4313cb..1eda3298 100644 --- a/test/schema_validator/hyper_schema/string_params_coercer_test.rb +++ b/test/schema_validator/hyper_schema/string_params_coercer_test.rb @@ -53,43 +53,7 @@ end it "pass array property" do - params = { - "array_property" => [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "per_page" => "1", - "nested_coercer_object" => { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "threshold" => "1.5" - }, - "nested_no_coercer_object" => { - "per_page" => "1", - "threshold" => "1.5" - }, - "nested_coercer_array" => [ - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "threshold" => "1.5" - } - ], - "nested_no_coercer_array" => [ - { - "per_page" => "1", - "threshold" => "1.5" - } - ] - }, - { - "update_time" => "2016-04-01T16:00:00.000+09:00", - "per_page" => "1", - "threshold" => "1.5" - }, - { - "threshold" => "1.5", - "per_page" => "1" - } - ], - } + params = { "array_property" => [{ "update_time" => "2016-04-01T16:00:00.000+09:00", "per_page" => "1", "nested_coercer_object" => { "update_time" => "2016-04-01T16:00:00.000+09:00", "threshold" => "1.5" }, "nested_no_coercer_object" => { "per_page" => "1", "threshold" => "1.5" }, "nested_coercer_array" => [{ "update_time" => "2016-04-01T16:00:00.000+09:00", "threshold" => "1.5" }], "nested_no_coercer_array" => [{ "per_page" => "1", "threshold" => "1.5" }] }, { "update_time" => "2016-04-01T16:00:00.000+09:00", "per_page" => "1", "threshold" => "1.5" }, { "threshold" => "1.5", "per_page" => "1" }], } call(params, coerce_recursive: true) first_data = params["array_property"][0] diff --git a/test/schema_validator/open_api_3/operation_wrapper_test.rb b/test/schema_validator/open_api_3/operation_wrapper_test.rb index 508a3b1a..90085772 100644 --- a/test/schema_validator/open_api_3/operation_wrapper_test.rb +++ b/test/schema_validator/open_api_3/operation_wrapper_test.rb @@ -18,13 +18,7 @@ def operation_object HEADER = { 'Content-Type' => 'application/json' } - SCHEMA_PROPERTIES_PAIR = [ - ['string', 'str'], - ['integer', 1], - ['boolean', true], - ['boolean', false], - ['number', 0.1], - ] + SCHEMA_PROPERTIES_PAIR = [['string', 'str'], ['integer', 1], ['boolean', true], ['boolean', false], ['number', 0.1],] it 'correct data' do operation_object.validate_request_params({}, {}, SCHEMA_PROPERTIES_PAIR.to_h, HEADER, @validator_option) @@ -32,20 +26,7 @@ def operation_object end it 'correct object data' do - operation_object.validate_request_params( - {}, - {}, - { - "object_1" => - { - "string_1" => nil, - "integer_1" => nil, - "boolean_1" => nil, - "number_1" => nil - } - }, - HEADER, - @validator_option) + operation_object.validate_request_params({}, {}, { "object_1" => { "string_1" => nil, "integer_1" => nil, "boolean_1" => nil, "number_1" => nil } }, HEADER, @validator_option) assert true end @@ -93,21 +74,9 @@ def operation_object end it 'correct' do - operation_object.validate_request_params( - {}, - { "query_string" => "query", "query_integer_list" => [1, 2] }, - {}, - HEADER, - @validator_option - ) - - operation_object.validate_request_params( - {}, - { "query_string" => "query", "query_integer_list" => [1, 2], "optional_integer" => 1 }, - {}, - HEADER, - @validator_option - ) + operation_object.validate_request_params({}, { "query_string" => "query", "query_integer_list" => [1, 2] }, {}, HEADER, @validator_option) + + operation_object.validate_request_params({}, { "query_string" => "query", "query_integer_list" => [1, 2], "optional_integer" => 1 }, {}, HEADER, @validator_option) assert true end @@ -123,13 +92,7 @@ def operation_object it 'invalid type' do e = assert_raises(Committee::InvalidRequest) { - operation_object.validate_request_params( - {}, - { "query_string" => 1, "query_integer_list" => [1, 2], "optional_integer" => 1 }, - {}, - HEADER, - @validator_option - ) + operation_object.validate_request_params({}, { "query_string" => 1, "query_integer_list" => [1, 2], "optional_integer" => 1 }, {}, HEADER, @validator_option) } assert_match(/expected string, but received Integer: 1/i, e.message) diff --git a/test/schema_validator/open_api_3/request_validator_test.rb b/test/schema_validator/open_api_3/request_validator_test.rb index 1cc7276a..dae527cc 100644 --- a/test/schema_validator/open_api_3/request_validator_test.rb +++ b/test/schema_validator/open_api_3/request_validator_test.rb @@ -40,8 +40,7 @@ def app assert_equal 400, last_response.status body = JSON.parse(last_response.body) - message = - %{"Content-Type" request header must be set to any of the following: ["application/json", "application/binary"].} + message = %{"Content-Type" request header must be set to any of the following: ["application/json", "application/binary"].} assert_equal message, body['message'] end diff --git a/test/schema_validator/open_api_3/response_validator_test.rb b/test/schema_validator/open_api_3/response_validator_test.rb index 77ccc91d..1642826b 100644 --- a/test/schema_validator/open_api_3/response_validator_test.rb +++ b/test/schema_validator/open_api_3/response_validator_test.rb @@ -101,10 +101,7 @@ end it "passes given an empty date string with allow_empty_date_and_datetime enabled" do - @validator_option = Committee::SchemaValidator::Option.new( - { allow_empty_date_and_datetime: true }, - open_api_3_schema, - :open_api_3) + @validator_option = Committee::SchemaValidator::Option.new({ allow_empty_date_and_datetime: true }, open_api_3_schema, :open_api_3) @path = '/date_time' @method = 'get' @@ -123,10 +120,7 @@ end it "passes given an empty date-time string with allow_empty_date_and_datetime enabled" do - @validator_option = Committee::SchemaValidator::Option.new( - { allow_empty_date_and_datetime: true }, - open_api_3_schema, - :open_api_3) + @validator_option = Committee::SchemaValidator::Option.new({ allow_empty_date_and_datetime: true }, open_api_3_schema, :open_api_3) @path = '/date_time' @method = 'get' @@ -149,8 +143,6 @@ def call_response_validator(strict = false) @operation_object = open_api_3_schema.operation_object(@path, @method) - Committee::SchemaValidator::OpenAPI3::ResponseValidator. - new(@operation_object, @validator_option). - call(@status, @headers, @data, strict) + Committee::SchemaValidator::OpenAPI3::ResponseValidator.new(@operation_object, @validator_option).call(@status, @headers, @data, strict) end end diff --git a/test/test/methods_test.rb b/test/test/methods_test.rb index d5ff4f07..9155662d 100644 --- a/test/test/methods_test.rb +++ b/test/test/methods_test.rb @@ -227,122 +227,20 @@ def response_data it 'records openapi coverage' do get "/posts" assert_response_schema_confirm(200) - assert_equal({ - '/threads/{id}' => { - 'get' => { - 'responses' => { - '200' => false, - }, - }, - }, - '/posts' => { - 'get' => { - 'responses' => { - '200' => true, - '404' => false, - 'default' => false, - }, - }, - 'post' => { - 'responses' => { - '200' => false, - }, - }, - }, - '/likes' => { - 'post' => { - 'responses' => { - '200' => false, - }, - }, - 'delete' => { - 'responses' => { - '200' => false, - }, - }, - }, - }, @schema_coverage.report) + assert_equal({ '/threads/{id}' => { 'get' => { 'responses' => { '200' => false, }, }, }, '/posts' => { 'get' => { 'responses' => { '200' => true, '404' => false, 'default' => false, }, }, 'post' => { 'responses' => { '200' => false, }, }, }, '/likes' => { 'post' => { 'responses' => { '200' => false, }, }, 'delete' => { 'responses' => { '200' => false, }, }, }, }, @schema_coverage.report) end it 'can record openapi coverage correctly when prefix is set' do @committee_options.merge!(prefix: '/api') post "/api/likes" assert_response_schema_confirm(200) - assert_equal({ - '/threads/{id}' => { - 'get' => { - 'responses' => { - '200' => false, - }, - }, - }, - '/posts' => { - 'get' => { - 'responses' => { - '200' => false, - '404' => false, - 'default' => false, - }, - }, - 'post' => { - 'responses' => { - '200' => false, - }, - }, - }, - '/likes' => { - 'post' => { - 'responses' => { - '200' => true, - }, - }, - 'delete' => { - 'responses' => { - '200' => false, - }, - }, - }, - }, @schema_coverage.report) + assert_equal({ '/threads/{id}' => { 'get' => { 'responses' => { '200' => false, }, }, }, '/posts' => { 'get' => { 'responses' => { '200' => false, '404' => false, 'default' => false, }, }, 'post' => { 'responses' => { '200' => false, }, }, }, '/likes' => { 'post' => { 'responses' => { '200' => true, }, }, 'delete' => { 'responses' => { '200' => false, }, }, }, }, @schema_coverage.report) end it 'records openapi coverage correctly with path param' do get "/threads/asd" assert_response_schema_confirm(200) - assert_equal({ - '/threads/{id}' => { - 'get' => { - 'responses' => { - '200' => true, - }, - }, - }, - '/posts' => { - 'get' => { - 'responses' => { - '200' => false, - '404' => false, - 'default' => false, - }, - }, - 'post' => { - 'responses' => { - '200' => false, - }, - }, - }, - '/likes' => { - 'post' => { - 'responses' => { - '200' => false, - }, - }, - 'delete' => { - 'responses' => { - '200' => false, - }, - }, - }, - }, @schema_coverage.report) + assert_equal({ '/threads/{id}' => { 'get' => { 'responses' => { '200' => true, }, }, }, '/posts' => { 'get' => { 'responses' => { '200' => false, '404' => false, 'default' => false, }, }, 'post' => { 'responses' => { '200' => false, }, }, }, '/likes' => { 'post' => { 'responses' => { '200' => false, }, }, 'delete' => { 'responses' => { '200' => false, }, }, }, }, @schema_coverage.report) end end end diff --git a/test/test/schema_coverage_test.rb b/test/test/schema_coverage_test.rb index 69ca63be..6218b604 100644 --- a/test/test/schema_coverage_test.rb +++ b/test/test/schema_coverage_test.rb @@ -22,182 +22,35 @@ def covered_responses it 'can record and report coverage properly' do @schema_coverage.update_response_coverage!('/posts', 'get', '200') assert_equal(['/posts get 200',], covered_responses) - assert_equal([ - '/threads/{id} get 200', - '/posts get 404', - '/posts get default', - '/posts post 200', - '/likes post 200', - '/likes delete 200', - ], uncovered_responses) + assert_equal(['/threads/{id} get 200', '/posts get 404', '/posts get default', '/posts post 200', '/likes post 200', '/likes delete 200',], uncovered_responses) @schema_coverage.update_response_coverage!('/likes', 'post', '200') assert_equal(['/posts get 200', '/likes post 200',], covered_responses) - assert_equal([ - '/threads/{id} get 200', - '/posts get 404', - '/posts get default', - '/posts post 200', - '/likes delete 200', - ], uncovered_responses) + assert_equal(['/threads/{id} get 200', '/posts get 404', '/posts get default', '/posts post 200', '/likes delete 200',], uncovered_responses) @schema_coverage.update_response_coverage!('/likes', 'delete', '200') assert_equal(['/posts get 200', '/likes post 200', '/likes delete 200',], covered_responses) - assert_equal([ - '/threads/{id} get 200', - '/posts get 404', - '/posts get default', - '/posts post 200', - ], uncovered_responses) + assert_equal(['/threads/{id} get 200', '/posts get 404', '/posts get default', '/posts post 200',], uncovered_responses) @schema_coverage.update_response_coverage!('/posts', 'get', '422') - assert_equal([ - '/posts get 200', - '/posts get default', - '/likes post 200', - '/likes delete 200', - ], covered_responses) + assert_equal(['/posts get 200', '/posts get default', '/likes post 200', '/likes delete 200',], covered_responses) assert_equal(['/threads/{id} get 200', '/posts get 404', '/posts post 200',], uncovered_responses) - assert_equal({ - '/threads/{id}' => { - 'get' => { - 'responses' => { - '200' => false, - }, - }, - }, - '/posts' => { - 'get' => { - 'responses' => { - '200' => true, - '404' => false, - 'default' => true, - }, - }, - 'post' => { - 'responses' => { - '200' => false, - }, - }, - }, - '/likes' => { - 'post' => { - 'responses' => { - '200' => true, - }, - }, - 'delete' => { - 'responses' => { - '200' => true, - }, - }, - }, - }, @schema_coverage.report) + assert_equal({ '/threads/{id}' => { 'get' => { 'responses' => { '200' => false, }, }, }, '/posts' => { 'get' => { 'responses' => { '200' => true, '404' => false, 'default' => true, }, }, 'post' => { 'responses' => { '200' => false, }, }, }, '/likes' => { 'post' => { 'responses' => { '200' => true, }, }, 'delete' => { 'responses' => { '200' => true, }, }, }, }, @schema_coverage.report) @schema_coverage.update_response_coverage!('/posts', 'post', '200') @schema_coverage.update_response_coverage!('/posts', 'get', '404') @schema_coverage.update_response_coverage!('/threads/{id}', 'get', '200') - assert_equal([ - '/threads/{id} get 200', - '/posts get 200', - '/posts get 404', - '/posts get default', - '/posts post 200', - '/likes post 200', - '/likes delete 200', - ], covered_responses) + assert_equal(['/threads/{id} get 200', '/posts get 200', '/posts get 404', '/posts get default', '/posts post 200', '/likes post 200', '/likes delete 200',], covered_responses) assert_equal([], uncovered_responses) end end describe '.merge_report' do it 'can merge 2 coverage reports together' do - report = Committee::Test::SchemaCoverage.merge_report( - { - '/posts' => { - 'get' => { - 'responses' => { - '200' => true, - '404' => false, - }, - }, - 'post' => { - 'responses' => { - '200' => false, - }, - }, - }, - '/likes' => { - 'post' => { - 'responses' => { - '200' => true, - }, - }, - }, - }, - { - '/posts' => { - 'get' => { - 'responses' => { - '200' => true, - '404' => true, - }, - }, - 'post' => { - 'responses' => { - '200' => false, - }, - }, - }, - '/likes' => { - 'post' => { - 'responses' => { - '200' => false, - '400' => false, - }, - }, - }, - '/users' => { - 'get' => { - 'responses' => { - '200' => true, - }, - }, - }, - }, - ) + report = Committee::Test::SchemaCoverage.merge_report({ '/posts' => { 'get' => { 'responses' => { '200' => true, '404' => false, }, }, 'post' => { 'responses' => { '200' => false, }, }, }, '/likes' => { 'post' => { 'responses' => { '200' => true, }, }, }, }, { '/posts' => { 'get' => { 'responses' => { '200' => true, '404' => true, }, }, 'post' => { 'responses' => { '200' => false, }, }, }, '/likes' => { 'post' => { 'responses' => { '200' => false, '400' => false, }, }, }, '/users' => { 'get' => { 'responses' => { '200' => true, }, }, }, },) - assert_equal({ - '/posts' => { - 'get' => { - 'responses' => { - '200' => true, - '404' => true, - }, - }, - 'post' => { - 'responses' => { - '200' => false, - }, - }, - }, - '/likes' => { - 'post' => { - 'responses' => { - '200' => true, - '400' => false, - }, - }, - }, - '/users' => { - 'get' => { - 'responses' => { - '200' => true, - }, - }, - }, - }, report) + assert_equal({ '/posts' => { 'get' => { 'responses' => { '200' => true, '404' => true, }, }, 'post' => { 'responses' => { '200' => false, }, }, }, '/likes' => { 'post' => { 'responses' => { '200' => true, '400' => false, }, }, }, '/users' => { 'get' => { 'responses' => { '200' => true, }, }, }, }, report) end end end