devise 1.1.pre4 → 1.1.rc0

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 (122) hide show
  1. data/CHANGELOG.rdoc +31 -2
  2. data/Gemfile +15 -6
  3. data/README.rdoc +12 -16
  4. data/Rakefile +2 -2
  5. data/TODO +2 -1
  6. data/app/controllers/devise/confirmations_controller.rb +1 -1
  7. data/app/controllers/devise/passwords_controller.rb +2 -3
  8. data/app/controllers/devise/registrations_controller.rb +5 -5
  9. data/app/controllers/devise/sessions_controller.rb +5 -27
  10. data/app/controllers/devise/unlocks_controller.rb +9 -1
  11. data/app/models/devise/mailer.rb +17 -11
  12. data/app/views/devise/confirmations/new.html.erb +1 -1
  13. data/app/views/devise/passwords/edit.html.erb +1 -1
  14. data/app/views/devise/passwords/new.html.erb +1 -1
  15. data/app/views/devise/registrations/edit.html.erb +2 -2
  16. data/app/views/devise/registrations/new.html.erb +2 -2
  17. data/app/views/devise/sessions/new.html.erb +2 -2
  18. data/app/views/devise/shared/_links.erb +5 -5
  19. data/app/views/devise/unlocks/new.html.erb +1 -1
  20. data/config/locales/en.yml +4 -9
  21. data/lib/devise.rb +83 -42
  22. data/lib/devise/controllers/helpers.rb +6 -18
  23. data/lib/devise/controllers/internal_helpers.rb +11 -12
  24. data/lib/devise/controllers/scoped_views.rb +2 -2
  25. data/lib/devise/controllers/url_helpers.rb +1 -1
  26. data/lib/devise/failure_app.rb +56 -16
  27. data/lib/devise/hooks/activatable.rb +18 -6
  28. data/lib/devise/hooks/rememberable.rb +36 -27
  29. data/lib/devise/hooks/timeoutable.rb +1 -1
  30. data/lib/devise/hooks/trackable.rb +4 -2
  31. data/lib/devise/mapping.rb +19 -14
  32. data/lib/devise/models.rb +12 -3
  33. data/lib/devise/models/authenticatable.rb +19 -95
  34. data/lib/devise/models/confirmable.rb +14 -20
  35. data/lib/devise/models/database_authenticatable.rb +99 -0
  36. data/lib/devise/models/lockable.rb +53 -39
  37. data/lib/devise/models/recoverable.rb +3 -3
  38. data/lib/devise/models/rememberable.rb +5 -10
  39. data/lib/devise/models/token_authenticatable.rb +18 -25
  40. data/lib/devise/models/validatable.rb +14 -9
  41. data/lib/devise/modules.rb +7 -8
  42. data/lib/devise/orm/active_record.rb +1 -1
  43. data/lib/devise/orm/data_mapper.rb +20 -7
  44. data/lib/devise/orm/mongoid.rb +40 -0
  45. data/lib/devise/rails.rb +26 -3
  46. data/lib/devise/rails/routes.rb +18 -16
  47. data/lib/devise/rails/warden_compat.rb +2 -2
  48. data/lib/devise/schema.rb +45 -18
  49. data/lib/devise/strategies/authenticatable.rb +92 -21
  50. data/lib/devise/strategies/base.rb +6 -3
  51. data/lib/devise/strategies/database_authenticatable.rb +20 -0
  52. data/lib/devise/strategies/rememberable.rb +10 -6
  53. data/lib/devise/strategies/token_authenticatable.rb +28 -19
  54. data/lib/devise/test_helpers.rb +5 -1
  55. data/lib/devise/version.rb +1 -1
  56. data/lib/generators/devise/devise_generator.rb +15 -5
  57. data/lib/generators/devise/templates/migration.rb +2 -2
  58. data/lib/generators/devise_install/templates/devise.rb +37 -16
  59. data/lib/generators/devise_views/devise_views_generator.rb +51 -4
  60. data/test/controllers/helpers_test.rb +16 -8
  61. data/test/controllers/internal_helpers_test.rb +6 -1
  62. data/test/controllers/url_helpers_test.rb +10 -10
  63. data/test/devise_test.rb +13 -17
  64. data/test/encryptors_test.rb +2 -0
  65. data/test/failure_app_test.rb +72 -23
  66. data/test/integration/confirmable_test.rb +4 -4
  67. data/test/integration/{authenticatable_test.rb → database_authenticatable_test.rb} +35 -17
  68. data/test/integration/http_authenticatable_test.rb +3 -3
  69. data/test/integration/lockable_test.rb +28 -8
  70. data/test/integration/recoverable_test.rb +3 -3
  71. data/test/integration/registerable_test.rb +6 -4
  72. data/test/integration/rememberable_test.rb +11 -4
  73. data/test/integration/timeoutable_test.rb +4 -4
  74. data/test/integration/token_authenticatable_test.rb +46 -10
  75. data/test/integration/trackable_test.rb +2 -2
  76. data/test/mailers/confirmation_instructions_test.rb +5 -5
  77. data/test/mailers/reset_password_instructions_test.rb +5 -5
  78. data/test/mailers/unlock_instructions_test.rb +5 -5
  79. data/test/mapping_test.rb +15 -14
  80. data/test/models/confirmable_test.rb +9 -32
  81. data/test/models/{authenticatable_test.rb → database_authenticatable_test.rb} +2 -34
  82. data/test/models/lockable_test.rb +48 -66
  83. data/test/models/recoverable_test.rb +8 -8
  84. data/test/models/rememberable_test.rb +6 -28
  85. data/test/models/timeoutable_test.rb +1 -1
  86. data/test/models/token_authenticatable_test.rb +1 -8
  87. data/test/models/trackable_test.rb +1 -1
  88. data/test/models/validatable_test.rb +2 -2
  89. data/test/models_test.rb +16 -2
  90. data/test/orm/active_record.rb +1 -22
  91. data/test/orm/data_mapper.rb +1 -0
  92. data/test/orm/mongoid.rb +10 -0
  93. data/test/rails_app/app/active_record/admin.rb +1 -5
  94. data/test/rails_app/app/controllers/application_controller.rb +2 -0
  95. data/test/rails_app/app/controllers/sessions_controller.rb +1 -1
  96. data/test/rails_app/app/data_mapper/admin.rb +13 -0
  97. data/test/rails_app/app/data_mapper/user.rb +24 -0
  98. data/test/rails_app/app/mongoid/admin.rb +15 -0
  99. data/test/rails_app/app/mongoid/user.rb +21 -0
  100. data/test/rails_app/config/application.rb +10 -5
  101. data/test/rails_app/config/boot.rb +5 -1
  102. data/test/rails_app/config/initializers/devise.rb +1 -1
  103. data/test/rails_app/config/routes.rb +4 -1
  104. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +27 -0
  105. data/test/rails_app/db/schema.rb +86 -0
  106. data/test/routes_test.rb +3 -3
  107. data/test/support/assertions.rb +2 -0
  108. data/test/support/helpers.rb +2 -0
  109. data/test/support/integration.rb +4 -7
  110. data/test/support/webrat/integrations/rails.rb +2 -1
  111. data/test/test_helper.rb +5 -2
  112. data/test/test_helpers_test.rb +4 -4
  113. metadata +36 -21
  114. data/lib/devise/models/http_authenticatable.rb +0 -19
  115. data/lib/devise/orm/mongo_mapper.rb +0 -49
  116. data/lib/devise/strategies/http_authenticatable.rb +0 -47
  117. data/test/models/http_authenticatable_test.rb +0 -19
  118. data/test/orm/mongo_mapper.rb +0 -12
  119. data/test/rails_app/app/mongo_mapper/admin.rb +0 -10
  120. data/test/rails_app/app/mongo_mapper/user.rb +0 -11
  121. data/test/rails_app/config/initializers/cookie_verification_secret.rb +0 -7
  122. data/test/rails_app/config/initializers/session_store.rb +0 -15
@@ -1,7 +1,7 @@
1
- require 'test/test_helper'
1
+ require 'test_helper'
2
2
  require 'digest/sha1'
3
3
 
4
- class AuthenticatableTest < ActiveSupport::TestCase
4
+ class DatabaseAuthenticatableTest < ActiveSupport::TestCase
5
5
 
6
6
  def encrypt_password(user, pepper=User.pepper, stretches=User.stretches, encryptor=::Devise::Encryptors::Sha1)
7
7
  encryptor.digest('123456', stretches, user.password_salt, pepper)
@@ -98,38 +98,6 @@ class AuthenticatableTest < ActiveSupport::TestCase
98
98
  assert_not user.valid_password?('654321')
99
99
  end
100
100
 
101
- test 'should authenticate a valid user with email and password and return it' do
102
- user = create_user
103
- user.confirm!
104
- authenticated_user = User.authenticate(:email => user.email, :password => user.password)
105
- assert_equal authenticated_user, user
106
- end
107
-
108
- test 'should return nil when authenticating an invalid user by email' do
109
- user = create_user
110
- authenticated_user = User.authenticate(:email => 'another.email@email.com', :password => user.password)
111
- assert_nil authenticated_user
112
- end
113
-
114
- test 'should return nil when authenticating an invalid user by password' do
115
- user = create_user
116
- authenticated_user = User.authenticate(:email => user.email, :password => 'another_password')
117
- assert_nil authenticated_user
118
- end
119
-
120
- test 'should use authentication keys to retrieve users' do
121
- swap Devise, :authentication_keys => [:username] do
122
- user = create_user
123
- assert_nil User.authenticate(:email => user.email, :password => user.password)
124
- assert_not_nil User.authenticate(:username => user.username, :password => user.password)
125
- end
126
- end
127
-
128
- test 'should allow overwriting find for authentication conditions' do
129
- admin = Admin.create!(valid_attributes)
130
- assert_not_nil Admin.authenticate(:email => admin.email, :password => admin.password)
131
- end
132
-
133
101
  test 'should respond to current password' do
