Module: Clearance::Spec::Controllers::SessionsController

Defined in:
lib/clearance/spec/controllers/sessions_controller_spec.rb

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/clearance/spec/controllers/sessions_controller_spec.rb', line 5

def self.included(base)
  base.class_eval do
    include ActionController::UrlWriter
    
    describe "#facebook_new" do
      it "should redirect to facebook login url" do
        get :facebook_new
        response.should redirect_to(Facebooker.)
      end
  
      it "should redirect to facebook create if the user is already authenticated with facebook" do
        controller.stubs(:ensure_authenticated_to_facebook).returns(true)
        get :facebook_new
        response.should redirect_to(facebook_create_session_url)
      end
    end

    describe "#facebook_create" do
      before(:each) do
        controller.stubs(:ensure_authenticated_to_facebook).returns(true)
        @facebook_user = stub('facebook_user', :facebook_id => 1, :first_name => 'Johnny', :last_name => 'McLovin', :birthday => 'today', :id => 1)
        User.stubs(:find_by_facebook_id).returns(@facebook_user)
        @facebook_session = stub_everything('facebook_session', :user => @facebook_user)
        controller.stubs(:facebook_session).returns(@facebook_session)
      end
  
      it "should get the facebook id from the session" do
        controller.stubs(:redirect_back_or_default)
        # @facebook_session.stubs(:user).returns(@facebook_user)
        @facebook_user.expects(:facebook_id).returns(1)
        get :facebook_create
      end
  
      it "should try to find a user by their facebook id" do
        controller.stubs(:redirect_back_or_default)
        session[:facebook_session] = stub_everything('facebook_session', :facebook_id => 1)
        User.expects(:find_by_facebook_id).with(1).returns(@facebook_user)
        get :facebook_create
      end
  
      it "should set the current user" do
        controller.stubs(:redirect_back_or_default)
        controller.expects(:login).with(@facebook_user)
        get :facebook_create
      end
  
      it "should call redirect_back_or_default" do
        get :facebook_create
        response.should be_redirect
      end

      describe "when user doesn't exist on our system" do
        before :each do
          controller.stubs(:redirect_back_or_default)
          @facebook_user.stubs(:send_email)
          @facebook_session.stubs(:user).returns(@facebook_user)
          User.stubs(:find_by_facebook_id).returns(nil)
          @user = stub_everything("User")
        end
    
        it "creates a user if one cannot be found" do
          User.expects(:new).returns(@user)
          get :facebook_create
        end
  
        it "sets the first name, last name, facebook id on the new user" do
          User.stubs(:create!).yields(@user).returns(@user)
          @user.expects(:first_name=).with('Johnny')
          @user.expects(:last_name=).with('McLovin')
          @user.expects(:facebook_id=).with(1)
          get :facebook_create
        end

        it "activates the new user" do
          get :facebook_create
          saved_user = User.last
          saved_user.should be_confirmed
        end

        describe "Facebook user welcome email" do
          it "contains a link to the home page URL" do
            @user = stub("User", :email => "[email protected]")
            mail = ClearanceMailer.create_facebook_welcome(@user)
            mail.body.should =~ /#{root_url}/
          end
      
          it "sets the subject, body and sends email" do
            mail = stub("Mail", :subject => "some subject", :body => "some text")
            ClearanceMailer.stubs(:create_facebook_welcome).returns(mail)
            @facebook_user.expects(:send_email).with("some subject", "some text")
            get :facebook_create
          end
        end
      end
    end
  end
end