Проверка запроса OAuth2 в тесте rspec с использованием гема oauth-plugin - PullRequest
0 голосов
/ 21 марта 2012

Я использую последний плагин oauth с Rails 3.1. Я хочу проверить свои OAuth2 API-контроллеры с помощью тестов rspec. После нескольких попыток авторизовать мой запрос, я просто хочу заглушить фильтр oauthenticate , чтобы избавиться от проблем с аутентификацией. Но я все еще получаю 401 Несанкционированный . Почему ??

users_controller.rb:

class UsersController
  oauthenticate

  def update
    <do something>
  end
end

users_controller_spec.rb:

describe UsersController do
  describe "POST 'update'" do

      before :each do
        controller.stub!(:oauthenticate).and_return true
      end

      it "should be a successful request" do
        post :update,  { "user_id" => "some id" }
        response.should be_ok
     end
end

Ожидается, что ActionController :: TestResponse будет иметь код ответа 200, но получил 401.

Проверка Rspec для провайдера oauth не помогает. С тестом на огурец все отлично работает при установке действительного токена доступа Заголовок авторизации .

Ответы [ 3 ]

2 голосов
/ 12 декабря 2012

Аналогично ответу Питера, за исключением немного более приятного, потому что он только заглушит метод в контексте этой спецификации:

before :each do
  OAuth::Controllers::ApplicationControllerMethods::Filter.
    any_instance.stub(:filter).and_return(true)
end
2 голосов
/ 23 марта 2012

ОК. Я до сих пор не знаю, почему oauthenticate перестает работать, но я выяснил, как сделать аутентифицированный запрос OAuth2 в тестах RSpec. Вы должны установить oauth.strategies и token параметры объекта запроса:

def prepare_authenticated_access_token_request
   # Create consumer application
   @client_application = Factory.create(:client_application)
   # Create a user who authorized the consumer
   @resource_owner = Factory.create(:user)
   # Create a valid, authorized access token
   token = Oauth2Token.create :user => @resource_owner, :client_application => @client_application
   # Configure the request object so that it is recognized as a OAuth2 request
   request.env["oauth.strategies"] = [:oauth20_token, :token]
   request.env["oauth.token"] = token
 end
1 голос
/ 30 октября 2012

ваш подход к заглушке не сработал, потому что oauthenticate вызывается, как только класс загружается, так что к тому времени, когда вы заглываете значение до того, как фильтр уже был установлен на контроллере.

Я нашел способ обойти это, переопределив базовый метод фильтра, следующим образом:

before :each do
  OAuth::Controllers::ApplicationControllerMethods::Filter.class_eval do
    def filter(controller)
      return true
    end
  end
end

Я нашел это чище, чем необходимость создания oauth-токенов и заголовков, хотя, конечно, это не так.больше не проверяйте вашу аутентификацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...