Как подделать аутентификацию пользователя на Rails с проверкой договора Pact?
На этапе проверки Pact мне нужно проверять подлинность пользователя. Каков наилучший способ сделать это? Я использую Rails 4 с Devise.
Я нашел очень хакерское решение, которое работает, но выглядит ужасно, и я надеюсь, что есть другой способ сделать это. Я заменяю app
внутри пакета Pact и вручную настраивая пользователя для warden
если это требуется. Идентификатор пользователя устанавливается внутри состояния провайдера. Это выглядит так:
Pact.service_provider "Some Service Provider" do
app { ProxyApp.new(Rails.application) }
...
class ProxyApp
...
def call(env)
# Mock user authentication
env['warden'] ||= begin
manager = Warden::Manager.new(nil) do |config|
config.merge! Devise.warden_config
end
Warden::Proxy.new(env, manager)
end
user_id = EnvMock.get_user_id # user ID is being set inside the provider state
env['warden'].set_user(Account.find(user_id), scope: :account) if user_id
...
end
end
Я действительно надеюсь, что есть какая-то совершенно другая точка зрения, которая позволяет выполнить эту задачу более красивым способом.