From 2949dfec01f6dfaa28854c2ce8d98c18d560ae99 Mon Sep 17 00:00:00 2001 From: AS-AlStar Date: Fri, 13 Aug 2021 23:21:52 +0300 Subject: [PATCH 1/3] check authorize header --- README.md | 3 +++ lib/rspec/openapi.rb | 3 ++- lib/rspec/openapi/record.rb | 1 + lib/rspec/openapi/record_builder.rb | 7 +++++++ lib/rspec/openapi/schema_builder.rb | 10 ++++++++++ 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 811ef203..5a71e730 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,9 @@ RSpec::OpenAPI.enable_example = false # Change `info.version` RSpec::OpenAPI.application_version = '1.0.0' +# Set `headers` - generate parameters with headers for request +RSpec::OpenAPI.headers = %w[X-Authorization-Token] + # Generate a comment on top of a schema file RSpec::OpenAPI.comment = <<~EOS This file is auto-generated by rspec-openapi https://github.com/k0kubun/rspec-openapi diff --git a/lib/rspec/openapi.rb b/lib/rspec/openapi.rb index 66b40078..553ee0c3 100644 --- a/lib/rspec/openapi.rb +++ b/lib/rspec/openapi.rb @@ -7,8 +7,9 @@ module RSpec::OpenAPI @enable_example = true @description_builder = -> (example) { example.description } @application_version = '1.0.0' + @headers = [] class << self - attr_accessor :path, :comment, :enable_example, :description_builder, :application_version + attr_accessor :path, :comment, :enable_example, :description_builder, :application_version, :headers end end diff --git a/lib/rspec/openapi/record.rb b/lib/rspec/openapi/record.rb index a7d19578..f04743b7 100644 --- a/lib/rspec/openapi/record.rb +++ b/lib/rspec/openapi/record.rb @@ -5,6 +5,7 @@ :query_params, # @param [Hash] - {:query=>"string"} :request_params, # @param [Hash] - {:request=>"body"} :request_content_type, # @param [String] - "application/json" + :request_headers, # @param [Array] - [["header_key1", "header_value1"], ["header_key2", "header_value2"]] :summary, # @param [String] - "v1/statuses #show" :tags, # @param [Array] - ["Status"] :description, # @param [String] - "returns a status" diff --git a/lib/rspec/openapi/record_builder.rb b/lib/rspec/openapi/record_builder.rb index c882d3af..90809e57 100644 --- a/lib/rspec/openapi/record_builder.rb +++ b/lib/rspec/openapi/record_builder.rb @@ -34,6 +34,12 @@ def build(context, example:) nil end + request_headers = RSpec::OpenAPI.headers.each_with_object([]) do |header, headers_arr| + header_key = header.gsub(/-/, '_').upcase + header_value = request.get_header(['HTTP', header_key].join('_')) || request.get_header(header_key) + headers_arr << [header, header_value] if header_value + end + RSpec::OpenAPI::Record.new( method: request.request_method, path: path, @@ -41,6 +47,7 @@ def build(context, example:) query_params: request.query_parameters, request_params: raw_request_params(request), request_content_type: request.media_type, + request_headers: request_headers, summary: summary, tags: tags, description: RSpec::OpenAPI.description_builder.call(example), diff --git a/lib/rspec/openapi/schema_builder.rb b/lib/rspec/openapi/schema_builder.rb index 1c655d1d..9b877ec7 100644 --- a/lib/rspec/openapi/schema_builder.rb +++ b/lib/rspec/openapi/schema_builder.rb @@ -67,6 +67,16 @@ def build_parameters(record) }.compact end + record.request_headers.each do |key, value| + parameters << { + name: build_parameter_name(key, value), + in: 'header', + required: true, + schema: build_property(try_cast(value)), + example: (try_cast(value) if example_enabled?), + }.compact + end + return nil if parameters.empty? parameters end From 2b990fa64c6be7a9c87c0b509e70040b207c4710 Mon Sep 17 00:00:00 2001 From: AS-AlStar Date: Thu, 19 Aug 2021 11:40:43 +0300 Subject: [PATCH 2/3] Fix schema and description --- README.md | 5 +++++ lib/rspec/openapi.rb | 3 ++- lib/rspec/openapi/default_schema.rb | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a71e730..41f892be 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,11 @@ RSpec::OpenAPI.application_version = '1.0.0' # Set `headers` - generate parameters with headers for request RSpec::OpenAPI.headers = %w[X-Authorization-Token] +# Set `server_urls` - generate servers of a schema file +RSpec::OpenAPI.server_urls = %w[ + http://localhost:3000 +] + # Generate a comment on top of a schema file RSpec::OpenAPI.comment = <<~EOS This file is auto-generated by rspec-openapi https://github.com/k0kubun/rspec-openapi diff --git a/lib/rspec/openapi.rb b/lib/rspec/openapi.rb index 553ee0c3..41afbcd7 100644 --- a/lib/rspec/openapi.rb +++ b/lib/rspec/openapi.rb @@ -8,8 +8,9 @@ module RSpec::OpenAPI @description_builder = -> (example) { example.description } @application_version = '1.0.0' @headers = [] + @server_urls = [] class << self - attr_accessor :path, :comment, :enable_example, :description_builder, :application_version, :headers + attr_accessor :path, :comment, :enable_example, :description_builder, :application_version, :headers, :server_urls end end diff --git a/lib/rspec/openapi/default_schema.rb b/lib/rspec/openapi/default_schema.rb index accfaa2a..40262d89 100644 --- a/lib/rspec/openapi/default_schema.rb +++ b/lib/rspec/openapi/default_schema.rb @@ -6,6 +6,7 @@ def build(title) title: title, version: RSpec::OpenAPI.application_version, }, + servers: RSpec::OpenAPI.server_urls.map { |url| { url: url } } || [], paths: {}, }.freeze end From b2dcd8f6061259f2bfe5bfa6c789a1e1ebd9284d Mon Sep 17 00:00:00 2001 From: AS-AlStar Date: Mon, 23 Aug 2021 10:23:42 +0300 Subject: [PATCH 3/3] Fixed specs --- spec/rails/doc/openapi.yaml | 7 +++++++ spec/requests/rails_spec.rb | 4 +++- spec/roda/doc/openapi.yaml | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/spec/rails/doc/openapi.yaml b/spec/rails/doc/openapi.yaml index 6f064264..9d2f3612 100644 --- a/spec/rails/doc/openapi.yaml +++ b/spec/rails/doc/openapi.yaml @@ -7,6 +7,7 @@ openapi: 3.0.3 info: title: rspec-openapi version: 1.0.0 +servers: [] paths: "/tables": get: @@ -42,6 +43,12 @@ paths: type: string example: price: '0' + - name: X-Authorization-Token + in: header + required: true + schema: + type: string + example: token responses: '200': description: returns a list of tables diff --git a/spec/requests/rails_spec.rb b/spec/requests/rails_spec.rb index 80620024..e31e9fe6 100644 --- a/spec/requests/rails_spec.rb +++ b/spec/requests/rails_spec.rb @@ -3,6 +3,7 @@ require File.expand_path('../rails/config/environment', __dir__) require 'rspec/rails' +RSpec::OpenAPI.headers = %w[X-Authorization-Token] RSpec::OpenAPI.path = File.expand_path('../rails/doc/openapi.yaml', __dir__) RSpec::OpenAPI.comment = <<~EOS This file is auto-generated by rspec-openapi https://github.com/k0kubun/rspec-openapi @@ -15,7 +16,8 @@ describe '#index' do context it 'returns a list of tables' do it 'with flat query parameters' do - get '/tables', params: { page: '1', per: '10' }, headers: { authorization: 'k0kubun' } + get '/tables', params: { page: '1', per: '10' }, + headers: { authorization: 'k0kubun', "X-Authorization-Token": 'token' } expect(response.status).to eq(200) end diff --git a/spec/roda/doc/openapi.yaml b/spec/roda/doc/openapi.yaml index e4783380..c54d7864 100644 --- a/spec/roda/doc/openapi.yaml +++ b/spec/roda/doc/openapi.yaml @@ -3,6 +3,7 @@ openapi: 3.0.3 info: title: rspec-openapi version: 1.0.0 +servers: [] paths: "/roda": post: