| Class | SetupAndSignInTest |
| In: |
test/integration/setup_and_sign_in_test.rb
|
| Parent: | ActionController::IntegrationTest |
Shows
Note: this can happen when a user uses multiple EPF Wiki sites
# 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
# 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:
After the first user is created (User.count > 0) it is not possible to create the central admin user
# 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