Как подделать логин OpenID в пользовательской истории RSpec / Cucumber при использовании плагина open_id_authentication - PullRequest
6 голосов
/ 20 декабря 2008

Я пытаюсь написать сценарий Cucumber, который требует, чтобы я вошел в систему пользователя - обычно это было бы довольно просто, но я использую только аутентификацию OpenID (краткая инструкция плагина аутентификации). Однако после того, как я покопался в кишках плагинов open_id_authentication, я не уверен, как мне этого добиться в Cucumber.

Ответы [ 4 ]

4 голосов
/ 20 декабря 2008

Я нашел способ, если вы разместите это в ваших функциях / support / env.rb:

ActionController::Base.class_eval do
  private

  def begin_open_id_authentication(identity_url, options = {})
    yield OpenIdAuthentication::Result.new(:successful), identity_url, nil
  end 
end

Тогда вы можете просто сделать что-то подобное на своем соответствующем шаге:

Given /^I am logged in as "(.*)"$/ do |name|
  user = User.find_by_name(user)
  post '/session', :openid_url => user.identity_url
  # Some assertions just to make sure our hack in env.rb is still working
  response.should redirect_to('/')
  flash[:notice].should eql('Logged in successfully')
end

Я просто полностью отключил аутентификацию open id для функций огурца, очевидно, если мне нужны экземпляры, в которых произошел сбой входа, я мог бы сделать это на основе предоставленного identity_url.

2 голосов
/ 10 июля 2010

Если вы хотите иметь возможность заглушить ответы, сделайте следующее:

В функциях / support / helpers.rb:

ActionController::Base.class_eval do

  private
    def fake_openid_response(identity_url)
      [OpenIdAuthentication::Result.new(:successful), identity_url, nil]
    end

    def begin_open_id_authentication(identity_url, options = {})
        yield fake_openid_response(identity_url)
    end 
end

Переместив ответ в отдельный метод, вы теперь можете заглушить ответ в своих шагах, если это необходимо. Например, если я хотел получить ответ «отсутствует» и у меня был контроллер GoogleLoginController, я мог бы сделать следующее, используя Mocha:

GoogleLoginController.any_instance.stubs(:fake_openid_response)
    .returns([OpenIdAuthentication::Result.new(:missing), identity_url, nil])
2 голосов
/ 03 января 2009

Bort , приложение скелета рельсов, имеет полный набор тестов rspec и поддерживает вход в систему openID, так что вы можете посмотреть и посмотреть, что они делают.

0 голосов
/ 03 января 2009

Ответ DEfusion работает, за исключением того, что мне нужно было нормализовать identity_url, например:

ActionController::Base.class_eval do

    private

        def begin_open_id_authentication(identity_url, options = {})
            yield OpenIdAuthentication::Result.new(:successful), self.normalize_identifier(identity_url), nil
        end 
end

Спасибо

...