blob: d519c30722e32cf4a594ea609c438c1cbefb81bc [file] [log] [blame]
require "#{File.dirname(__FILE__)}/../test_helper"
#--######################################################################
# Copyright (c) 2006 LogicaCMG
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#
# Onno van der Straaten:: initial implementation
#++######################################################################
# {Copyright (c) 2006 LogicaCMG}[link:files/COPYRIGHT.html]
class SetupAndSignInTest < ActionController::IntegrationTest
# 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
def test01_signup_central_admin
assert_equal 0, User.count
get "login/login"
assert_redirected_to :action => 'new_cadmin'
# fields cannot be null
post "login/new_cadmin"
assert_response :success
assert_errors
assert_equal 0, User.count
# no password confirmation
post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin"}
assert_equal "Password confirmation can't be blank",assigns(:user).errors.full_messages.join(', ')
assert_response :success #302?
assert_equal 0, User.count
assert_errors
# passwords don't match
post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin", :password_confirmation => ""}
assert_equal "Password confirmation can't be blank, Password doesn't match confirmation",assigns(:user).errors.full_messages.join(', ')
assert_response :success #302?
assert_equal 0, User.count
assert_errors
# passwords should be present
post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com"}
assert_equal "Password confirmation can't be blank, Password can't be blank",assigns(:user).errors.full_messages.join(', ')
assert_equal 0, User.count
assert_response :success
assert_errors
post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin", :password_confirmation => "cadmin"}
assert_equal "",assigns(:user).errors.full_messages.join(', ')
assert_equal 1, User.count
cadmin = User.find_central_admin
assert_not_nil cadmin
assert_redirected_to :action => 'login'
post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin", :password_confirmation => "cadmin"}
assert_equal LoginController::FLASH_CENTRAL_ADMIN_ALREADY_CREATED, flash['error']
assert_equal 1, User.count
assert_redirected_to :action => 'login'
end
# if ENV['EPFWIKI_DOMAINS'] is set sign-up is restricted to those domains
# if ENV['EPFWIKI_GENERATE_PASSWORDS'] = '1' passwords are generated
def test02_sign_up
@emails = ActionMailer::Base::deliveries
@emails.clear
ENV['EPFWIKI_GENERATE_PASSWORDS'] = '1'
user_count = User.count
# 1 . sign with domain restriction
get "login/sign_up"
assert_field("user_email")
assert_field("user_name")
assert_no_field("user_password")
assert_no_field("user_password_confirmation")
assert_tag :tag => "select", :attributes => {:name => "user[email_extension]"}
@html_document = nil # workaround for bug in assert_tag used in assert_errors
post "login/sign_up", :user => {:name => "user1", :email => "user1", :email_extension => "@somedomain.nl"}
assert_errors
# assert_tag :tag => "div", :attributes => { :class => "fieldWithErrors" }
assert_response :success
assert_equal user_count, User.count
user = assigns(:user)
assert_equal "Email domain not valid",user.errors.full_messages.join(', ')
# this domain is allowed, the user is created
post "login/sign_up", :user => {:name => "user1", :email=>"user1", :email_extension => "@epf.org"}
user = assigns(:user)
assert_redirected_to :action => 'login'
assert_equal user_count + 1 , User.count
assert_equal 1, @emails.size
email = @emails.first
assert_equal("[#{ENV['EPFWIKI_APP_NAME']}] Welcome to #{ENV['EPFWIKI_APP_NAME']}", email.subject)
assert_equal("user1@epf.org", email.to[0])
assert_equal([ENV['EPFWIKI_REPLY_ADDRESS']], email.from)
assert_redirected_to :action => 'login'
assert_equal LoginController::FLASH_PW_SENT, flash['success']
# cannot sign up with already taken name, email
@html_document = nil
post "login/sign_up", :user => {:name => "user1", :email => "user1", :email_extension => "@epf.org"}
assert_equal "Name has already been taken, Email has already been taken",assigns(:user).errors.full_messages.join(', ')
# sign up without domain restriction
ENV['EPFWIKI_DOMAINS'] = nil
get "login/sign_up"
assert_field("user_email")
assert_field("user_name")
assert_no_field("user_password")
assert_no_field("user_password_confirmation")
assert_no_tag :tag => "select", :attributes => {:name => "email_extension"}
user_count = User.count
@html_document = nil
post "login/sign_up", :user => {:name => "user2", :email => "user2@xyz.com"}
assert_equal user_count + 1, User.count
assert_redirected_to :controller => 'login', :action => 'login'
#assert_equal "Name has already been taken, Email has already been taken",assigns(:user).errors.full_messages.join(', ')
# sign up passwords are generated
ENV['EPFWIKI_GENERATE_PASSWORDS'] = '0'
@html_document = nil
get "login/sign_up"
assert_field("user_email")
assert_field("user_name")
assert_field("user_password")
assert_field("user_password_confirmation")
assert_no_tag :tag => "select", :attributes => {:name => "email_extension"}
user_count = User.count
# user exists
@html_document = nil
post "login/sign_up", :user => {:name => "user2", :email => "user2@xyz.com"}
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(', ')
assert_equal user_count, User.count
assert_errors
# creating user3
@html_document = nil
post "login/sign_up", :user => {:name => "user3", :email => "user3@xyz.com", :password => 'user3', :password_confirmation => 'user3'}
assert_equal LoginController::FLASH_PW_CONFIRMATION_EMAIL_SENT, flash['success']
assert_equal "",assigns(:user).errors.full_messages.join(', ')
assert_equal user_count + 1, User.count
assert_redirected_to :action => 'login'
assert_equal Digest::SHA1.hexdigest('user3'), assigns(:user).hashed_password
get "login/login"
assert_response :success
# assert_field("user_email")#TODO: this causes some strange error
# assert_field("user_password") #TODO: this causes some strange error
# user3 cannot sign-in, it needs to be confirmed
user3 = User.find_by_name('user3')
post "login/login" , :user => {:email => 'user3@epf.org', :password => 'user3'}
assert_equal LoginController::FLASH_INVALID_PW, flash['notice']
# cannot confirm with wrong token
# ? 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"}
get "login/confirm_account", :id => user3.id, :tk => "anystring"
user3 = User.find_by_name('user3')
assert_equal nil, user3.confirmed_on
# can confirm with right token
get "login/confirm_account", :id => user3.id, :tk => Digest::SHA1.hexdigest(user3.hashed_password)
assert_equal LoginController::FLASH_PASSWORD_ACTIVATED, flash['success']
assert_not_nil assigns(:user).confirmed_on
# user can now logon
# user can sign in and check that they want to be remembered
post "login/login" , :user => {:email => 'user3@xyz.com', :password => 'user3', :remember_me => 0}
assert_equal User.find_by_name("user3"), session['user']
assert_not_nil cookies
# TODO: NOTE: why can't we use cookies[:epfwiki_id] anymore?
assert_equal cookies["epfwiki_id"], session['user'].id.to_s
# automatically sign-in for remembered users
# redirected to user details or requested page (not tested)
get "login/login"
assert_redirected_to :controller => "users", :action => "show", :id => cookies[:epfwiki_id]
end
end