omniauth multiple user login
For multi user / social sites that often need to test user interactions (like friends actions) you need a way to test 2 or more users interacting at the same time. So here's a snippet I've used:
Sample capybara scenario:
scenario "User's friends recipes show up on his home page", :js => true do
user = FactoryGirl.create(:user)
friend = add_friend_for(user)
in_browser(:friend) do
login(friend)
add_recipe("Apple pie)
end
in_browser(:user) do
login(user)
click_on "Home"
page.should have_css('.friend_recipes .recipe', :text => "Apple pie")
end
end
And here is what you need to make it work:
# /spec/support/omniauth.rb
OmniAuth.config.test_mode = true
def omniauth_mock(user = nil)
user ||= FactoryGirl.create(:user)
OmniAuth.config.mock_auth[:facebook] = {
:uid => user.uid,
:provider => user.provider,
:info => {:name => user.name, :nickname => 'fbuser'},
:credentials => {:token => user.email, :expires_at => 2.days.from_now},
:extra => {"user_hash" => {:id => user.id, :email => user.email}}
}
end
# /spec/factories/users.rb
FactoryGirl.define do
sequence :email do |n|
"test#{n}@email.com"
end
factory :user do
sequence(:name) { |n| "John Doe#{n}" }
email { FactoryGirl.generate(:email) }
sequence(:provider) { |n| "facebook#{n}" } # Hack-ish way to log in multiple users at the same time
sequence(:uid) {|n| "uid#{n}"}
oauth_token "1234567890"
end
end
# capybara helper (I put helpers in /spec/support/common_steps.rb)
def login(user = nil)
omniauth_mock(user)
visit root_path
click_on "Login"
end
def in_browser(name)
Capybara.session_name = name
yield
end
Written by Cezar Halmagean
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Rails
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#