Remove SslRequirement and associated logic
[gitorious:mainline.git] / test / functional / sessions_controller_test.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2012 Gitorious AS
4 #   Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
5 #   Copyright (C) 2007 Johan Sørensen <johan@johansorensen.com>
6 #
7 #   This program is free software: you can redistribute it and/or modify
8 #   it under the terms of the GNU Affero General Public License as published by
9 #   the Free Software Foundation, either version 3 of the License, or
10 #   (at your option) any later version.
11 #
12 #   This program is distributed in the hope that it will be useful,
13 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #   GNU Affero General Public License for more details.
16 #
17 #   You should have received a copy of the GNU Affero General Public License
18 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 #++
20
21 require "test_helper"
22
23 class SessionsControllerTest < ActionController::TestCase
24   include OpenIdAuthentication
25
26   def setup
27     setup_ssl_from_config
28   end
29
30   should "login and redirect" do
31     @controller.stubs(:using_open_id?).returns(false)
32     post :create, :email => "johan@johansorensen.com", :password => "test"
33     assert_not_nil session[:user_id]
34     assert_response :redirect
35   end
36
37   should "login with openid and redirect to new user page" do
38     identity_url = "http://patcito.myopenid.com"
39     @controller.stubs(:using_open_id?).returns(true)
40     @controller.stubs(:successful?).returns(false)
41     @controller.stubs(:authenticate_with_open_id).yields(
42       Result[:successful],
43       identity_url,
44       registration = {
45         "nickname" => "patcito",
46         "email" => "patcito@gmail.com",
47         "fullname" => "Patrick Aljord"
48       }
49     )
50     post :create, :openid_url => identity_url
51     assert_nil session[:user_id]
52     assert_equal identity_url, session[:openid_url]
53     assert_equal "patcito", session[:openid_nickname]
54     assert_equal "patcito@gmail.com", session[:openid_email]
55     assert_equal "Patrick Aljord", session[:openid_fullname]
56     assert_response :redirect
57     assert_redirected_to :controller => "users", :action => "openid_build"
58   end
59
60   should "fail login and not redirect" do
61     @controller.stubs(:using_open_id?).returns(false)
62     post :create, :email => "johan@johansorensen.com", :password => "bad password"
63     assert_nil session[:user_id]
64     assert_response :success
65   end
66
67   should "logout" do
68     login_as :johan
69     get :destroy
70     assert session[:user_id].nil?
71     assert_response :redirect
72   end
73
74   should "remember me" do
75     @controller.stubs(:using_open_id?).returns(false)
76     post :create, :email => "johan@johansorensen.com", :password => "test", :remember_me => "1"
77     assert_not_nil @response.cookies["auth_token"]
78   end
79
80   should "should not remember me" do
81     @controller.stubs(:using_open_id?).returns(false)
82     post :create, :email => "johan@johansorensen.com", :password => "test", :remember_me => "0"
83     assert_nil @response.cookies["auth_token"]
84   end
85
86   should "delete token on logout" do
87     login_as :johan
88     get :destroy
89     assert_nil @response.cookies["auth_token"]
90   end
91
92   should "login with cookie" do
93     users(:johan).remember_me
94     @request.cookies["auth_token"] = users(:johan).remember_token
95     get :new
96     assert @controller.send(:logged_in?)
97   end
98
99   should "fail when trying to login with with expired cookie" do
100     users(:johan).remember_me
101     users(:johan).update_attribute :remember_token_expires_at, 5.minutes.ago.utc
102     @request.cookies["auth_token"] = users(:johan).remember_token
103     get :new
104     assert !@controller.send(:logged_in?)
105   end
106
107   should "fail cookie login" do
108     users(:johan).remember_me
109     @request.cookies["auth_token"] = "invalid_auth_token"
110     get :new
111     assert !@controller.send(:logged_in?)
112   end
113
114   should "set current user to the session user_id" do
115     session[:user_id] = users(:johan).id
116     get :new
117     assert_equal users(:johan), @controller.send(:current_user)
118   end
119
120   should "show flash when invalid credentials are passed" do
121     @controller.stubs(:using_open_id?).returns(false)
122     post :create, :email => "invalid", :password => "also invalid"
123     # response.body.should have_tag("div.flash_message", /please try again/)
124     # rspec.should test(flash.now)
125   end
126
127   context "Setting a magic header when there is a flash message" do
128     should "set the header if there is a flash" do
129       post :create, :email => "johan@johansorensen.com", :password => "test"
130       assert_not_nil flash[:notice]
131       assert_equal "true", @response.headers["X-Has-Flash"]
132     end
133   end
134 end