Skip to content

Instantly share code, notes, and snippets.

@huydx
Forked from jittuu/gist:792715
Created July 30, 2013 08:44
Show Gist options
  • Save huydx/6111322 to your computer and use it in GitHub Desktop.
Save huydx/6111322 to your computer and use it in GitHub Desktop.
require 'spec_helper'
describe Users::OauthCallbacksController, "handle facebook authentication callback" do
describe "#annonymous user" do
context "when facebook email doesn't exist in the system" do
before(:each) do
stub_env_for_omniauth
get :facebook
@user = User.where(:email => "[email protected]").first
end
it { @user.should_not be_nil }
it "should create authentication with facebook id" do
authentication = @user.authentications.where(:provider => "facebook", :uid => "1234").first
authentication.should_not be_nil
end
it { should be_user_signed_in }
it { response.should redirect_to tasks_path }
end
context "when facebook email already exist in the system" do
before(:each) do
stub_env_for_omniauth
User.create!(:email => "[email protected]", :password => "my_secret")
get :facebook
end
it { flash[:notice].should == "Your email [email protected] is already exist in the system. You need to sign in first."}
it { response.should redirect_to new_user_session_path }
end
end
describe "#logged in user" do
context "when user don't have facebook authentication" do
before(:each) do
stub_env_for_omniauth
user = User.create!(:email => "[email protected]", :password => "my_secret")
sign_in user
get :facebook
end
it "should add facebook authentication to current user" do
user = User.where(:email => "[email protected]").first
user.should_not be_nil
fb_authentication = user.authentications.where(:provider => "facebook").first
fb_authentication.should_not be_nil
fb_authentication.uid.should == "1234"
end
it { should be_user_signed_in }
it { response.should redirect_to authentications_path }
it { flash[:notice].should == "Facebook is connected with your account."}
end
context "when user already connect with facebook" do
before(:each) do
stub_env_for_omniauth
user = User.create!(:email => "[email protected]", :password => "my_secret")
user.authentications.create!(:provider => "facebook", :uid => "1234")
sign_in user
get :facebook
end
it "should not add new facebook authentication" do
user = User.where(:email => "[email protected]").first
user.should_not be_nil
fb_authentications = user.authentications.where(:provider => "facebook")
fb_authentications.count.should == 1
end
it { should be_user_signed_in }
it { flash[:notice].should == "Signed in successfully." }
it { response.should redirect_to tasks_path }
end
end
end
def stub_env_for_omniauth
# This a Devise specific thing for functional tests. See https://github.com/plataformatec/devise/issues/closed#issue/608
request.env["devise.mapping"] = Devise.mappings[:user]
env = { "omniauth.auth" => { "provider" => "facebook", "uid" => "1234", "extra" => { "user_hash" => { "email" => "[email protected]" } } } }
@controller.stub!(:env).and_return(env)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment