Class SetupAndSignInTest
In: test/integration/setup_and_sign_in_test.rb
Parent: ActionController::IntegrationTest

Methods

Public Instance methods

Shows

  1. new sign up user5 we can logon
  2. user can be remembered
  3. a cookie with wrong id is deleted and the user is prompted to logon again
     Note: this can happen when a user uses multiple EPF Wiki sites
    

[Source]

     # File test/integration/setup_and_sign_in_test.rb, line 176
176:    def test_cookies
177:     @user5 = User.new(:name => 'user5', :email=>'user5@epf.eclipse.org', :password => 'mypassword', :password_confirmation => 'mypassword')
178:     # 1
179:     assert_not_nil User.find_central_admin
180:     post 'login/sign_up', :user => {:name => @user5.name, :email => @user5.email, :password => @user5.password, :password_confirmation => @user5.password_confirmation} # , :i_agree_to_the_terms_of_use => '1'
181:     assert_not_nil assigns(:user)
182:     assert_no_errors(assigns(:user))
183:     assert_redirected_to :action => 'login'
184:     @user5 = assigns(:user)
185:     @user5.id = User.find_by_name(@user5.name).id     # Note: we don't reload @user5 because we loose the password
186:     @user5.hashed_password = User.find(@user5).hashed_password
187:     assert_equal LoginController::FLASH_PW_CONFIRMATION_EMAIL_SENT, flash['success']
188:     get "login/confirm_account", :id => @user5.id, :tk => Digest::SHA1.hexdigest(@user5.hashed_password)    
189:     post 'login/login', :user => {:email => @user5.email, :password => @user5.password}
190:     assert_not_nil session['user']
191:     assert_nil cookies[:epfwiki_id]
192:     session['user'] = nil
193:     # 2
194:     post 'login/login', :user => {:email => @user5.email, :password => @user5.password, :remember_me => "0"}
195:     assert_not_nil assigns(:user)
196:     assert_not_nil session['user']
197: 
198:     logger.info("Cookies: #{cookies.inspect}")    
199:     
200:     assert_not_nil cookies['epfwiki_id'] 
201:     # cookies[:epfwiki_id] doesn't work either
202:     # Testing cookies with functional tests is hard work but here is not easy either
203:     # We also cannot use symbols, and values are converted to strings
204:     assert_equal cookies['epfwiki_id'],session['user'].id.to_s
205: 
206:     session['user'] = nil
207:     get 'login/login'
208:     assert_not_nil assigns(:user)
209:     assert_not_nil session['user']
210:     # 3 
211:     session['user'] = nil
212:     assert_not_nil cookies['epfwiki_id']    
213:     assert_equal cookies['epfwiki_id'], @user5.id.to_s
214:     cookies['epfwiki_id'] = 123456 # cookie with a non-existing id
215:     get 'login/login'
216:     assert_response :success
217:     assert_nil session['user']
218:     assert cookies['epfwiki_id'].blank?
219:     # 4
220:     cookies[:epfwiki_id] = @user5.id
221:     cookies[:epfwiki_token] = 'xyz'
222:     get 'login/login'
223:     assert_response :success 
224:     assert_nil session['user']
225:     assert cookies['epfwiki_id'].blank?
226:     @user5.destroy
227:   end

if ENV[‘EPFWIKI_DOMAINS’] is set sign-up is restricted to those domains

[Source]

     # File test/integration/setup_and_sign_in_test.rb, line 67
 67:   def   test_sign_up
 68:     @emails = ActionMailer::Base::deliveries
 69:     @emails.clear
 70:     user_count = User.count
 71:     # 1 . sign with domain restriction
 72:     get "login/sign_up"
 73:     assert_field("user_email")
 74:     assert_field("user_name")
 75:     assert_field("user_password")
 76:     assert_field("user_password_confirmation")    
 77:     assert_tag :tag => "select", :attributes => {:name => "user[email_extension]"}    
 78:     @html_document = nil # workaround for bug in assert_tag used in assert_errors   
 79:     post "login/sign_up", :user => {:name => "user1", :email => "user1", :email_extension => "@somedomain.nl", :password => 'mypassword', :password_confirmation => 'mypassword'} # , :i_agree_to_the_terms_of_use => '1'
 80:     assert_errors
 81: #    assert_tag :tag => "div", :attributes => { :class => "fieldWithErrors" }
 82:     assert_response :success
 83:     assert_equal user_count, User.count
 84:     user = assigns(:user)
 85:     assert_equal "Email domain not valid",user.errors.full_messages.join(', ') 
 86:     # this domain is allowed, the user is created
 87:     post        "login/sign_up", :user => {:name => "user1", :email=>"user1", :email_extension => "@epf.eclipse.org", :password => 'mypassword', :password_confirmation => 'mypassword'} # , :i_agree_to_the_terms_of_use => '1'
 88:     user = assigns(:user)
 89:     assert_no_errors(user)
 90:     assert_redirected_to :action => 'login'
 91:     assert_equal user_count + 1 , User.count 
 92:     assert_equal 1, @emails.size
 93:     email = @emails.first
 94:     assert_equal("[#{ENV['EPFWIKI_APP_NAME']}] Welcome", email.subject)
 95:     assert_equal("user1@epf.eclipse.org", email.to[0])
 96:     assert_equal([ENV['EPFWIKI_REPLY_ADDRESS']], email.from)
 97:     assert_redirected_to :action => 'login'
 98:     assert_equal LoginController::FLASH_PW_CONFIRMATION_EMAIL_SENT, flash['success']
 99:     # cannot sign up with already taken name, email
100:     @html_document = nil
101:     post        "login/sign_up", :user => {:name => "user1", :email => "user1", :email_extension => "@epf.eclipse.org", :password => 'mypassword', :password_confirmation => 'mypassword'} # , :i_agree_to_the_terms_of_use => '1'
102:     assert_equal "Name has already been taken, Email has already been taken",assigns(:user).errors.full_messages.join(', ') 
103:     # sign up without domain restriction
104:     ENV['EPFWIKI_DOMAINS'] = nil    
105:     get "login/sign_up"
106:     assert_field("user_email")
107:     assert_field("user_name")
108:     assert_field("user_password")
109:     assert_field("user_password_confirmation")    
110:     assert_no_tag :tag => "select", :attributes => {:name => "email_extension"}    
111:     user_count = User.count
112:     @html_document = nil
113:     post "login/sign_up", :user => {:name => "user3", :email => "user2@xyz.com", :password => 'mypassword', :password_confirmation => 'mypassword'} # , :i_agree_to_the_terms_of_use => '1'
114:     assert_no_errors(assigns(:user))
115:     assert_equal user_count + 1, User.count 
116:     assert_redirected_to :controller => 'login', :action => 'login'
117:     #assert_equal "Name has already been taken, Email has already been taken",assigns(:user).errors.full_messages.join(', ') 
118:     @html_document = nil
119:     get "login/sign_up"
120:     assert_field("user_email")
121:     assert_field("user_name")
122:     assert_field("user_password")
123:     assert_field("user_password_confirmation")    
124:     assert_no_tag :tag => "select", :attributes => {:name => "email_extension"}        
125:     user_count = User.count
126:     # user exists
127:     @html_document = nil
128:     post "login/sign_up", :user => {:name => "user2", :email => "user2@xyz.com"} # , :i_agree_to_the_terms_of_use => '1'
129:     assert_equal "Name has already been taken, Password confirmation can't be blank, Password can't be blank, Email has already been taken",assigns(:user).errors.full_messages.join(', ') 
130:     assert_equal user_count, User.count 
131:     assert_errors
132:     # creating user3
133:     @html_document = nil
134:     post "login/sign_up", :user => {:name => "user4", :email => "user4@xyz.com", :password => 'user4', :password_confirmation => 'user4'} # , :i_agree_to_the_terms_of_use => '1'
135:     assert_no_errors(assigns(:user))
136:     assert_equal LoginController::FLASH_PW_CONFIRMATION_EMAIL_SENT,  flash['success']   
137:     assert_equal "",assigns(:user).errors.full_messages.join(', ') 
138:     assert_equal user_count + 1, User.count 
139:     assert_redirected_to :action => 'login'
140:     assert_equal Digest::SHA1.hexdigest('user4'), assigns(:user).hashed_password
141:     get "login/login" 
142:     assert_response :success
143:     # assert_field("user_email")# TODO Rails bug?
144:     # assert_field("user_password")    # TODO Rails bug?
145:     # user3 cannot sign-in, it needs to be confirmed
146:     user3 = User.find_by_name('user4')
147:     post "login/login" , :user => {:email => 'user4@epf.org', :password => 'user3'}
148:     assert_equal LoginController::FLASH_INVALID_PW, flash['notice']
149:     # cannot confirm with wrong token 
150:     # ? log reports a RunTimeError but then the assert says there is no runtime error! assert_raise(RuntimeError){ get "login/confirm_account", :id => user3.id, :tk => "anystring"}
151:     get "login/confirm_account", :id => user3.id, :tk => "anystring"
152:     user3 = User.find_by_name('user4')
153:     assert_equal nil, user3.confirmed_on
154:     # can confirm with right token
155:     get "login/confirm_account", :id => user3.id, :tk => Digest::SHA1.hexdigest(user3.hashed_password)
156:     assert_equal LoginController::FLASH_PASSWORD_ACTIVATED, flash['success']
157:     assert_not_nil assigns(:user).confirmed_on
158:     # user can now logon
159:     # user can sign in and check that they want to be remembered
160:     post "login/login" , :user => {:email => 'user4@xyz.com', :password => 'user4', :remember_me => 0}
161:     assert_equal User.find_by_name("user4"), session['user']
162:     assert_not_nil cookies
163:     # TODO we can't use cookies[:epfwiki_id] anymore?
164:     assert_equal cookies["epfwiki_id"], session['user'].id.to_s 
165:     # automatically sign-in for remembered users
166:     # redirected to user details or requested page (not tested)
167:     get "login/login"
168:     assert_redirected_to :controller => "users", :action => "account"
169:   end
    If there are no users:
  • all request are redirected to the new page
  • the new page can be used to create the central admin account

After the first user is created (User.count > 0) it is not possible to create the central admin user

[Source]

    # File test/integration/setup_and_sign_in_test.rb, line 25
25:   def   test_signup_central_admin
26:     User.destroy_all
27:     assert_equal 0, User.count
28:     get "login/login"
29:     assert_redirected_to :action => 'new_cadmin'
30:     # fields cannot be null
31:     post "login/new_cadmin"
32:     assert_response :success
33:     assert_errors
34:     assert_equal 0, User.count
35:     # no password confirmation
36:     post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin"}
37:     assert_response :success 
38:     #assert nil, @response.body
39:     assert_equal "Password confirmation can't be blank",assigns(:user).errors.full_messages.join(', ') 
40:     assert_equal 0, User.count
41:     assert_errors
42:     # passwords don't match
43:     post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin", :password_confirmation => ""}
44:     assert_equal "Password confirmation can't be blank, Password doesn't match confirmation",assigns(:user).errors.full_messages.join(', ') 
45:     assert_response :success #302?
46:     assert_equal 0, User.count
47:     assert_errors
48:     # passwords should be present
49:     post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com"}
50:     assert_equal "Password confirmation can't be blank, Password can't be blank",assigns(:user).errors.full_messages.join(', ') 
51:     assert_equal 0, User.count    
52:     assert_response :success
53:     assert_errors
54:     post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin", :password_confirmation => "cadmin"}    
55:     assert_equal "",assigns(:user).errors.full_messages.join(', ') 
56:     assert_equal 1, User.count    
57:     cadmin = User.find_central_admin
58:     assert_not_nil cadmin
59:     assert_redirected_to :action => 'login' 
60:     post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin", :password_confirmation => "cadmin"}    
61:     assert_equal LoginController::FLASH_CENTRAL_ADMIN_ALREADY_CREATED, flash['error']    
62:     assert_equal 1, User.count    
63:     assert_redirected_to :action => 'login'
64:   end

[Validate]