Rspec: Получение Omniauth / oauth0, работающего с запросом Фарадея - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь протестировать запрос graphql с помощью Фарадея, но сначала мне нужно пройти аутентификацию с помощью omniauth / auth0.

Я получил его для аутентификации, установив

   def sign_in(user, invalid=false, strategy = :auth0)
      invalid ?  mock_invalid_auth_hash : mock_valid_auth_hash(user)
      Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[strategy.to_sym]
      visit "/auth/#{strategy.to_s}/callback"
   end

Но когда graphqlПосле тестирования он полностью теряет этот cookie, так как это совершенно новый запрос:

require 'graphlient'

RSpec.shared_context "GraphQL Client", shared_context: :metadata do
  let(:client) do
    Graphlient::Client.new('https://www.example.org/graphql') do |client|
      client.http do |h|
        h.connection do |c|
          c.use Faraday::Adapter::Rack, app
        end
      end
    end
  end
end

Как настроить аутентификацию среды через Faraday перед ее подключением к GraphQL?Или есть лучший способ проверить GraphQL?

1 Ответ

0 голосов
/ 23 мая 2018

Я понял это, не используя graphlient и faraday (хотя я не пробовал это однажды, я понял, что было не так, так что это может все еще работать, но вот альтернатива).

Изменено sign_in метод получения запроса вместо посещения:

spec / support / features / session_helpers.rb

def sign_in(user, invalid=false, strategy = :auth0)
  invalid ?  mock_invalid_auth_hash : mock_valid_auth_hash(user)
  get "/auth/#{strategy.to_s}"
  Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[strategy.to_sym]
  get "/auth/#{strategy.to_s}/callback"
end

И в моем тесте rspec-запроса мне это понравилось (я включуцелый тестовый пример на случай, если он кому-нибудь поможет):

spec / support / graphql / client.rb

RSpec.shared_context "GraphQL Client", shared_context: :metadata do
  let(:user) { create(:user) }

  let(:post_query_as_user) do
    sign_in(user)
    params = { query: query }
    post "/graphql", params: params
  end

  def data
    JSON.parse(response.body)["data"]
  end
end

spec / graphql / questions / current_user_queries_spec.rb

require 'rails_helper'

RSpec.describe 'GraphQL::Queries::CurrentUser', type: 'request' do
  include_context 'GraphQL Client'
  let(:query) do
    <<-GRAPHQL
      {
        current_user {
          id
          first_name
        }
      }
    GRAPHQL
  end

  it 'returns the current user with all user attributes' do
    post_query_as_user
    current_user = data["current_user"]
    expect(current_user["first_name"]).to eq(user.first_name)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...