134
102
  assert new_user.respond_to?(:current_password)
135
103
  end
@@ -1,64 +1,64 @@
1
- require 'test/test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class LockableTest < ActiveSupport::TestCase
4
-
5
4
  def setup
6
5
  setup_mailer
7
6
  end
8
7
 
9
- test "should increment failed attempts on unsuccessful authentication" do
8
+ test "should respect maximum attempts configuration" do
10
9
  user = create_user
11
- assert_equal 0, user.failed_attempts
12
-
13
- authenticated_user = User.authenticate(:email => user.email, :password => "anotherpassword")
14
- assert_equal 1, user.reload.failed_attempts
10
+ swap Devise, :maximum_attempts => 2 do
11
+ 3.times { user.valid_for_authentication?{ false } }
12
+ assert user.reload.access_locked?
13
+ end
15
14
  end
16
15
 
17
- test "should lock account base on maximum_attempts" do
16
+ test "should clear failed_attempts on successfull validation" do
18
17
  user = create_user
19
- attempts = Devise.maximum_attempts + 1
20
- attempts.times { authenticated_user = User.authenticate(:email => user.email, :password => "anotherpassword") }
21
- assert user.reload.locked?
18
+ user.valid_for_authentication?{ false }
19
+ assert_equal 1, user.reload.failed_attempts
20
+ user.valid_for_authentication?{ true }
21
+ assert_equal 0, user.reload.failed_attempts
22
22
  end
23
23
 
24
- test "should respect maximum attempts configuration" do
24
+ test "should not touch failed_attempts if lock_strategy is none" do
25
25
  user = create_user
