Заглушка аутентификации WebMock :: NetConnectNotAllowedError с Webmock - PullRequest
0 голосов
/ 07 февраля 2019

Я сейчас работаю в чистом Ruby-приложении, я использую Ruby 2.5.3.У меня есть следующие зависимости.

     group :test do                                                  |     pdf_producer.rb
--       gem 'rspec', '~> 3.5.0'                                     | util.rb
         gem 'simplecov', '~> 0.16.1'                                   Gemfile
         gem 'simplecov-console', '~> 0.4.1'                            Gemfile.lock
- -      gem 'pry', '~> 0.12.2'                                         README.md
         gem 'webmock', '~> 2.1'                                     
     end

Я также использую Boxr драгоценный камень для взаимодействия с Box Api.Я создал прокси-библиотеку, которая использует этот драгоценный камень.В настоящее время я пытаюсь написать тест для метода, чтобы получить папку Box из Box.Я получаю следующую ошибку:

WebMock::NetConnectNotAllowedError:
       Real HTTP connections are disabled. Unregistered request: POST https://api.box.com/oauth2/token with body 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&client_id=XXXXclient_secret=XXXXXXX&assertion=XXX' with headers {'Accept'=>'*/*', 'Content-Type'=>'application/x-www-form-urlencoded', 'Date'=>'Thu, 07 Feb 2019 17:46:43 GMT', 'User-Agent'=>'HTTPClient/1.0 (2.8.3, ruby 2.5.3 (2018-10-18))'}

       You can stub this request with the following snippet:

       stub_request(:post, "https://api.box.com/oauth2/token").
         with(:body => {"assertion"=>"XXXXXX", "client_id"=>"XXXXXXXX", "client_secret"=>"XXXXXXXXXX", "grant_type"=>"urn:ietf:params:oauth:grant-type:jwt-bearer"},
              :headers => {'Accept'=>'*/*', 'Content-Type'=>'application/x-www-form-urlencoded', 'Date'=>'Thu, 07 Feb 2019 17:46:43 GMT', 'User-Agent'=>'HTTPClient/1.0 (2.8.3, ruby 2.5.3 (2018-10-18))'}).
         to_return(:status => 200, :body => "", :headers => {})

Вот следующий тест, который я пытаюсь написать.

 describe '#folder' do
    context 'success' do
      it 'Retrieves a folder from Box' do
        id = double('123')
        folder_resp = double(type: 'folder', id: '123')
        box_api = BoxApi.new

        allow(box_api).to receive(:folder).with(id).and_return(folder_resp)

        expect(box_api.folder(id)).to eq(folder_resp)
      end
    end

    context 'fail' do
      it 'Raise error for folder not found' do
        stub_request(:get, "http://api.box.com/folders/123").to_return(body: {id: "123"} )
        box_api = BoxApi.new
        id = double('456')

        # allow(box_api).to receive(:folder).with(id).and_return(fail_message)

        expect(box_api.folder(id)).to eq("123")
      end
    end
  end
end

Для следующего метода в прокси-классе.

class BoxApi
  attr_reader :user_id, :private_key, :private_key_password, :public_key_id,
              :client_id, :client_secret, :box_folder_id, :box_domain

  def initialize
    @user_id              = ENV.fetch('BOX_USER_ID')
    @private_key          = ENV.fetch('JWT_PRIVATE_KEY')
    @private_key_password = ENV.fetch('JWT_PRIVATE_KEY_PASSWORD')
    @public_key_id        = ENV.fetch('JWT_PUBLIC_KEY_ID')
    @client_id            = ENV.fetch('BOX_CLIENT_ID')
    @client_secret        = ENV.fetch('BOX_CLIENT_SECRET')
  end

  def client
    @client ||= Boxr::Client.new(token.access_token)
  end

  def token
    Boxr.get_user_token(@user_id,
                        private_key: @private_key,
                        private_key_password: @private_key_password,
                        public_key_id: @public_key_id,
                        client_id: @client_id,
                        client_secret: @client_secret)
  end

  def prepare_folder(folder_id)
    client.folder_from_id(folder_id)
  end

  def folder(box_folder_id)
    prepare_folder(box_folder_id)
  end

Приведенный выше класс использует камень Boxr.Я пытаюсь сделать запрос, чтобы получить папку по ее идентификатору.Однако, я получаю описанный выше метод о запросе на публикацию.

в spec_helper.rb Я также настроил Boxr

RSpec.configure do |config|


  # Configuration for Boxr mocking libraries for testin
  config.before(:suite) do
    Boxr::BOX_CLIENT = HTTPClient.new
  end

  config.before(:each) do
    stub_request(:post, "https://api.box.com/oauth2/token").
         with(:body => {"assertion"=>"XXXXXXXX", "grant_type"=>"urn:ietf:params:oauth:grant-type:jwt-bearer"},
              :headers => {'Accept'=>'*/*', 'Content-Type'=>'application/x-www-form-urlencoded', 'Date'=>'Thu, 07 Feb 2019 16:31:30 GMT', 'User-Agent'=>'HTTPClient/1.0 (2.8.3, ruby 2.5.3 (2018-10-18))'}).
         to_return(:status => 200, :body => "", :headers => {})
  end

Является ли реальный хеш в "assertion"=>"XXXXXXXX" реальным?Могу ли я добавить это в github или мне нужно это скрыть?Как я могу решить ошибку аутентификации?это где проблема возникает?

...