devise_invitable 1.7.5 → 2.0.5
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.
Potentially problematic release.
This version of devise_invitable might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/README.rdoc +98 -111
- data/app/controllers/devise/invitations_controller.rb +41 -40
- data/app/controllers/devise_invitable/registrations_controller.rb +11 -11
- data/app/views/devise/invitations/edit.html.erb +14 -8
- data/app/views/devise/invitations/new.html.erb +11 -7
- data/app/views/devise/mailer/invitation_instructions.html.erb +1 -1
- data/app/views/devise/mailer/invitation_instructions.text.erb +1 -1
- data/config/locales/ar.yml +23 -0
- data/config/locales/da.yml +41 -0
- data/config/locales/de.yml +31 -0
- data/config/locales/es.yml +31 -0
- data/config/locales/et.yml +23 -0
- data/config/locales/fa.yml +31 -0
- data/config/locales/fr.yml +34 -0
- data/config/locales/it.yml +31 -0
- data/config/locales/ja.yml +31 -0
- data/config/locales/ko.yml +24 -0
- data/config/locales/nl.yml +32 -0
- data/config/locales/no.yml +17 -0
- data/config/locales/pl.yml +31 -0
- data/config/locales/pt-BR.yml +23 -0
- data/config/locales/pt.yml +23 -0
- data/config/locales/ru.yml +23 -0
- data/config/locales/tr.yml +24 -0
- data/config/locales/ua.yml +31 -0
- data/config/locales/vi.yml +25 -0
- data/config/locales/zh-HK.yml +31 -0
- data/config/locales/zh-TW.yml +31 -0
- data/lib/devise_invitable.rb +5 -4
- data/lib/devise_invitable/controllers/helpers.rb +3 -4
- data/lib/devise_invitable/inviter.rb +4 -3
- data/lib/devise_invitable/mailer.rb +1 -1
- data/lib/devise_invitable/mapping.rb +6 -5
- data/lib/devise_invitable/models.rb +29 -27
- data/lib/devise_invitable/models/authenticatable.rb +7 -1
- data/lib/devise_invitable/parameter_sanitizer.rb +18 -18
- data/lib/devise_invitable/routes.rb +5 -5
- data/lib/devise_invitable/version.rb +1 -1
- data/lib/generators/active_record/devise_invitable_generator.rb +3 -3
- data/lib/generators/active_record/templates/migration.rb +0 -1
- data/lib/generators/devise_invitable/devise_invitable_generator.rb +4 -8
- data/lib/generators/devise_invitable/install_generator.rb +11 -14
- data/lib/generators/devise_invitable/templates/simple_form_for/invitations/edit.html.erb +10 -6
- data/lib/generators/devise_invitable/templates/simple_form_for/invitations/new.html.erb +10 -6
- data/lib/generators/devise_invitable/views_generator.rb +6 -6
- data/test/functional/registrations_controller_test.rb +24 -25
- data/test/generators/views_generator_test.rb +7 -6
- data/test/generators_test.rb +3 -2
- data/test/integration/invitation_remove_test.rb +8 -8
- data/test/integration/invitation_test.rb +46 -46
- data/test/integration_tests_helper.rb +8 -9
- data/test/model_tests_helper.rb +5 -5
- data/test/models/invitable_test.rb +126 -110
- data/test/models_test.rb +3 -3
- data/test/orm/active_record.rb +2 -2
- data/test/orm/mongoid.rb +2 -2
- data/test/rails_app/app/controllers/admins_controller.rb +4 -3
- data/test/rails_app/app/controllers/application_controller.rb +11 -10
- data/test/rails_app/app/controllers/free_invitations_controller.rb +12 -9
- data/test/rails_app/app/controllers/users_controller.rb +2 -2
- data/test/rails_app/app/models/admin.rb +7 -10
- data/test/rails_app/app/models/octopussy.rb +4 -4
- data/test/rails_app/app/models/user.rb +20 -20
- data/test/rails_app/app/views/admins/new.html.erb +9 -5
- data/test/rails_app/app/views/devise/sessions/new.html.erb +14 -6
- data/test/rails_app/app/views/free_invitations/new.html.erb +9 -5
- data/test/rails_app/app/views/layouts/application.html.erb +3 -4
- data/test/rails_app/app/views/users/invitations/new.html.erb +15 -9
- data/test/rails_app/config/application.rb +6 -6
- data/test/rails_app/config/boot.rb +2 -2
- data/test/rails_app/config/credentials.yml.enc +1 -0
- data/test/rails_app/config/initializers/devise.rb +4 -3
- data/test/rails_app/config/initializers/secret_token.rb +3 -1
- data/test/rails_app/config/initializers/session_store.rb +1 -1
- data/test/rails_app/config/initializers/wrap_parameters.rb +1 -1
- data/test/rails_app/config/master.key +1 -0
- data/test/rails_app/config/routes.rb +3 -3
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -2
- data/test/routes_test.rb +4 -4
- data/test/test_helper.rb +6 -19
- metadata +46 -22
data/test/model_tests_helper.rb
CHANGED
@@ -21,13 +21,13 @@ class ActiveSupport::TestCase
|
|
21
21
|
"test#{@@email_count}@email.com"
|
22
22
|
end
|
23
23
|
|
24
|
-
def valid_attributes(attributes={})
|
25
|
-
{ :
|
26
|
-
:
|
27
|
-
:
|
24
|
+
def valid_attributes(attributes = {})
|
25
|
+
{ email: generate_unique_email,
|
26
|
+
password: '123456',
|
27
|
+
password_confirmation: '123456' }.update(attributes)
|
28
28
|
end
|
29
29
|
|
30
|
-
def new_user(attributes={})
|
30
|
+
def new_user(attributes = {})
|
31
31
|
User.new(valid_attributes(attributes))
|
32
32
|
end
|
33
33
|
|
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
require 'model_tests_helper'
|
3
3
|
|
4
|
+
class Validatable < User
|
5
|
+
devise :validatable, password_length: 10..20
|
6
|
+
end
|
7
|
+
|
4
8
|
class InvitableTest < ActiveSupport::TestCase
|
5
9
|
|
6
10
|
def setup
|
@@ -15,7 +19,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
15
19
|
if defined?(ActiveRecord)
|
16
20
|
current_user = new_user
|
17
21
|
2.times do |index|
|
18
|
-
User.invite!({:
|
22
|
+
User.invite!({ email: "valid#{index}@email.com" }, current_user)
|
19
23
|
end
|
20
24
|
assert_equal current_user.reload.invitations_count, 2
|
21
25
|
end
|
@@ -74,7 +78,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
74
78
|
test 'should return the correct raw_invitation_token ' do
|
75
79
|
user = new_user
|
76
80
|
raw, enc = Devise.token_generator.generate(user.class, :invitation_token)
|
77
|
-
#stub the generator so the tokens are the same
|
81
|
+
# stub the generator so the tokens are the same
|
78
82
|
Devise.token_generator.stubs(:generate).returns([raw, enc])
|
79
83
|
user.invite!
|
80
84
|
assert_equal user.raw_invitation_token, raw
|
@@ -85,17 +89,17 @@ class InvitableTest < ActiveSupport::TestCase
|
|
85
89
|
user.invite!
|
86
90
|
old_invitation_created_at = 3.days.ago
|
87
91
|
old_invitation_sent_at = 3.days.ago
|
88
|
-
user.update_attributes(:
|
92
|
+
user.update_attributes(invitation_sent_at: old_invitation_sent_at, invitation_created_at: old_invitation_created_at)
|
89
93
|
3.times do
|
90
94
|
user.invite!
|
91
95
|
refute_equal old_invitation_sent_at, user.invitation_sent_at
|
92
96
|
refute_equal old_invitation_created_at, user.invitation_created_at
|
93
|
-
user.update_attributes(:
|
97
|
+
user.update_attributes(invitation_sent_at: old_invitation_sent_at, invitation_created_at: old_invitation_created_at)
|
94
98
|
end
|
95
99
|
end
|
96
100
|
|
97
101
|
test 'should test invitation sent at with invite_for configuration value' do
|
98
|
-
user = User.invite!(:
|
102
|
+
user = User.invite!(email: 'valid@email.com')
|
99
103
|
|
100
104
|
User.stubs(:invite_for).returns(nil)
|
101
105
|
user.invitation_created_at = Time.now.utc
|
@@ -125,7 +129,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
125
129
|
test 'should return token validity when there is invite_for' do
|
126
130
|
User.stubs(:invite_for).returns(1.day)
|
127
131
|
|
128
|
-
user = User.invite!(:
|
132
|
+
user = User.invite!(email: 'valid@email.com')
|
129
133
|
sent_at = user.invitation_created_at || user.invitation_sent_at
|
130
134
|
valid_until = sent_at + User.invite_for
|
131
135
|
|
@@ -134,7 +138,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
134
138
|
|
135
139
|
test 'should return nil for invitation due date when invite_for is nil' do
|
136
140
|
User.stubs(:invite_for).returns(nil)
|
137
|
-
user = User.invite!(:
|
141
|
+
user = User.invite!(email: 'valid@email.com')
|
138
142
|
|
139
143
|
assert_nil user.invitation_due_at
|
140
144
|
end
|
@@ -158,22 +162,22 @@ class InvitableTest < ActiveSupport::TestCase
|
|
158
162
|
end
|
159
163
|
|
160
164
|
test 'should invite with multiple columns for invite key' do
|
161
|
-
User.stubs(:invite_key).returns(:
|
162
|
-
user = User.invite!(:
|
165
|
+
User.stubs(:invite_key).returns(email: Devise.email_regexp, username: /\A.+\z/)
|
166
|
+
user = User.invite!(email: 'valid@email.com', username: "name")
|
163
167
|
assert_predicate user, :persisted?
|
164
168
|
assert_empty user.errors
|
165
169
|
end
|
166
170
|
|
167
171
|
test 'should allow non-string columns for invite key' do
|
168
|
-
User.stubs(:invite_key).returns(:
|
169
|
-
user = User.invite!(:
|
172
|
+
User.stubs(:invite_key).returns(email: Devise.email_regexp, profile_id: :present?.to_proc)
|
173
|
+
user = User.invite!(email: 'valid@email.com', profile_id: 1)
|
170
174
|
assert_predicate user, :persisted?
|
171
175
|
assert_empty user.errors
|
172
176
|
end
|
173
177
|
|
174
178
|
test 'should not invite with some missing columns when invite key is an array' do
|
175
|
-
User.stubs(:invite_key).returns(:
|
176
|
-
user = User.invite!(:
|
179
|
+
User.stubs(:invite_key).returns(email: Devise.email_regexp, username: /\A.+\z/, profile_id: :present?.to_proc, active: true)
|
180
|
+
user = User.invite!(email: 'valid@email.com')
|
177
181
|
assert_predicate user, :new_record?
|
178
182
|
refute_empty user.errors
|
179
183
|
assert user.errors[:username]
|
@@ -183,48 +187,48 @@ class InvitableTest < ActiveSupport::TestCase
|
|
183
187
|
end
|
184
188
|
|
185
189
|
test 'should return mail object' do
|
186
|
-
mail = User.invite_mail!(:
|
190
|
+
mail = User.invite_mail!(email: 'valid@email.com')
|
187
191
|
assert_instance_of Mail::Message, mail
|
188
192
|
end
|
189
193
|
|
190
194
|
test 'should disallow login when invited' do
|
191
|
-
invited_user = User.invite!(:
|
195
|
+
invited_user = User.invite!(email: 'valid@email.com')
|
192
196
|
refute invited_user.valid_password?('1234')
|
193
197
|
end
|
194
198
|
|
195
199
|
test 'should not accept invite without password' do
|
196
|
-
User.invite!(:
|
197
|
-
User.accept_invitation!(:
|
198
|
-
refute_predicate User.where(:
|
200
|
+
User.invite!(email: 'valid@email.com')
|
201
|
+
User.accept_invitation!(invitation_token: Thread.current[:token])
|
202
|
+
refute_predicate User.where(email: 'valid@email.com').first, :invitation_accepted?
|
199
203
|
end
|
200
204
|
|
201
205
|
test 'should accept invite without password if enforce is disabled' do
|
202
|
-
Devise.stubs(:
|
203
|
-
User.invite!(:
|
204
|
-
User.accept_invitation!(:
|
205
|
-
assert_predicate User.where(:
|
206
|
+
Devise.stubs(require_password_on_accepting: false)
|
207
|
+
User.invite!(email: 'valid@email.com')
|
208
|
+
User.accept_invitation!(invitation_token: Thread.current[:token])
|
209
|
+
assert_predicate User.where(email: 'valid@email.com').first, :invitation_accepted?
|
206
210
|
end
|
207
211
|
|
208
212
|
test 'should set password and password confirmation from params' do
|
209
|
-
User.invite!(:
|
210
|
-
user = User.accept_invitation!(:
|
213
|
+
User.invite!(email: 'valid@email.com')
|
214
|
+
user = User.accept_invitation!(invitation_token: Thread.current[:token], password: '123456789', password_confirmation: '123456789')
|
211
215
|
assert user.valid_password?('123456789')
|
212
216
|
end
|
213
217
|
|
214
218
|
test 'should set password and save the record' do
|
215
|
-
user = User.invite!(:
|
219
|
+
user = User.invite!(email: 'valid@email.com')
|
216
220
|
old_encrypted_password = user.encrypted_password
|
217
|
-
user = User.accept_invitation!(:
|
221
|
+
user = User.accept_invitation!(invitation_token: Thread.current[:token], password: '123456789', password_confirmation: '123456789')
|
218
222
|
refute_equal old_encrypted_password, user.encrypted_password
|
219
223
|
end
|
220
224
|
|
221
225
|
test 'should not override password on invite!' do
|
222
|
-
user = User.invite!(:
|
226
|
+
user = User.invite!(email: 'valid@email.com', password: 'password', password_confirmation: 'password', skip_invitation: true)
|
223
227
|
assert user.valid?
|
224
228
|
end
|
225
229
|
|
226
230
|
test 'should clear invitation token and set invitation_accepted_at while accepting the password' do
|
227
|
-
user = User.invite!(:
|
231
|
+
user = User.invite!(email: 'valid@email.com')
|
228
232
|
assert user.invitation_token.present?
|
229
233
|
assert_nil user.invitation_accepted_at
|
230
234
|
user.accept_invitation!
|
@@ -238,11 +242,11 @@ class InvitableTest < ActiveSupport::TestCase
|
|
238
242
|
end
|
239
243
|
|
240
244
|
test 'should not clear invitation token or set accepted_at if record is invalid' do
|
241
|
-
user = User.invite!(:
|
245
|
+
user = User.invite!(email: 'valid@email.com')
|
242
246
|
assert user.invitation_token.present?
|
243
247
|
assert_nil user.invitation_accepted_at
|
244
248
|
old_encrypted_password = user.encrypted_password
|
245
|
-
User.accept_invitation!(:
|
249
|
+
User.accept_invitation!(invitation_token: user.invitation_token, password: '123456789', password_confirmation: '987654321')
|
246
250
|
user.reload
|
247
251
|
assert_equal old_encrypted_password, user.encrypted_password
|
248
252
|
assert user.invitation_token.present?
|
@@ -250,10 +254,10 @@ class InvitableTest < ActiveSupport::TestCase
|
|
250
254
|
end
|
251
255
|
|
252
256
|
test 'should not require reloading if invalid' do
|
253
|
-
user = User.invite!(:
|
257
|
+
user = User.invite!(email: 'valid@email.com')
|
254
258
|
assert user.invitation_token.present?
|
255
259
|
assert_nil user.invitation_accepted_at
|
256
|
-
user.attributes = { :
|
260
|
+
user.attributes = { password: '123456789', password_confirmation: '987654321' }
|
257
261
|
user.accept_invitation!
|
258
262
|
assert user.invitation_token.present?
|
259
263
|
assert_nil user.invitation_accepted_at
|
@@ -261,7 +265,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
261
265
|
end
|
262
266
|
|
263
267
|
test 'should clear invitation token while resetting the password' do
|
264
|
-
user = User.invite!(:
|
268
|
+
user = User.invite!(email: 'valid@email.com')
|
265
269
|
assert user.invited_to_sign_up?
|
266
270
|
token, user.reset_password_token = Devise.token_generator.generate(User, :reset_password_token)
|
267
271
|
user.reset_password_sent_at = Time.now.utc
|
@@ -269,14 +273,14 @@ class InvitableTest < ActiveSupport::TestCase
|
|
269
273
|
|
270
274
|
assert user.reset_password_token.present?
|
271
275
|
assert user.invitation_token.present?
|
272
|
-
User.reset_password_by_token(:
|
276
|
+
User.reset_password_by_token(reset_password_token: token, password: '123456789', password_confirmation: '123456789')
|
273
277
|
assert_nil user.reload.reset_password_token
|
274
278
|
assert_nil user.reload.invitation_token
|
275
279
|
refute_predicate user, :invited_to_sign_up?
|
276
280
|
end
|
277
281
|
|
278
282
|
test 'should not accept invitation on failing to reset the password' do
|
279
|
-
user = User.invite!(:
|
283
|
+
user = User.invite!(email: 'valid@email.com')
|
280
284
|
assert user.invited_to_sign_up?
|
281
285
|
token, user.reset_password_token = Devise.token_generator.generate(User, :reset_password_token)
|
282
286
|
user.reset_password_sent_at = Time.now.utc
|
@@ -284,14 +288,14 @@ class InvitableTest < ActiveSupport::TestCase
|
|
284
288
|
|
285
289
|
assert user.reset_password_token.present?
|
286
290
|
assert user.invitation_token.present?
|
287
|
-
User.reset_password_by_token(:
|
291
|
+
User.reset_password_by_token(reset_password_token: token, password: '123456789', password_confirmation: '12345678')
|
288
292
|
assert user.reload.reset_password_token.present?
|
289
293
|
assert user.reload.invitation_token.present?
|
290
294
|
assert user.invited_to_sign_up?
|
291
295
|
end
|
292
296
|
|
293
297
|
test 'should not set invitation_accepted_at if just resetting password' do
|
294
|
-
user = User.create!(:
|
298
|
+
user = User.create!(email: 'valid@email.com', password: '123456780')
|
295
299
|
refute_predicate user, :invited_to_sign_up?
|
296
300
|
token, user.reset_password_token = Devise.token_generator.generate(User, :reset_password_token)
|
297
301
|
user.reset_password_sent_at = Time.now.utc
|
@@ -299,7 +303,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
299
303
|
|
300
304
|
assert user.reset_password_token.present?
|
301
305
|
assert_nil user.invitation_token
|
302
|
-
User.reset_password_by_token(:
|
306
|
+
User.reset_password_by_token(reset_password_token: token, password: '123456789', password_confirmation: '123456789')
|
303
307
|
assert_nil user.reload.invitation_token
|
304
308
|
assert_nil user.reload.invitation_accepted_at
|
305
309
|
end
|
@@ -314,7 +318,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
314
318
|
end
|
315
319
|
|
316
320
|
test 'should return a record with invitation token and no errors to send invitation by email' do
|
317
|
-
invited_user = User.invite!(:
|
321
|
+
invited_user = User.invite!(email: 'valid@email.com')
|
318
322
|
assert_empty invited_user.errors
|
319
323
|
assert_predicate invited_user.invitation_token, :present?
|
320
324
|
assert_equal 'valid@email.com', invited_user.email
|
@@ -322,7 +326,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
322
326
|
end
|
323
327
|
|
324
328
|
test 'should set all attributes with no errors' do
|
325
|
-
invited_user = User.invite!(:
|
329
|
+
invited_user = User.invite!(email: 'valid@email.com', username: 'first name')
|
326
330
|
assert_empty invited_user.errors
|
327
331
|
assert_equal 'first name', invited_user.username
|
328
332
|
assert_predicate invited_user, :persisted?
|
@@ -331,7 +335,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
331
335
|
test 'should not validate other attributes when validate_on_invite is disabled' do
|
332
336
|
validate_on_invite = User.validate_on_invite
|
333
337
|
User.validate_on_invite = false
|
334
|
-
invited_user = User.invite!(:
|
338
|
+
invited_user = User.invite!(email: 'valid@email.com', username: 'a' * 50)
|
335
339
|
assert_empty invited_user.errors
|
336
340
|
User.validate_on_invite = validate_on_invite
|
337
341
|
end
|
@@ -339,7 +343,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
339
343
|
test 'should validate other attributes when validate_on_invite is enabled' do
|
340
344
|
validate_on_invite = User.validate_on_invite
|
341
345
|
User.validate_on_invite = true
|
342
|
-
invited_user = User.invite!(:
|
346
|
+
invited_user = User.invite!(email: 'valid@email.com', username: 'a' * 50)
|
343
347
|
refute_empty invited_user.errors[:username]
|
344
348
|
User.validate_on_invite = validate_on_invite
|
345
349
|
end
|
@@ -347,7 +351,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
347
351
|
test 'should not validate password when validate_on_invite is enabled' do
|
348
352
|
validate_on_invite = User.validate_on_invite
|
349
353
|
User.validate_on_invite = true
|
350
|
-
invited_user = User.invite!(:
|
354
|
+
invited_user = User.invite!(email: 'valid@email.com', username: 'a' * 50)
|
351
355
|
refute_empty invited_user.errors
|
352
356
|
assert_empty invited_user.errors[:password]
|
353
357
|
User.validate_on_invite = validate_on_invite
|
@@ -356,33 +360,33 @@ class InvitableTest < ActiveSupport::TestCase
|
|
356
360
|
test 'should validate other attributes when validate_on_invite is enabled and email is not present' do
|
357
361
|
validate_on_invite = User.validate_on_invite
|
358
362
|
User.validate_on_invite = true
|
359
|
-
invited_user = User.invite!(:
|
363
|
+
invited_user = User.invite!(email: '', username: 'a' * 50)
|
360
364
|
refute_empty invited_user.errors[:email]
|
361
365
|
refute_empty invited_user.errors[:username]
|
362
366
|
User.validate_on_invite = validate_on_invite
|
363
367
|
end
|
364
368
|
|
365
369
|
test 'should return a record with errors if user was found by e-mail' do
|
366
|
-
existing_user = User.new(:
|
367
|
-
existing_user.save(:
|
368
|
-
user = User.invite!(:
|
370
|
+
existing_user = User.new(email: 'valid@email.com')
|
371
|
+
existing_user.save(validate: false)
|
372
|
+
user = User.invite!(email: 'valid@email.com')
|
369
373
|
assert_equal user, existing_user
|
370
374
|
assert_equal ['has already been taken'], user.errors[:email]
|
371
|
-
same_user = User.invite!(
|
375
|
+
same_user = User.invite!(email: 'valid@email.com')
|
372
376
|
assert_equal same_user, existing_user
|
373
377
|
assert_equal ['has already been taken'], same_user.errors[:email]
|
374
378
|
end
|
375
379
|
|
376
380
|
test 'should return a record with errors if user with pending invitation was found by e-mail' do
|
377
|
-
existing_user = User.invite!(:
|
378
|
-
user = User.invite!(:
|
381
|
+
existing_user = User.invite!(email: 'valid@email.com')
|
382
|
+
user = User.invite!(email: 'valid@email.com')
|
379
383
|
assert_equal user, existing_user
|
380
384
|
assert_equal [], user.errors[:email]
|
381
385
|
resend_invitation = User.resend_invitation
|
382
386
|
begin
|
383
387
|
User.resend_invitation = false
|
384
388
|
|
385
|
-
user = User.invite!(:
|
389
|
+
user = User.invite!(email: 'valid@email.com')
|
386
390
|
assert_equal user, existing_user
|
387
391
|
assert_equal ['has already been taken'], user.errors[:email]
|
388
392
|
ensure
|
@@ -394,9 +398,9 @@ class InvitableTest < ActiveSupport::TestCase
|
|
394
398
|
begin
|
395
399
|
validate_on_invite = User.validate_on_invite
|
396
400
|
User.validate_on_invite = true
|
397
|
-
existing_user = User.new(:
|
398
|
-
existing_user.save(:
|
399
|
-
user = User.invite!(:
|
401
|
+
existing_user = User.new(email: 'valid@email.com')
|
402
|
+
existing_user.save(validate: false)
|
403
|
+
user = User.invite!(email: 'valid@email.com', username: 'a' * 50)
|
400
404
|
assert_equal user, existing_user
|
401
405
|
assert_equal ['has already been taken'], user.errors[:email]
|
402
406
|
refute_empty user.errors[:username]
|
@@ -406,19 +410,19 @@ class InvitableTest < ActiveSupport::TestCase
|
|
406
410
|
end
|
407
411
|
|
408
412
|
test 'should return a new record with errors if e-mail is blank' do
|
409
|
-
invited_user = User.invite!(:
|
413
|
+
invited_user = User.invite!(email: '')
|
410
414
|
assert invited_user.new_record?
|
411
415
|
assert_equal ["can't be blank"], invited_user.errors[:email]
|
412
416
|
end
|
413
417
|
|
414
418
|
test 'should return a new record with errors if e-mail is invalid' do
|
415
|
-
invited_user = User.invite!(:
|
419
|
+
invited_user = User.invite!(email: 'invalid_email')
|
416
420
|
assert invited_user.new_record?
|
417
|
-
assert_equal [
|
421
|
+
assert_equal ['is invalid'], invited_user.errors[:email]
|
418
422
|
end
|
419
423
|
|
420
424
|
test 'should set all attributes with errors if e-mail is invalid' do
|
421
|
-
invited_user = User.invite!(:
|
425
|
+
invited_user = User.invite!(email: 'invalid_email.com', username: 'first name')
|
422
426
|
assert invited_user.new_record?
|
423
427
|
assert_equal 'first name', invited_user.username
|
424
428
|
refute_empty invited_user.errors
|
@@ -427,34 +431,34 @@ class InvitableTest < ActiveSupport::TestCase
|
|
427
431
|
test 'should find a user to set his password based on invitation_token' do
|
428
432
|
user = new_user
|
429
433
|
user.invite!
|
430
|
-
invited_user = User.accept_invitation!(:
|
434
|
+
invited_user = User.accept_invitation!(invitation_token: Thread.current[:token])
|
431
435
|
assert_equal invited_user, user
|
432
436
|
end
|
433
437
|
|
434
438
|
test 'should return a new record with errors if no invitation_token is found' do
|
435
|
-
invited_user = User.accept_invitation!(:
|
439
|
+
invited_user = User.accept_invitation!(invitation_token: 'invalid_token')
|
436
440
|
assert invited_user.new_record?
|
437
441
|
assert_equal ['is invalid'], invited_user.errors[:invitation_token]
|
438
442
|
end
|
439
443
|
|
440
444
|
test 'should return a new record with errors if invitation_token is blank' do
|
441
|
-
invited_user = User.accept_invitation!(:
|
445
|
+
invited_user = User.accept_invitation!(invitation_token: '')
|
442
446
|
assert invited_user.new_record?
|
443
447
|
assert_equal ["can't be blank"], invited_user.errors[:invitation_token]
|
444
448
|
end
|
445
449
|
|
446
450
|
test 'should return record with errors if invitation_token has expired' do
|
447
451
|
User.stubs(:invite_for).returns(10.hours)
|
448
|
-
invited_user = User.invite!(:
|
452
|
+
invited_user = User.invite!(email: 'valid@email.com')
|
449
453
|
invited_user.invitation_created_at = 2.days.ago
|
450
|
-
invited_user.save(:
|
451
|
-
user = User.accept_invitation!(:
|
454
|
+
invited_user.save(validate: false)
|
455
|
+
user = User.accept_invitation!(invitation_token: Thread.current[:token])
|
452
456
|
assert_equal user, invited_user
|
453
|
-
assert_equal [
|
457
|
+
assert_equal ['is invalid'], user.errors[:invitation_token]
|
454
458
|
end
|
455
459
|
|
456
460
|
test 'should allow record modification using block' do
|
457
|
-
invited_user = User.invite!(:
|
461
|
+
invited_user = User.invite!(email: 'valid@email.com', username: 'a' * 50) do |u|
|
458
462
|
u.password = '123123'
|
459
463
|
u.password_confirmation = '123123'
|
460
464
|
end
|
@@ -462,13 +466,13 @@ class InvitableTest < ActiveSupport::TestCase
|
|
462
466
|
end
|
463
467
|
|
464
468
|
test 'should set successfully user password given the new password and confirmation' do
|
465
|
-
user = new_user(:
|
469
|
+
user = new_user(password: nil, password_confirmation: nil)
|
466
470
|
user.invite!
|
467
471
|
|
468
472
|
User.accept_invitation!(
|
469
|
-
:
|
470
|
-
:
|
471
|
-
:
|
473
|
+
invitation_token: Thread.current[:token],
|
474
|
+
password: 'new_password',
|
475
|
+
password_confirmation: 'new_password',
|
472
476
|
)
|
473
477
|
user.reload
|
474
478
|
|
@@ -476,14 +480,14 @@ class InvitableTest < ActiveSupport::TestCase
|
|
476
480
|
end
|
477
481
|
|
478
482
|
test 'should return errors on other attributes even when password is valid' do
|
479
|
-
user = new_user(:
|
483
|
+
user = new_user(password: nil, password_confirmation: nil)
|
480
484
|
user.invite!
|
481
485
|
|
482
486
|
invited_user = User.accept_invitation!(
|
483
|
-
:
|
484
|
-
:
|
485
|
-
:
|
486
|
-
:
|
487
|
+
invitation_token: Thread.current[:token],
|
488
|
+
password: 'new_password',
|
489
|
+
password_confirmation: 'new_password',
|
490
|
+
username: 'a' * 50,
|
487
491
|
)
|
488
492
|
refute_empty invited_user.errors[:username]
|
489
493
|
|
@@ -492,14 +496,14 @@ class InvitableTest < ActiveSupport::TestCase
|
|
492
496
|
end
|
493
497
|
|
494
498
|
test 'should check if created by invitation' do
|
495
|
-
user = User.invite!(:
|
499
|
+
user = User.invite!(email: 'valid@email.com')
|
496
500
|
assert user.created_by_invite?
|
497
501
|
|
498
502
|
invited_user = User.accept_invitation!(
|
499
|
-
:
|
500
|
-
:
|
501
|
-
:
|
502
|
-
:
|
503
|
+
invitation_token: Thread.current[:token],
|
504
|
+
password: 'new_password',
|
505
|
+
password_confirmation: 'new_password',
|
506
|
+
username: 'a',
|
503
507
|
)
|
504
508
|
user.reload
|
505
509
|
assert user.created_by_invite?
|
@@ -507,14 +511,14 @@ class InvitableTest < ActiveSupport::TestCase
|
|
507
511
|
|
508
512
|
|
509
513
|
test 'should set other attributes on accepting invitation' do
|
510
|
-
user = new_user(:
|
514
|
+
user = new_user(password: nil, password_confirmation: nil)
|
511
515
|
user.invite!
|
512
516
|
|
513
517
|
invited_user = User.accept_invitation!(
|
514
|
-
:
|
515
|
-
:
|
516
|
-
:
|
517
|
-
:
|
518
|
+
invitation_token: Thread.current[:token],
|
519
|
+
password: 'new_password',
|
520
|
+
password_confirmation: 'new_password',
|
521
|
+
username: 'a',
|
518
522
|
)
|
519
523
|
assert invited_user.errors[:username].blank?
|
520
524
|
|
@@ -554,13 +558,13 @@ class InvitableTest < ActiveSupport::TestCase
|
|
554
558
|
|
555
559
|
test 'should not send an invitation if we want to skip the invitation' do
|
556
560
|
assert_no_difference('ActionMailer::Base.deliveries.size') do
|
557
|
-
User.invite!(:
|
561
|
+
User.invite!(email: 'valid@email.com', username: 'a' * 50, skip_invitation: true)
|
558
562
|
end
|
559
563
|
end
|
560
564
|
|
561
565
|
test 'should not send an invitation if we want to skip the invitation with block' do
|
562
566
|
assert_no_difference('ActionMailer::Base.deliveries.size') do
|
563
|
-
User.invite!(:
|
567
|
+
User.invite!(email: 'valid@email.com', username: 'a' * 50) do |u|
|
564
568
|
u.skip_invitation = true
|
565
569
|
end
|
566
570
|
end
|
@@ -595,22 +599,22 @@ class InvitableTest < ActiveSupport::TestCase
|
|
595
599
|
|
596
600
|
test 'user.invite! should set the invited_by attribute if passed' do
|
597
601
|
user = new_user
|
598
|
-
inviting_user = User.new(:
|
599
|
-
inviting_user.save(:
|
602
|
+
inviting_user = User.new(email: 'valid@email.com')
|
603
|
+
inviting_user.save(validate: false)
|
600
604
|
user.invite!(inviting_user)
|
601
605
|
assert_equal inviting_user, user.invited_by
|
602
606
|
assert_equal inviting_user.class.to_s, user.invited_by_type
|
603
607
|
end
|
604
608
|
|
605
609
|
test 'user.accept_invitation! should trigger callbacks' do
|
606
|
-
user = User.invite!(:
|
610
|
+
user = User.invite!(email: 'valid@email.com')
|
607
611
|
assert_callbacks_not_fired :after_invitation_accepted, user
|
608
612
|
user.accept_invitation!
|
609
613
|
assert_callbacks_fired :after_invitation_accepted, user
|
610
614
|
end
|
611
615
|
|
612
616
|
test 'user.accept_invitation! should not trigger callbacks if validation fails' do
|
613
|
-
user = User.invite!(:
|
617
|
+
user = User.invite!(email: 'valid@email.com')
|
614
618
|
assert_callbacks_not_fired :after_invitation_accepted, user
|
615
619
|
user.username='a'*50
|
616
620
|
user.accept_invitation!
|
@@ -618,7 +622,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
618
622
|
end
|
619
623
|
|
620
624
|
test 'user.accept_invitation! should confirm user if confirmable' do
|
621
|
-
user = User.invite!(:
|
625
|
+
user = User.invite!(email: 'valid@email.com')
|
622
626
|
user.accept_invitation!
|
623
627
|
|
624
628
|
assert user.confirmed?
|
@@ -626,7 +630,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
626
630
|
end
|
627
631
|
|
628
632
|
test 'user.accept_invitation! should not confirm user if validation fails' do
|
629
|
-
user = User.invite!(:
|
633
|
+
user = User.invite!(email: 'valid@email.com')
|
630
634
|
user.username='a'*50
|
631
635
|
user.accept_invitation!
|
632
636
|
user.reload
|
@@ -640,7 +644,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
640
644
|
begin
|
641
645
|
User.send_password_change_notification = true
|
642
646
|
|
643
|
-
user = User.invite!(:
|
647
|
+
user = User.invite!(email: 'valid@email.com')
|
644
648
|
|
645
649
|
assert_no_difference('ActionMailer::Base.deliveries.size') do
|
646
650
|
user.password = user.password_confirmation = '123456789'
|
@@ -671,53 +675,53 @@ class InvitableTest < ActiveSupport::TestCase
|
|
671
675
|
|
672
676
|
test "user.invite! should downcase the class's case_insensitive_keys" do
|
673
677
|
# Devise default is :email
|
674
|
-
user = User.invite!(:
|
675
|
-
assert user.email ==
|
678
|
+
user = User.invite!(email: 'UPPERCASE@email.com')
|
679
|
+
assert user.email == 'uppercase@email.com'
|
676
680
|
end
|
677
681
|
|
678
682
|
test "user.invite! should strip whitespace from the class's strip_whitespace_keys" do
|
679
683
|
# Devise default is email
|
680
|
-
user = User.invite!(:
|
681
|
-
assert user.email ==
|
684
|
+
user = User.invite!(email: ' valid@email.com ', active: true)
|
685
|
+
assert user.email == 'valid@email.com'
|
682
686
|
assert user.active == true
|
683
687
|
end
|
684
688
|
|
685
689
|
test "user.invite! should trigger callbacks" do
|
686
|
-
user = User.new(email:
|
690
|
+
user = User.new(email: 'valid@email.com')
|
687
691
|
assert_callbacks_not_fired :after_invitation_created, user
|
688
692
|
user.invite!
|
689
693
|
assert_callbacks_fired :after_invitation_created, user
|
690
694
|
end
|
691
695
|
|
692
696
|
test 'should pass validation before accept if field is required in post-invited instance' do
|
693
|
-
user = User.invite!(:
|
697
|
+
user = User.invite!(email: 'valid@email.com')
|
694
698
|
user.testing_accepted_or_not_invited = true
|
695
699
|
user.valid?
|
696
700
|
assert_empty user.errors
|
697
701
|
end
|
698
702
|
|
699
703
|
test 'should fail validation after accept if field is required in post-invited instance' do
|
700
|
-
user = User.invite!(:
|
704
|
+
user = User.invite!(email: 'valid@email.com')
|
701
705
|
user.testing_accepted_or_not_invited = true
|
702
706
|
assert_predicate user, :accept_invitation!
|
703
|
-
user = User.where(:
|
707
|
+
user = User.where(email: 'valid@email.com').first
|
704
708
|
user.valid?
|
705
709
|
refute_empty user.errors
|
706
710
|
end
|
707
711
|
|
708
712
|
test 'should pass validation after accept if field is required in post-invited instance' do
|
709
|
-
user = User.invite!(:
|
713
|
+
user = User.invite!(email: 'valid@email.com')
|
710
714
|
user.username = 'test'
|
711
715
|
user.testing_accepted_or_not_invited = true
|
712
716
|
assert_predicate user, :accept_invitation!
|
713
|
-
user = User.where(:
|
717
|
+
user = User.where(email: 'valid@email.com').first
|
714
718
|
user.bio = "Test"
|
715
719
|
user.valid?
|
716
720
|
assert_empty user.errors
|
717
721
|
end
|
718
722
|
|
719
723
|
test 'should return instance with errors if invitation_token is nil' do
|
720
|
-
User.create(:
|
724
|
+
User.create(email: 'admin@test.com', password: '123456', password_confirmation: '123456')
|
721
725
|
user = User.accept_invitation!
|
722
726
|
refute_empty user.errors
|
723
727
|
end
|
@@ -727,9 +731,9 @@ class InvitableTest < ActiveSupport::TestCase
|
|
727
731
|
assert_equal 0, User.invitation_accepted.count
|
728
732
|
assert_equal 0, User.created_by_invite.count
|
729
733
|
|
730
|
-
User.invite!(:
|
731
|
-
User.invite!(:
|
732
|
-
user = User.invite!(:
|
734
|
+
User.invite!(email: 'invalid@email.com')
|
735
|
+
User.invite!(email: 'another_invalid@email.com')
|
736
|
+
user = User.invite!(email: 'valid@email.com')
|
733
737
|
|
734
738
|
assert_equal 3, User.invitation_not_accepted.count
|
735
739
|
assert_equal 0, User.invitation_accepted.count
|
@@ -754,10 +758,22 @@ class InvitableTest < ActiveSupport::TestCase
|
|
754
758
|
(?=.*[A-Z]) # Must contain an upper case character
|
755
759
|
(?=.*[[:^alnum:]]) # Must contain a symbol
|
756
760
|
/x
|
757
|
-
User.stubs(:invite_key).returns(:
|
761
|
+
User.stubs(:invite_key).returns(password: PASSWORD_FORMAT)
|
758
762
|
Devise.stubs(:friendly_token).returns('onlylowercaseletters')
|
759
|
-
user = User.invite!(:
|
763
|
+
user = User.invite!(email: 'valid@email.com')
|
760
764
|
assert user.persisted?
|
761
765
|
assert user.errors.empty?
|
762
766
|
end
|
767
|
+
|
768
|
+
test 'should set initial password following Devise.password_length' do
|
769
|
+
user = User.invite!(email: 'valid@email.com')
|
770
|
+
assert_empty user.errors
|
771
|
+
assert_equal Devise.password_length.last, user.password.length
|
772
|
+
end
|
773
|
+
|
774
|
+
test 'should set initial passsword using :validatable with custom password_length' do
|
775
|
+
user = Validatable.invite!(email: 'valid@email.com')
|
776
|
+
assert_empty user.errors
|
777
|
+
assert_equal Validatable.password_length.last, user.password.length
|
778
|
+
end
|
763
779
|
end
|