26
- swap Devise, :maximum_attempts => 2 do
27
- 3.times { authenticated_user = User.authenticate(:email => user.email, :password => "anotherpassword") }
28
- assert user.reload.locked?
26
+ swap Devise, :lock_strategy => :none, :maximum_attempts => 2 do
27
+ 3.times { user.valid_for_authentication?{ false } }
28
+ assert !user.access_locked?
29
+ assert_equal 0, user.failed_attempts
29
30
  end
30
31
  end
31
32
 
32
- test "should clear failed_attempts on successfull sign in" do
33
+ test 'should be valid for authentication with a unlocked user' do
33
34
  user = create_user
34
- User.authenticate(:email => user.email, :password => "anotherpassword")
35
- assert_equal 1, user.reload.failed_attempts
36
- User.authenticate(:email => user.email, :password => "123456")
37
- assert_equal 0, user.reload.failed_attempts
35
+ user.lock_access!
36
+ user.unlock_access!
37
+ assert user.valid_for_authentication?{ true }
38
38
  end
39
39
 
40
- test "should verify wheter a user is locked or not" do
40
+ test "should verify whether a user is locked or not" do
41
41
  user = create_user
42
- assert_not user.locked?
43
- user.lock!
44
- assert user.locked?
42
+ assert_not user.access_locked?
43
+ user.lock_access!
44
+ assert user.access_locked?
45
45
  end
46
46
 
47
47
  test "active? should be the opposite of locked?" do
48
48
  user = create_user
49
49
  user.confirm!
50
50
  assert user.active?
51
- user.lock!
51
+ user.lock_access!
52
52
  assert_not user.active?
53
53
  end
54
54
 
55
55
  test "should unlock an user by cleaning locked_at, falied_attempts and unlock_token" do
56
56
  user = create_user
57
- user.lock!
57
+ user.lock_access!
58
58
  assert_not_nil user.reload.locked_at
59
59
  assert_not_nil user.reload.unlock_token
60
60
 
61
- user.unlock!
61
+ user.unlock_access!
62
62
  assert_nil user.reload.locked_at
63
63
  assert_nil user.reload.unlock_token
64
64
  assert 0, user.reload.failed_attempts
@@ -66,12 +66,12 @@ class LockableTest < ActiveSupport::TestCase
66
66
 
67
67
  test 'should not unlock an unlocked user' do
68
68
  user = create_user
69
- assert_not user.unlock!
69
+ assert_not user.unlock_access!
70
70
  assert_match "was not locked", user.errors[:email].join
71
71
  end
72
72
 
73
73
  test "new user should not be locked and should have zero failed_attempts" do
74
- assert_not new_user.locked?
74
+ assert_not new_user.access_locked?
75
75
  assert_equal 0, create_user.failed_attempts
76
76
  end
77
77
 
@@ -79,10 +79,10 @@ class LockableTest < ActiveSupport::TestCase
79
79
  swap Devise, :unlock_in => 3.hours do
80
80
  user = new_user
81
81
  user.locked_at = 2.hours.ago
82
- assert user.locked?
82
+ assert user.access_locked?
83
83
 
84
84
  Devise.unlock_in = 1.hour
85
- assert_not user.locked?
85
+ assert_not user.access_locked?
86
86
  end
87
87
  end
88
88
 
@@ -90,32 +90,22 @@ class LockableTest < ActiveSupport::TestCase
90
90
  swap Devise, :unlock_strategy => :email do
91
91
  user = new_user
92
92
  user.locked_at = 2.hours.ago
93
- assert user.locked?
93
+ assert user.access_locked?
94
94
  end
95
95
  end
96
96
 
97
97
  test "should set unlock_token when locking" do
98
98
  user = create_user
99
99
  assert_nil user.unlock_token
100
- user.lock!
100
+ user.lock_access!
101
101
  assert_not_nil user.unlock_token
102
102
  end
103
103
 
104
- test 'should not regenerate unlock token if it already exists' do
105
- user = create_user
106
- user.lock!
107
- 3.times do
108
- token = user.unlock_token
109
- user.resend_unlock!
110
- assert_equal token, user.unlock_token
111
- end
112
- end
113
-
114
104
  test "should never generate the same unlock token for different users" do
