Rswag: заголовок авторизации появился в параметре запроса - PullRequest
0 голосов
/ 29 сентября 2019

Версия: rswag (2.0.5), rspec (3.8.0)

Среда: Rails 5.2.3, Ruby 2.4.5

Я впервые использую его,застрял в заголовке авторизации на день.Вот что я сделал:

# in spec/swagger_helper.rb
  config.swagger_docs = {
    'api/v1/swagger.json' => {
      swagger: '2.0',
      info: {
        title: 'API V1',
        version: 'v1'
      },
      paths: {},
      securityDefinitions: {
        JWT: {
          description: 'the jwt for API auth',
          type: :apiKey,
          name: 'Authorization',
          in: :header
        }
      }
    }
  }
# in spec/integration/api/v1/nodes_spec.rb
  path '/api/v1/nodes' do
    get 'Get all servers' do
      tags TAGS_NODE
      produces  'application/json'
      security [JWT: {}]

      parameter name: :searchString, in: :query, type: :string
      parameter name: :searchColumn, in: :query, type: :string
      #parameter name: 'Authorization', :in => :header, :type => :string
      let(:nodes) { create_list(:node_list, 32) }

      response '200', 'Servers found' do
        let(:'Authorization') { "Bearer #{gen_jwt}" }
        let(:searchString) { 'test' }
        let(:searchColumn) { ';Name;' }
        run_test! do |repsonse|
          data = JSON.parse(response.body)
          puts data
        end
      end
    end
  end

Ожидаемый: в заголовке «Авторизация» установлен «Носитель ....». Факт: В журнале испытаний я нашел:

[INFO] [2019-09-29 01:11:13 UTC] [анонимно] [нет сеанса] [нет запроса] [другое другое] Запущено GET "/ api / v1 / node? SearchString = test & searchColumn =; Имя; ¶мс & заголовки [HTTP_AUTHORIZATION] = Канал + eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1Njk3NjI2NzMsImVtYWlsIjoidGVzdEBpYm0uY29tIiwib3JnYW5pemF0aW9ucyI6WyJ0ZXN0X29yZzEiLCJvcmcyIl0sInJvbGVzIjpbImNjX2NvbnNvbGVfYWRtaW4iLCJyb2xlMiJdLCJpbnZlbnRvcnkiOlsidGVzdF9pbnYiXX0.eenTMWUy6kSHO58_kLKoKWmNjvQ9i5TU9ex4Ou-AUSE & заголовки [HTTP_ACCEPT] = Приложение% 2Fjson»для 127.0.0.1 в 2019-09-29 01:11:13 +0000 [INFO] [2019-09-29 01:11:13 UTC] [анонимно] [нет сеанса] [нет запроса] [другое другое] Обработка Api :: V1 :: NodesController # index как HTML ...... [DEBUG] [2019-09-29 01:11:13 UTC] [анонимно] [нет сеанса] [нет запроса] [другое другое] Аутентификация по токену JWT .... [ОШИБКА] [2019-09-29 01:11:13 UTC] [анонимно] [нет сеанса] [нет запроса] [другое другое] В запрос не включен токен JWT

Как отмечено в журнале жирным шрифтом, заголовки «Авторизация» и «Принять» отображаются в параметрах запроса, которые должны быть заголовками http, так чтотокен JWT не может быть получен из заголовка в коде.

Я также пытался не использовать securityDefinition, но указывал параметр в заголовке следующим образом: имя параметра: 'Authorization',: in =>: header,: type=>: строка.Это тоже не сработало.

Не уверен, что какую-то конфигурацию я пропустил или что-то не так сделал?Спасибо!

Обновление : похоже, это связано с конфликтом других драгоценных камней?У меня была еще одна попытка создать новое приложение Rails 5 api only, добавить только rspec и rswag gems и запустить с простым тестовым примером, это сработало!Вот мой Gemfile:

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.4.5'

gem 'rails', '5.2.3'
gem 'puma', '3.11'
gem 'bootsnap', '1.1.0', require: false

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  gem 'listen', '>= 3.0.5', '< 3.2'
end

group :test do
  # Test framework
  gem "rspec-rails"
  gem "database_cleaner", '1.6.0'
  gem "simplecov"
  gem "simplecov-rcov"
  gem "factory_bot_rails", '5.1.0'
  gem "ci_reporter_rspec"
  gem "faker"
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

gem 'pg', '1.1.4'
gem 'delayed_job_active_record', '4.1.3'
gem 'delayed_job_worker_pool', '0.2.3'

gem 'dalli', '2.7.8'
gem 'ruby-kafka', '0.7.5'

gem 'active_model_serializers', '0.10.10'
gem 'will_paginate', '3.1.7'
gem 'rest-client', '1.8.0'
gem 'symmetric-encryption', '4.3.0', require: false
gem 'unicorn', '5.2.0'
gem 'rubyzip', '1.2.2'
gem 'jwt', '2.2.1'
gem 'rubyXL', '3.3.30'
gem 'apartment', '2.2.1'
gem 'rswag', '2.0.5'

[Resolved] Кажется, не работает с Rack :: Test :: Methods

Это сработало после удаления строки 'include Rack:: Test :: Methods "во вспомогательном файле, который был добавлен ранее для использования get для тестирования API.

1 Ответ

0 голосов
/ 29 сентября 2019

Кажется, не работает с Rack :: Test :: Methods

Это сработало после удаления строки 'include Rack :: Test :: Methods' в файле помощника, который был добавлен ранее для использования 'get'протестировать API.

...