На этапе проверки 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
Очень надеюсь, что есть какой-то совершенно иной ракурс, позволяющий выполнить эту задачу гораздо красивее.