adva_user 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/README +114 -0
  6. data/README.md +29 -0
  7. data/Rakefile +2 -0
  8. data/adva_user.gemspec +17 -0
  9. data/app/controllers/admin/base_account_controller.rb +13 -0
  10. data/app/controllers/admin/users_controller.rb +95 -0
  11. data/app/controllers/password_controller.rb +36 -0
  12. data/app/controllers/session_controller.rb +30 -0
  13. data/app/helpers/users_helper.rb +27 -0
  14. data/app/models/account.rb +7 -0
  15. data/app/models/membership.rb +16 -0
  16. data/app/models/password_mailer.rb +43 -0
  17. data/app/models/user.rb +106 -0
  18. data/app/views/admin/users/_form.html.erb +29 -0
  19. data/app/views/admin/users/_sidebar.html.erb +8 -0
  20. data/app/views/admin/users/edit.html.erb +7 -0
  21. data/app/views/admin/users/index.html.erb +13 -0
  22. data/app/views/admin/users/new.html.erb +5 -0
  23. data/app/views/admin/users/show.html.erb +27 -0
  24. data/app/views/layouts/login.html.erb +24 -0
  25. data/app/views/password/edit.html.erb +14 -0
  26. data/app/views/password/new.html.erb +13 -0
  27. data/app/views/password_mailer/reset_password_email.html.erb +3 -0
  28. data/app/views/password_mailer/updated_password_email.html.erb +1 -0
  29. data/app/views/session/new.html.erb +17 -0
  30. data/config/initializers/menus.rb +25 -0
  31. data/config/routes.rb +14 -0
  32. data/db/migrate/20080402000001_create_users_table.rb +33 -0
  33. data/db/migrate/20080402000005_create_memberships_table.rb +13 -0
  34. data/db/migrate/20090625124502_create_accounts.rb +13 -0
  35. data/db/migrate/20090625133231_add_account_to_user.rb +10 -0
  36. data/lib/action_controller/authenticate_anonymous.rb +70 -0
  37. data/lib/action_controller/authenticate_user.rb +201 -0
  38. data/lib/active_record/belongs_to_author.rb +37 -0
  39. data/lib/adva_user.rb +28 -0
  40. data/lib/adva_user/version.rb +3 -0
  41. data/lib/login/helper_integration.rb +11 -0
  42. data/lib/login/mail_config.rb +39 -0
  43. data/test/contexts.rb +42 -0
  44. data/test/fixtures.rb +18 -0
  45. data/test/functional/admin/users_controller_test.rb +176 -0
  46. data/test/functional/password_controller_test.rb +96 -0
  47. data/test/functional/session_controller_test.rb +1 -0
  48. data/test/functional/user_controller_test.rb +95 -0
  49. data/test/integration/anonymous_login_test.rb +39 -0
  50. data/test/integration/edit_user_test.rb +44 -0
  51. data/test/integration/memberships_test.rb +52 -0
  52. data/test/integration/user_deletion_test.rb +27 -0
  53. data/test/integration/user_login_test.rb +53 -0
  54. data/test/integration/user_login_with_remember_me_test.rb +20 -0
  55. data/test/integration/user_registration_test.rb +64 -0
  56. data/test/test_helper.rb +1 -0
  57. data/test/unit/cells/user_cell_test.rb +13 -0
  58. data/test/unit/helpers/users_helper_test.rb +52 -0
  59. data/test/unit/models/account_test.rb +21 -0
  60. data/test/unit/models/anonymous_test.rb +54 -0
  61. data/test/unit/models/password_mailer_test.rb +26 -0
  62. data/test/unit/models/user_mailer_test.rb +16 -0
  63. data/test/unit/models/user_test.rb +173 -0
  64. data/vendor/gems/authentication/.gitignore +17 -0
  65. data/vendor/gems/authentication/Gemfile +4 -0
  66. data/vendor/gems/authentication/LICENSE +22 -0
  67. data/vendor/gems/authentication/MIT-LICENSE +38 -0
  68. data/vendor/gems/authentication/README +39 -0
  69. data/vendor/gems/authentication/README.md +29 -0
  70. data/vendor/gems/authentication/RUNNING_UNIT_TESTS +13 -0
  71. data/vendor/gems/authentication/Rakefile +61 -0
  72. data/vendor/gems/authentication/authentication.gemspec +17 -0
  73. data/vendor/gems/authentication/lib/authentication.rb +270 -0
  74. data/vendor/gems/authentication/lib/authentication/active_record_extensions.rb +11 -0
  75. data/vendor/gems/authentication/lib/authentication/bogus.rb +13 -0
  76. data/vendor/gems/authentication/lib/authentication/hash_helper.rb +26 -0
  77. data/vendor/gems/authentication/lib/authentication/ldap.rb +49 -0
  78. data/vendor/gems/authentication/lib/authentication/remember_me.rb +52 -0
  79. data/vendor/gems/authentication/lib/authentication/salted_hash.rb +53 -0
  80. data/vendor/gems/authentication/lib/authentication/single_token.rb +53 -0
  81. data/vendor/gems/authentication/lib/authentication/version.rb +3 -0
  82. data/vendor/gems/authentication/lib/radius/dictionary +207 -0
  83. data/vendor/gems/authentication/test_backup/abstract_unit.rb +30 -0
  84. data/vendor/gems/authentication/test_backup/active_record_extension_test.rb +17 -0
  85. data/vendor/gems/authentication/test_backup/authentication_test.rb +231 -0
  86. data/vendor/gems/authentication/test_backup/database.yml +12 -0
  87. data/vendor/gems/authentication/test_backup/fixtures/user.rb +3 -0
  88. data/vendor/gems/authentication/test_backup/fixtures/users.yml +3 -0
  89. data/vendor/gems/authentication/test_backup/options_test.rb +100 -0
  90. data/vendor/gems/authentication/test_backup/remember_me_test.rb +41 -0
  91. data/vendor/gems/authentication/test_backup/salted_hash_test.rb +38 -0
  92. data/vendor/gems/authentication/test_backup/schema.rb +10 -0
  93. data/vendor/gems/authentication/test_backup/single_token_test.rb +44 -0
  94. data/vendor/gems/authentication/test_backup/test_helper.rb +8 -0
  95. metadata +157 -0
