| 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 |