115
105
  unlock_tokens = []
116
106
  3.times do
117
107
  user = create_user
118
- user.lock!
108
+ user.lock_access!
119
109
  token = user.unlock_token
120
110
  assert !unlock_tokens.include?(token)
121
111
  unlock_tokens << token
@@ -125,7 +115,7 @@ class LockableTest < ActiveSupport::TestCase
125
115
  test "should not generate unlock_token when :email is not an unlock strategy" do
126
116
  swap Devise, :unlock_strategy => :time do
127
117
  user = create_user
128
- user.lock!
118
+ user.lock_access!
129
119
  assert_nil user.unlock_token
130
120
  end
131
121
  end
@@ -134,7 +124,7 @@ class LockableTest < ActiveSupport::TestCase
134
124
  swap Devise, :unlock_strategy => :email do
135
125
  user = create_user
136
126
  assert_email_sent do
137
- user.lock!
127
+ user.lock_access!
138
128
  end
139
129
  end
140
130
  end
@@ -143,49 +133,41 @@ class LockableTest < ActiveSupport::TestCase
143
133
  swap Devise, :unlock_strategy => :time do
144
134
  user = create_user
145
135
  assert_email_not_sent do
146
- user.lock!
136
+ user.lock_access!
147
137
  end
148
138
  end
149
139
  end
150
140
 
151
141
  test 'should find and unlock an user automatically' do
152
142
  user = create_user
153
- user.lock!
154
- locked_user = User.unlock!(:unlock_token => user.unlock_token)
143
+ user.lock_access!
144
+ locked_user = User.unlock_access_by_token(user.unlock_token)
155
145
  assert_equal locked_user, user
156
- assert_not user.reload.locked?
146
+ assert_not user.reload.access_locked?
157
147
  end
158
148
 
159
149
  test 'should return a new record with errors when a invalid token is given' do
160
- locked_user = User.unlock!(:unlock_token => 'invalid_token')
161
- assert locked_user.new_record?
150
+ locked_user = User.unlock_access_by_token('invalid_token')
151
+ assert_not locked_user.persisted?
162
152
  assert_equal "is invalid", locked_user.errors[:unlock_token].join
163
153
  end
164
154
 
165
155
  test 'should return a new record with errors when a blank token is given' do
166
- locked_user = User.unlock!(:unlock_token => '')
167
- assert locked_user.new_record?
156
+ locked_user = User.unlock_access_by_token('')
157
+ assert_not locked_user.persisted?
168
158
  assert_equal "can't be blank", locked_user.errors[:unlock_token].join
169
159
  end
170
160
 
171
- test 'should authenticate a unlocked user' do
172
- user = create_user
173
- user.lock!
174
- user.unlock!
175
- authenticated_user = User.authenticate(:email => user.email, :password => user.password)
176
- assert_equal authenticated_user, user
177
- end
178
-
179
161
  test 'should find a user to send unlock instructions' do
180
162
  user = create_user
181
- user.lock!
163
+ user.lock_access!
182
164
  unlock_user = User.send_unlock_instructions(:email => user.email)
183
165
  assert_equal unlock_user, user
184
166
  end
185
167
 
186
168
  test 'should return a new user if no email was found' do
187
169
  unlock_user = User.send_unlock_instructions(:email => "invalid@email.com")
188
- assert unlock_user.new_record?
170
+ assert_not unlock_user.persisted?
189
171
  end
190
172
 
191
173
  test 'should add error to new user email if no email was found' do
@@ -195,8 +177,8 @@ class LockableTest < ActiveSupport::TestCase
195
177
 
196
178
  test 'should not be able to send instructions if the user is not locked' do
197
179
  user = create_user
198
- assert_not user.resend_unlock!
199
- assert_not user.locked?
180
+ assert_not user.resend_unlock_token
181
+ assert_not user.access_locked?
200
182
  assert_equal 'was not locked', user.errors[:email].join
