Webmock: Boxr :: BoxrError: 200: Загруженный файл получает правильное возвращаемое значение как ошибку - PullRequest
0 голосов
/ 19 февраля 2019

В настоящее время я работаю над приложением Ruby, используя Boxr gem.Драгоценный камень используется для взаимодействия с Box API.Я создал класс Proxy для вызовов API Box с использованием гема Boxr.

Я тестирую загрузку файла в Box.Я создал метод upload_file_to_box, который помещает файл в папку на Box.Метод написан следующим образом:

  def upload_file_to_box(file_path, file, box_folder_id)
    client.upload_file(file_path, self.folder(box_folder_id))
  rescue Boxr::BoxrError
    file = find_file_by_name(file).shift
    client.upload_new_version_of_file(file_path, file)
  end

Заглушка, которую я создал с помощью Webmock

stub_request(:post, "https://upload.box.com/api/2.0/files/content").
          to_return(:status => 200, :body => {message: "File Uploaded"}.to_json, :headers => {})

Однако, когда я запускаю тест, я получаю сообщение об ошибке и статус:

    37: def upload_file_to_box(file_path, file, box_folder_id)
    38:   client.upload_file(file_path, self.folder(box_folder_id))
    39: rescue Boxr::BoxrError
 => 40:   binding.pry
    41:   file = find_file_by_name(file).shift
    42:   client.upload_new_version_of_file(file_path, file)
    43: end

[1] pry(#<BoxApi>)> client.upload_file(file_path, self.folder(box_folder_id))
Boxr::BoxrError: 200: File Uploaded
from /Users/stevenaguilar/.rvm/gems/ruby-2.5.3/gems/boxr-1.4.0/lib/boxr/client.rb:239:in `check_response_status'
Caused by Boxr::BoxrError: 200: File Uploaded
from /Users/stevenaguilar/.rvm/gems/ruby-2.5.3/gems/boxr-1.4.0/lib/boxr/client.rb:239:in `check_response_status'
[2] pry(#<BoxApi>)>

Запуск client.upload_file(file_path, self.folder(box_folder_id)) возвращает правильный статус и тело.Однако тест не проходит и отображается как ошибка: enter image description here

Не следует ли result быть установлен равным {message: "File Uploaded"}?

Здесьэто полный тест.

describe '#upload_file_to_box' do
    context 'success' do
      it 'Uploads file to folder on Box' do
        stub_request(:options, "https://api.box.com/2.0/files/content").
          with(:body => {"{\"name\":\"pdf_without_data.pdf\",\"parent\":{\"id\":\"123\"},\"size\":64197}"=>nil}).
            to_return(:status => 200, :body => {message: 'PDF content added'}.to_json, :headers => {})

        stub_request(:get, "https://api.box.com/2.0/folders/123").
            to_return(:status => 200, :body => {id: "123"}.to_json, :headers => {})

        stub_request(:post, "https://upload.box.com/api/2.0/files/content").
          to_return(:status => 200, :body => {message: "File Uploaded"}.to_json, :headers => {})

        stub_request(:get, "https://api.box.com/2.0/search?limit=30&offset=0&query=pdf_without_data.pdf").
           to_return(:status => 200, :body => {id: '123', type: 'file'}.to_json, :headers => {})



        allow_any_instance_of(BoxApi).to receive(:client)
        .and_return(Boxr::Client.new(refresh_token: nil, jwt_private_key: nil))

        box_api = BoxApi.new
        file_path = 'spec/fixtures/pdfs/pdf_without_data.pdf'
        file_name = 'pdf_without_data.pdf'
        folder_id = '123'

        result    = box_api.upload_file_to_box(file_path, file_name, folder_id)
        binding.pry
        expect { result['message'] }.to eq("success")
      end
    end
  end
...