· 8 years ago · Jun 07, 2018, 02:38 AM
1require File.dirname(__FILE__) + '/../test_helper'
2
3class UserTest < ActiveSupport::TestCase
4
5 context "A user, when signing up, " do
6 setup do
7 @user = Factory(:user, :password => "password123", :password_confirmation => "password123")
8 end
9
10 should_have_many :pages
11
12 should_validate_presence_of :login, :message => I18n.t(:empty_login)
13 should_validate_uniqueness_of :login, :message => I18n.t(:existing_login)
14 should_ensure_length_in_range :login, (3..40), :short_message => I18n.t(:too_short_login), :long_message => I18n.t(:too_long_login)
15 should_not_allow_values_for :login, " ", "*&%{}[]?\\", :message => I18n.t(:invalid_login)
16 should_allow_values_for :login, "a@b.", "dfgAFGKDSFJL"
17
18 should_validate_presence_of :email, :message => I18n.t(:empty_email)
19 should_validate_uniqueness_of :email, :message => I18n.t(:existing_email)
20 should_ensure_length_in_range :email, (6..100), :short_message => I18n.t(:too_short_email), :long_message => I18n.t(:too_long_email)
21 should_not_allow_values_for :email, "patrikjira at gmail.com", "papricek@seznam", :message => I18n.t(:invalid_email)
22 should_allow_values_for :email, "patrikjira@gmail.com", "papricek@seznam.cz", "Patrik.Jira@tn.cz"
23
24 should_not_allow_mass_assignment_of :salt, :encrypted_password, :remember_token, :remember_token_expires_at
25 end
26
27 context "A user without crypted password" do
28 setup do
29 @user = Factory.build(:user, :password => "password123", :password_confirmation => "password123")
30 end
31 should_validate_presence_of :password, :message => I18n.t(:empty_password)
32 should_validate_presence_of :password_confirmation, :message => I18n.t(:empty_password_confirmation)
33 end
34
35 context "A new (unactivated) user" do
36 setup do
37 @user = create_user;
38 @user.register!
39 end
40
41 should "be created" do
42 assert_difference 'User.count' do
43 user = create_user
44 assert !user.new_record?, "#{user.errors.full_messages.to_sentence}"
45 end
46 end
47
48 should "initialize its activation code upon creation" do
49 @user.reload
50 assert_not_nil @user.activation_code
51 end
52
53 should "be created and start in pending state" do
54 @user.reload
55 assert @user.pending?
56 end
57 end
58
59 context "An existing (activated) user" do
60 setup do
61 @user = Factory(:quentin)
62 end
63
64 should "reset password" do
65 @user.update_attributes(:password => 'new password', :password_confirmation => 'new password')
66 assert_equal @user, User.authenticate(@user.login, 'new password')
67 end
68
69 should "not rehash password" do
70 @user.update_attributes(:password => 'new password', :password_confirmation => 'new password')
71 assert_equal @user, User.authenticate(@user.login, 'new password')
72 end
73
74 should "be authenticated" do
75 assert_equal @user, User.authenticate(@user.login, 'monkey')
76 end
77
78 should "set remember token" do
79 @user.remember_me
80 assert_not_nil @user.remember_token
81 assert_not_nil @user.remember_token_expires_at
82 end
83
84
85 should "unset remember token" do
86 @user.remember_me
87 assert_not_nil @user.remember_token
88 @user.forget_me
89 assert_nil @user.remember_token
90 end
91
92 should "be remembered for one week" do
93 before = 1.week.from_now.utc
94 @user.remember_me_for 1.week
95 after = 1.week.from_now.utc
96 assert_not_nil @user.remember_token
97 assert_not_nil @user.remember_token_expires_at
98 assert @user.remember_token_expires_at.between?(before, after)
99 end
100
101 should "be remembered until one week" do
102 time = 1.week.from_now.utc
103 @user.remember_me_until time
104 assert_not_nil @user.remember_token
105 assert_not_nil @user.remember_token_expires_at
106 assert_equal @user.remember_token_expires_at, time
107 end
108
109 should "be remembered default two week" do
110 before = 2.weeks.from_now.utc
111 @user.remember_me
112 after = 2.weeks.from_now.utc
113 assert_not_nil @user.remember_token
114 assert_not_nil @user.remember_token_expires_at
115 assert @user.remember_token_expires_at.between?(before, after)
116 end
117
118 should "be registered when passive" do
119 user = Factory.build(:user, :password => nil, :password_confirmation => nil)
120 assert user.passive?
121 user.update_attributes(:password => 'some password', :password_confirmation => 'some password')
122 user.register!
123 assert user.pending?
124 end
125
126 should "be suspended" do
127 @user.suspend!
128 assert @user.suspended?
129 end
130
131 should "not authenticate when suspended" do
132 @user.suspend!
133 assert_not_equal @user, User.authenticate('quentin', 'test')
134 end
135
136 should "be unsuspended to active state" do
137 @user.suspend!
138 assert @user.suspended?
139 @user.unsuspend!
140 assert @user.active?
141 end
142
143 should "be unsuspended with nil activation code and activated to passive state" do
144 @user.suspend!
145 User.update_all :activation_code => nil, :activated_at => nil
146 assert @user.suspended?
147 @user.reload.unsuspend!
148 assert @user.passive?
149 end
150
151 should "be unsuspended with activation code and nil activated_at to pending state" do
152 @user.suspend!
153 User.update_all :activation_code => 'foo-bar', :activated_at => nil
154 assert @user.suspended?
155 @user.reload.unsuspend!
156 assert @user.pending?
157 end
158
159 should "be deleted" do
160 assert_nil @user.deleted_at
161 @user.delete!
162 assert_not_nil @user.deleted_at
163 assert @user.deleted?
164 end
165 end
166
167 protected
168 def create_user(options = {})
169 Factory(:user, {:password => "password123", :password_confirmation => "password123"}.merge(options))
170 end
171
172end