201
183
  end
202
184
 
@@ -1,4 +1,4 @@
1
- require 'test/test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class RecoverableTest < ActiveSupport::TestCase
4
4
 
@@ -82,7 +82,7 @@ class RecoverableTest < ActiveSupport::TestCase
82
82
 
83
83
  test 'should return a new record with errors if user was not found by e-mail' do
84
84
  reset_password_user = User.send_reset_password_instructions(:email => "invalid@email.com")
85
- assert reset_password_user.new_record?
85
+ assert_not reset_password_user.persisted?
86
86
  assert_equal "not found", reset_password_user.errors[:email].join
87
87
  end
88
88
 
@@ -104,19 +104,19 @@ class RecoverableTest < ActiveSupport::TestCase
104
104
  user = create_user
105
105
  user.send :generate_reset_password_token!
106
106
 
107
- reset_password_user = User.reset_password!(:reset_password_token => user.reset_password_token)
107
+ reset_password_user = User.reset_password_by_token(:reset_password_token => user.reset_password_token)
108
108
  assert_equal reset_password_user, user
109
109
  end
110
110
 
111
111
  test 'should a new record with errors if no reset_password_token is found' do
112
- reset_password_user = User.reset_password!(:reset_password_token => 'invalid_token')
113
- assert reset_password_user.new_record?
112
+ reset_password_user = User.reset_password_by_token(:reset_password_token => 'invalid_token')
113
+ assert_not reset_password_user.persisted?
114
114
  assert_equal "is invalid", reset_password_user.errors[:reset_password_token].join
115
115
  end
116
116
 
117
117
  test 'should a new record with errors if reset_password_token is blank' do
118
- reset_password_user = User.reset_password!(:reset_password_token => '')
119
- assert reset_password_user.new_record?
118
+ reset_password_user = User.reset_password_by_token(:reset_password_token => '')
119
+ assert_not reset_password_user.persisted?
120
120
  assert_match "can't be blank", reset_password_user.errors[:reset_password_token].join
121
121
  end
122
122
 
@@ -125,7 +125,7 @@ class RecoverableTest < ActiveSupport::TestCase
125
125
  old_password = user.password
126
126
  user.send :generate_reset_password_token!
127
127
 