@@ -0,0 +1,52 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper' ))
2
+
3
+ module IntegrationTests
4
+ class MembershipsTest < ActionController::IntegrationTest
5
+ def setup
6
+ super
7
+ @site = use_site! 'site with pages'
8
+ end
9
+
10
+ test "when superuser creates a new user on the backend,
11
+ the new user should have a membership to the page it was created on (fix for bug #288)" do
12
+ login_as_superuser
13
+ visit_new_user_form
14
+ post_the_new_user_form
15
+ end
16
+
17
+ test "when superuser creates a new superuser on the backend the new superuser does not need to
18
+ be member of any site" do
19
+ login_as_superuser
20
+ visit_new_user_form
21
+ post_the_new_user_form_for_superuser
22
+ end
23
+
24
+ def visit_new_user_form
25
+ visit "/admin/sites/#{@site.id}/users/new"
26
+ renders_template "admin/users/new"
27
+ end
28
+
29
+ def post_the_new_user_form
30
+ fill_in :user_first_name, :with => 'John'
31
+ fill_in :user_last_name, :with => 'Doe'
32
+ fill_in :user_email, :with => 'memberships@test.org'
33
+ fill_in :user_password, :with => 'pass'
34
+ click_button :save
35
+
36
+ user = User.find_by_email('memberships@test.org')
37
+ assert !user.memberships.blank?
38
+ end
39
+
40
+ def post_the_new_user_form_for_superuser
41
+ fill_in :user_first_name, :with => 'John'
42
+ fill_in :user_last_name, :with => 'Superuser'
43
+ fill_in :user_email, :with => 'superusers.memberships@test.org'
44
+ fill_in :user_password, :with => 'pass'
45
+ check :role_superuser
46
+ click_button :save
47
+
48
+ user = User.find_by_email('superusers.memberships@test.org')
49
+ assert user.memberships.empty?
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper' ))
2
+
3
+ module IntegrationTests
4
+ class UserDeletionTest < ActionController::IntegrationTest
5
+ def setup
6
+ super
7
+ @site = use_site! 'site with pages'
8
+ end
9
+
10
+ test "A user deletes his account" do
11
+ # user logs in to the site
12
+ user = login_as_user
13
+
14
+ # TODO
15
+ # there's no user profile page so far
16
+ # visit user_path
17
+ # click_link 'Edit'
18
+ # click_link 'Delete'
19
+
20
+ # user deletes the own profile
21
+ delete user_path
22
+
23
+ # user should not be there anymore
24
+ lambda { User.find(user.id) }.should raise_error(ActiveRecord::RecordNotFound)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,53 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper' ))
2
+
3
+ module IntegrationTests
4
+ class UserLoginTest < ActionController::IntegrationTest
5
+ def setup
6
+ super
7
+ @site = use_site! 'site with pages'
8
+ end
9
+
10
+ test "A verified user logs in with valid credentials" do
11
+ visit '/login'
12
+
13
+ fill_in 'user_email', :with => 'a-user@example.com'
14
+ fill_in 'user_password', :with => 'a password'
15
+ click_button 'login'
16
+
17
+ controller.current_user.should_not be_nil
18
+ controller.current_user.email.should == 'a-user@example.com'
19
+ end
20
+
21
+ test "A verified user logs in with invalid credentials" do
22
+ visit '/login'
23
+ fill_in 'user_email', :with => 'a-user@example.com'
24
+ fill_in 'user_password', :with => 'a wrong password'
25
+ click_button 'login'
26
+
27
+ controller.current_user.should be_nil
28
+ renders_template 'session/new'
29
+ end
30
+
31
+ test "An unverified user logs in with valid credentials" do
32
+ visit '/login'
33
+ fill_in 'user_email', :with => 'an-unverified-user@example.com'
34
+ fill_in 'user_password', :with => 'a password'
35
+ click_button 'login'
36
+
37
+ # FIXME we don't provide any more specific feedback?
38
+ controller.current_user.should be_nil
39
+ renders_template 'session/new'
40
+ end
41
+
42
+ test "An unverified user logs in with invalid credentials" do
43
+ visit '/login'
44
+ fill_in 'user_email', :with => 'an-unverified-user@example.com'
45
+ fill_in 'user_password', :with => 'a wrong password'
46
+ click_button 'login'
47
+
48
+ # FIXME we don't provide any more specific feedback?
49
+ controller.current_user.should be_nil
50
+ renders_template 'session/new'
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper' ))
2
+
3
+ module IntegrationTests
4
+ class UserLoginWithRememberMeTest < ActionController::IntegrationTest
5
+ def setup
6
+ super
7
+ @site = use_site! 'site with pages'
8
+ @user = User.find_by_email('a-superuser@example.com')
9
+ token = @user.assign_token!('remember me')
10
+ cookies[:remember_me] = Rack::Utils.escape("#{@user.id};#{token}")
11
+ cookies[:uid] = @user.id.to_s
12
+ cookies[:uname] = @user.name
13
+ end
14
+
15
+ test "User with remember me cookie does not need to login again" do
16
+ visit '/admin'
17
+ assert_template 'admin/sites/show'
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,64 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper' ))
2
+
3
+ module IntegrationTests
4
+ class UserRegistrationTest < ActionController::IntegrationTest
5
+ def setup
6
+ super
7
+ @site = use_site! 'site with pages'
8
+ end
9
+
10
+ test "User clicks through section frontend section index pages" do
11
+ registers_to_site_membership
12
+ verify_the_email_adress
13
+ check_logged_in
14
+ end
15
+
16
+ def registers_to_site_membership
17
+ visit "/user/new"
18
+ renders_template "user/new"
19
+
20
+ fill_in "user_first_name", :with => 'John'
21
+ fill_in "user_email", :with => 'john-doe@test.com'
22
+ fill_in "user_password", :with => 'password'
23
+ click_button "register"
24
+
25
+ renders_template "user/verification_sent"
26
+
27
+ # user record should exist but not be verified
28
+ john_doe.should_not be_nil
29
+ john_doe.verified?.should be_false
30
+
31
+ # should have sent an email notification
32
+ verification_email.to.should include(john_doe.email)
33
+ end
34
+
35
+ def verify_the_email_adress
36
+ # extract the verification url from the email
37
+ # http://www.example.com/user/verify?token=1%3Bbd69ea84ed49b61623da2c4d74de2936eb0b0229
38
+ verification_email.body =~ /^(http:.*)$/
39
+ visit $1
40
+
41
+ john_doe.reload.verified?.should be_true
42
+ end
43
+
44
+ def check_logged_in
45
+ controller.current_user.should == john_doe
46
+
47
+ session[:uid].should == john_doe.id
48
+ cookies['uid'].should == john_doe.id.to_s
49
+ cookies['uname'].should == CGI.escape(john_doe.name)
50
+ end
51
+
52
+
53
+ def john_doe
54
+ @john_doe ||= User.find_by_email('john-doe@test.com')
55
+ end
56
+
57
+ def verification_email
58
+ @verification_email ||= begin
59
+ ActionMailer::Base.deliveries.should_not be_empty
60
+ ActionMailer::Base.deliveries.last
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../adva_cms/test/test_helper')
@@ -0,0 +1,13 @@
1
+ # FIXME Commented out test! Convert!
2
+ #
3
+ # require File.dirname(__FILE__) + '/../spec_helper'
4
+ #
5
+ # describe UserCell do
6
+ # it "renders" do
7
+ # site = mock('site', :id => 1)
8
+ # section = mock('section', :id => 1, :track_method_calls => nil) # TODO: use real object?
9
+ # controller = mock('controller', :perform_caching => false, :site => site, :section => section)
10
+ # cell = UserCell.new(controller, nil)
11
+ # cell.render_state(:recent).should =~ /recent users/i
12
+ # end
13
+ # end
@@ -0,0 +1,52 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class UsersHelperTest < ActionView::TestCase
4
+ include UsersHelper
5
+
6
+ def setup
7
+ super
8
+
9
+ @user = User.first
10
+ @email = 'email@gravatar.com'
11
+ @md5 = 'eafcd5f6d59e86088dfcf706831b297e'
12
+
13
+ stub(self).request.returns(ActionController::TestRequest.new)
14
+ end
15
+
16
+ # who
17
+ test "#who returns 'You' if the given user is the current user" do
18
+ stub(self).current_user.returns(@user)
19
+ who(@user).should == 'You'
20
+ end
21
+
22
+ test "#who returns the given user's name if the given user is not the current user" do
23
+ stub(self).current_user.returns(nil)
24
+ who(@user).should == @user.name
25
+ end
26
+
27
+ test "#gravatar_img returns an image tag with the class 'avatar' merged to the given options" do
28
+ gravatar_img(@user).should have_tag('img[src^=?][class=?]', 'http://www.gravatar.com', 'avatar')
29
+ end
30
+
31
+ test "#gravatar_img adds the gravatar_url for the given user's email adress" do
32
+ mock(self).gravatar_url(@user.email).returns('gravatar_url')
33
+ gravatar_img(@user)
34
+ end
35
+
36
+ # gravatar_url
37
+ test "#gravatar_url returns a default image url if the given email adress is blank" do
38
+ gravatar_url.should == '/assets/adva_cms/avatar.gif'
39
+ end
40
+
41
+ test "#gravatar_url the resulting gravatar url includes the md5/hexdigested email adress as the gravatar_id" do
42
+ gravatar_url(@email).should =~ /gravatar_id=#{@md5}/
43
+ end
44
+
45
+ test "#gravatar_url the resulting gravatar url includes a size parameter with the given size" do
46
+ gravatar_url(@email, 50).should =~ /size=50/
47
+ end
48
+
49
+ test "#gravatar_url the resulting gravatar url includes a default parameter" do
50
+ gravatar_url(@email).should =~ %r(default=http://test.host/assets/adva_cms/avatar.gif)
51
+ end
52
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class AccountTest < ActiveSupport::TestCase
4
+ def setup
5
+ super
6
+ @user1 = User.find_by_first_name('user1')
7
+ @user2 = User.find_by_first_name('user2')
8
+ @user3 = User.find_by_first_name('user3')
9
+ @user4 = User.find_by_first_name('user4')
10
+
11
+ @account = Account.find_by_name('an account')
12
+ end
13
+
14
+ test 'creation' do
15
+ @account.name.should == 'an account'
16
+ @account.users.should include(@user1)
17
+ @account.users.should include(@user2)
18
+ @account.users.should include(@user3)
19
+ @account.users.should exclude(@user4)
20
+ end
21
+ end
@@ -0,0 +1,54 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class AnonymousTest < ActiveSupport::TestCase
4
+ def setup
5
+ super
6
+ @anonymous = User.anonymous :name => 'John Doe'
7
+ end
8
+
9
+ test 'acts as authenticated user (with single token authentication)' do
10
+ User.should act_as_authenticated_user
11
+ end
12
+
13
+ # VALIDATIONS
14
+
15
+ test 'validates the presence of a name' do
16
+ @anonymous.should validate_presence_of(:first_name)
17
+ end
18
+
19
+ test 'validates the presence of an email' do
20
+ @anonymous.should validate_presence_of(:email)
21
+ end
22
+
23
+ test 'validates the length of the name (3-40 chars)' do
24
+ @anonymous.should validate_length_of(:first_name, :within => 3..40)
25
+ end
26
+
27
+ test 'email format validation succeeds with a valid email address' do
28
+ @anonymous.email = 'valid@email.org'
29
+ @anonymous.should be_valid
30
+ end
31
+
32
+ test 'email format validation fails with an invalid email address' do
33
+ @anonymous.email = 'invalid-email.org'
34
+ @anonymous.should_not be_valid
35
+ end
36
+
37
+ # INSTANCE METHODS
38
+
39
+ test '#has_role? returns true when the passed role is Role::Anonymous' do
40
+ @anonymous.should have_role(:anonymous)
41
+ end
42
+
43
+ test '#has_role? returns false when the passed role is not Role::Anonymous' do
44
+ @anonymous.should_not have_role(:user)
45
+ end
46
+
47
+ test '#anonymous? returns true' do
48
+ @anonymous.should be_anonymous
49
+ end
50
+
51
+ test '#registered? returns false' do
52
+ @anonymous.should_not be_registered
53
+ end
54
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class PasswordMailerTest < ActiveSupport::TestCase
4
+
5
+ test "observes events" do
6
+ Event.observers.should include('PasswordMailer')
7
+ end
8
+
9
+ test "implements #handle_user_password_reset_requested!" do
10
+ PasswordMailer.should respond_to(:handle_user_password_reset_requested!)
11
+ end
12
+
13
+ test "implements #handle_user_password_updated!" do
14
+ PasswordMailer.should respond_to(:handle_user_password_updated!)
15
+ end
16
+
17
+ test "receives #handle_user_password_reset_requested! when a :user_password_reset_requested event is triggered" do
18
+ mock(PasswordMailer).handle_user_password_reset_requested!.with(anything)
19
+ Event.trigger(:user_password_reset_requested, User.new, self)
20
+ end
21
+
22
+ test "receives #handle_user_password_updated! when a :user_password_updated event is triggered" do
23
+ mock(PasswordMailer).handle_user_password_updated!.with(anything)
24
+ Event.trigger(:user_password_updated, User.new, self)
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class UserMailerTest < ActiveSupport::TestCase
4
+ test "observes events" do
5
+ Event.observers.should include('UserMailer')
6
+ end
7
+
8
+ test "implements #handle_user_registered!" do
9
+ UserMailer.should respond_to(:handle_user_registered!)
10
+ end
11
+
12
+ test "receives #handle_user_registered! when a :user_registered event is triggered" do
13
+ mock(UserMailer).handle_user_registered!.with(anything)
14
+ Event.trigger(:user_registered, User.new, self)
15
+ end
16
+ end
@@ -0,0 +1,173 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class UserTest < ActiveSupport::TestCase
4
+ def setup
5
+ super
6
+ @user = User.find_by_first_name('a user')
7
+ @credentials = { :email => @user.email, :password => 'a password' }
8
+ @valid_user_params = { :email => 'test@example.org', :password => 'test', :first_name => 'name' }
9
+ end
10
+
11
+ test 'acts as authenticated user' do
12
+ User.should act_as_authenticated_user
13
+ end
14
+
15
+ # ASSOCIATIONS
16
+
17
+ test "has many sites" do
18
+ @user.should have_many(:sites)
19
+ end
20
+
21
+ test "has many memberships" do
22
+ @user.should have_many(:memberships)
23
+ end
24
+
25
+ test "has many roles" do
26
+ @user.should have_many(:roles)
27
+ end
28
+
29
+ # VALIDATIONS
30
+
31
+ test "validates the presence of a first name" do
32
+ @user.should validate_presence_of(:first_name)
33
+ end
34
+
35
+ test "validates the presence of an email adress" do
36
+ @user.should validate_presence_of(:email)
37
+ end
38
+
39
+ test "validates the uniqueness of the email" do
40
+ @user.should validate_uniqueness_of(:email)
41
+ end
42
+
43
+ test "validates the presence of a password if the password is required" do
44
+ @user.should validate_presence_of(:password, :if => :password_required?)
45
+ end
46
+
47
+ test "validates the length of the last name" do
48
+ @user.should validate_length_of(:last_name, :within => 0..40)
49
+ end
50
+
51
+ test "creates a user with blank last name" do
52
+ @user.last_name = ''
53
+ @user.save.should be_true
54
+ end
55
+
56
+ test "validates the length of the first name" do
57
+ @user.should validate_length_of(:first_name, :within => 1..40)
58
+ end
59
+
60
+ test "validates the length of the password" do
61
+ @user.should validate_length_of(:password, :within => 4..40)
62
+ end
63
+
64
+ # CLASS METHODS
65
+
66
+ # User.authenticate
67
+ test 'User.authenticate returns the user if user#authenticate succeeds' do
68
+ User.authenticate(@credentials).should == @user
69
+ end
70
+
71
+ test 'User.authenticate returns false if user#authenticate fails' do
72
+ @credentials[:email] = 'does_not_exist@email.org'
73
+ User.authenticate(@credentials).should be_false
74
+ end
75
+
76
+ test 'User.authenticate returns false if no user with the given email exists' do
77
+ @credentials[:password] = 'wrong password'
78
+ User.authenticate(@credentials).should be_false
79
+ end
80
+
81
+ # User.admins_and_superusers
82
+ test 'User.admins_and_superusers returns all site admins and superusers' do
83
+ admin = User.find_by_first_name('an admin')
84
+ superuser = User.find_by_first_name('a superuser')
85
+
86
+ result = User.admins_and_superusers
87
+ result.should include(admin)
88
+ result.should include(superuser)
89
+ # result.size.should == 2
90
+ end
91
+
92
+ # User.create_superuser
93
+ test 'User.create_superuser defaults :first_name to the name part of the email' do
94
+ user = User.create_superuser(:email => 'first.name@example.com')
95
+ user.first_name == 'first.name'
96
+ end
97
+
98
+ test 'User.create_superuser uses default values for email and password' do
99
+ user = User.create_superuser(:email => nil, :password => nil, :first_name => nil)
100
+ user.email.should == 'admin@example.org'
101
+ user.password.should == 'admin'
102
+ end
103
+
104
+ test 'User.create_superuser uses params values if given' do
105
+ user = User.create_superuser(@valid_user_params)
106
+ user.email.should == 'test@example.org'
107
+ user.password.should == 'test'
108
+ user.first_name == 'name'
109
+ end
110
+
111
+ test 'User.create_superuser verifies the user' do
112
+ user = User.create_superuser(@valid_user_params)
113
+ user.verified?.should be_true
114
+ end
115
+
116
+ test 'User.create_superuser saves the user' do
117
+ user = User.create_superuser(@valid_user_params)
118
+ user.new_record?.should be_false
119
+ end
120
+
121
+ test 'assigns the password hash' do
122
+ user = User.create_superuser(@valid_user_params)
123
+ user.password_hash.should_not be_blank
124
+ user.password_salt.should_not be_blank
125
+ end
126
+
127
+ # INSTANCE METHODS
128
+
129
+ test '#verify! sets the verified_at timestamp and saves the user' do
130
+ @user.update_attributes(:verified_at => nil)
131
+ @user.verify!
132
+ @user.reload.verified_at.should_not be_nil
133
+ end
134
+
135
+ # test '#restore! restores the user record' do
136
+ # @user.deleted_at = @time_now
137
+ # @user.should_receive(:update_attributes).with :deleted_at => nil
138
+ # @user.restore!
139
+ # end
140
+
141
+ test '#anonymous? returns true when anonymous is true' do
142
+ User.new(:anonymous => true).anonymous?.should be_true
143
+ User.new.anonymous?.should be_false
144
+ end
145
+
146
+ # registered?
147
+ test '#registered? returns true when the record is not new' do
148
+ @user.registered?.should be_true
149
+ User.new.registered?.should be_false
150
+ end
151
+
152
+ test '#to_s returns the name' do # FIXME hu? where's that used?
153
+ @user.to_s.should == @user.name
154
+ end
155
+
156
+ test "#homepage returns the http://homepage is homepage is set to 'homepage'" do
157
+ @user.homepage ='homepage'
158
+ @user.homepage.should == 'http://homepage'
159
+ end
160
+
161
+ test "#homepage returns the http://homepage is homepage is set to 'http://homepage'" do
162
+ @user.homepage ='http://homepage'
163
+ @user.homepage.should == 'http://homepage'
164
+ end
165
+
166
+ test "#homepage returns nil if homepage is not set" do
167
+ @user.homepage.should be_nil
168
+ end
169
+
170
+ test "#email_with_name returns formatted string to use with email headers" do
171
+ @user.email_with_name.should == "a user <a-user@example.com>"
172
+ end
173
+ end