Took me a while to figure out all the stubs … maybe this is useful later :)
I’m using this to test our facebook / twitter signup flows.
def external_redirect(url)
yield
rescue ActionController::RoutingError # goes to twitter.com/oauth/authenticate
current_url.must_equal url
else
raise "Missing external redirect"
end
it "signs up" do
twitter_id = 12345
visit "/"
stub_request(:post, "https://api.twitter.com/oauth/request_token").
to_return(body: "oauth_token=TOKEN&oauth_token_secret=SECRET&oauth_callback_confirmed=true")
external_redirect "https://api.twitter.com/oauth/authenticate?x_auth_access_type=read&oauth_token=TOKEN" do
click_link "Continue with Twitter"
end
# https://dev.twitter.com/oauth/reference/post/oauth/access_token
stub_request(:post, "https://api.twitter.com/oauth/access_token").
to_return(body: "oauth_token=TOKEN&oauth_token_secret=SECRET&user_id=#{twitter_id}&screen_name=twitterapi")
# https://dev.twitter.com/rest/reference/get/account/verify_credentials
stub_request(:get, "https://api.twitter.com/1.1/account/verify_credentials.json?include_entities=false&skip_status=true").
to_return(body: %{{"profile_image_url_https": "image_normal.png"}})
visit "/auth/twitter/callback"
end
Tagged: Rails, Ruby, TDD