128
- reset_password_user = User.reset_password!(
128
+ reset_password_user = User.reset_password_by_token(
129
129
  :reset_password_token => user.reset_password_token,
130
130
  :password => 'new_password',
131
131
  :password_confirmation => 'new_password'
@@ -1,4 +1,4 @@
1
- require 'test/test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class RememberableTest < ActiveSupport::TestCase
4
4
  test 'should respond to remember_me attribute' do
@@ -39,47 +39,25 @@ class RememberableTest < ActiveSupport::TestCase
39
39
  user.forget_me!
40
40
  end
41
41
 
42
- test 'valid remember token' do
43
- user = create_user
44
- assert_not user.valid_remember_token?(user.remember_token)
45
- user.remember_me!
46
- assert user.valid_remember_token?(user.remember_token)
47
- user.forget_me!
48
- assert_not user.valid_remember_token?(user.remember_token)
49
- end
50
-
51
- test 'valid remember token should also verify if remember is not expired' do
52
- swap Devise, :remember_for => 1.day do
53
- user = create_user
54
- user.remember_me!
55
- user.remember_created_at = 3.days.ago
56
- user.save
57
- assert_not user.valid_remember_token?(user.remember_token)
58
- end
59
- end
60
-
61
42
  test 'serialize into cookie' do
62
43
  user = create_user
63
44
  user.remember_me!
64
- assert_equal "#{user.id}::#{user.remember_token}", User.serialize_into_cookie(user)
45
+ assert_equal [user.id, user.remember_token], User.serialize_into_cookie(user)
65
46
  end
66
47
 
67
48
  test 'serialize from cookie' do
68
49
  user = create_user
69
50
  user.remember_me!
70
- assert_equal user, User.serialize_from_cookie("#{user.id}::#{user.remember_token}")
51
+ assert_equal user, User.serialize_from_cookie(user.id, user.remember_token)
71
52
  end
72
53
 
73
- # MongoMapper cries if an invalid ID is given, so this does not need to be tested
74
- unless DEVISE_ORM == :mongo_mapper
75
- test 'serialize should return nil if no user is found' do
76
- assert_nil User.serialize_from_cookie('0::123')
77
- end
54
+ test 'serialize should return nil if no user is found' do
55
+ assert_nil User.serialize_from_cookie(0, "123")
78
56
  end
79
57
 
80
58
  test 'remember me return nil if is a valid user with invalid token' do
81
59
  user = create_user
82
- assert_nil User.serialize_from_cookie("#{user.id}::#{user.remember_token}123")
60
+ assert_nil User.serialize_from_cookie(user.id, "123")
83
61
  end
84
62
 
85
63
  test 'remember for should fallback to devise remember for default configuration' do
@@ -1,4 +1,4 @@
1
- require 'test/test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class TimeoutableTest < ActiveSupport::TestCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'test/test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class TokenAuthenticatableTest < ActiveSupport::TestCase
4
4
 
@@ -25,13 +25,6 @@ class TokenAuthenticatableTest < ActiveSupport::TestCase
25
25
  assert_equal previous_token, user.authentication_token
26
26
  end
27
27
 
28
- test 'should test for a valid authentication token' do
29
- User.expects(:authentication_token).returns(VALID_AUTHENTICATION_TOKEN)
30
- user = create_user
31
- assert user.valid_authentication_token?(VALID_AUTHENTICATION_TOKEN)
32
- assert_not user.valid_authentication_token?(VALID_AUTHENTICATION_TOKEN.reverse)
33
- end
34
-
35
28
  test 'should authenticate a valid user with authentication token and return it' do
36
29
  User.expects(:authentication_token).returns(VALID_AUTHENTICATION_TOKEN)
37
30
  user = create_user
@@ -1,4 +1,4 @@
1
- require 'test/test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class TrackableTest < ActiveSupport::TestCase
4
4
 
@@ -1,7 +1,7 @@
1
- require 'test/test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class ValidatableTest < ActiveSupport::TestCase
4
- extend Devise::TestSilencer if [:mongo_mapper, :data_mapper].include?(DEVISE_ORM)
4
+ extend Devise::TestSilencer if [:mongoid, :data_mapper].include?(DEVISE_ORM)
5
5
 
6
6
  test 'should require email to be set' do
7
7
  user = new_user(:email => nil)
@@ -1,4 +1,4 @@
1
- require 'test/test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class Configurable < User
4
4
  devise :authenticatable, :confirmable, :rememberable, :timeoutable, :lockable,
@@ -23,7 +23,21 @@ class ActiveRecordTest < ActiveSupport::TestCase
23
23
  end
24
24
 
25
25
  test 'add modules cherry pick' do
26
- assert_include_modules Admin, :authenticatable, :registerable, :timeoutable
26
+ assert_include_modules Admin, :database_authenticatable, :registerable, :timeoutable, :recoverable
27
+ end
28
+
29
+ test 'order of module inclusion' do
30
+ correct_module_order = [:database_authenticatable, :recoverable, :registerable, :timeoutable]
31
+ incorrect_module_order = [:database_authenticatable, :timeoutable, :registerable, :recoverable]
32
+
33
+ assert_include_modules Admin, *incorrect_module_order
34
+
35
+ # get module constants from symbol list
36
+ module_constants = correct_module_order.collect { |mod| Devise::Models::const_get(mod.to_s.classify) }
37
+
38
+ # confirm that they adhere to the order in ALL
39
+ # get included modules, filter out the noise, and reverse the order
40
+ assert_equal module_constants, (Admin.included_modules & module_constants).reverse
27
41
  end
28
42
 
29
43
  test 'set a default value for stretches' do