devise_token_auth 1.0.0 → 1.1.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.
Files changed (126) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +4 -2
  3. data/app/controllers/devise_token_auth/application_controller.rb +2 -3
  4. data/app/controllers/devise_token_auth/concerns/resource_finder.rb +11 -12
  5. data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +41 -57
  6. data/app/controllers/devise_token_auth/confirmations_controller.rb +63 -20
  7. data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +77 -29
  8. data/app/controllers/devise_token_auth/passwords_controller.rb +44 -30
  9. data/app/controllers/devise_token_auth/registrations_controller.rb +33 -40
  10. data/app/controllers/devise_token_auth/sessions_controller.rb +5 -5
  11. data/app/controllers/devise_token_auth/unlocks_controller.rb +4 -4
  12. data/app/models/devise_token_auth/concerns/active_record_support.rb +14 -0
  13. data/app/models/devise_token_auth/concerns/confirmable_support.rb +28 -0
  14. data/app/models/devise_token_auth/concerns/mongoid_support.rb +19 -0
  15. data/app/models/devise_token_auth/concerns/tokens_serialization.rb +31 -0
  16. data/app/models/devise_token_auth/concerns/user.rb +51 -70
  17. data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +6 -3
  18. data/app/validators/{email_validator.rb → devise_token_auth_email_validator.rb} +2 -2
  19. data/config/locales/da-DK.yml +2 -0
  20. data/config/locales/de.yml +2 -0
  21. data/config/locales/en.yml +7 -0
  22. data/config/locales/es.yml +2 -0
  23. data/config/locales/fr.yml +2 -0
  24. data/config/locales/he.yml +52 -0
  25. data/config/locales/it.yml +2 -0
  26. data/config/locales/ja.yml +4 -2
  27. data/config/locales/ko.yml +51 -0
  28. data/config/locales/nl.yml +2 -0
  29. data/config/locales/pl.yml +6 -3
  30. data/config/locales/pt-BR.yml +2 -0
  31. data/config/locales/pt.yml +6 -3
  32. data/config/locales/ro.yml +2 -0
  33. data/config/locales/ru.yml +2 -0
  34. data/config/locales/sq.yml +2 -0
  35. data/config/locales/sv.yml +2 -0
  36. data/config/locales/uk.yml +2 -0
  37. data/config/locales/vi.yml +2 -0
  38. data/config/locales/zh-CN.yml +2 -0
  39. data/config/locales/zh-HK.yml +2 -0
  40. data/config/locales/zh-TW.yml +2 -0
  41. data/lib/devise_token_auth/blacklist.rb +2 -0
  42. data/lib/devise_token_auth/controllers/helpers.rb +5 -9
  43. data/lib/devise_token_auth/engine.rb +7 -1
  44. data/lib/devise_token_auth/rails/routes.rb +16 -11
  45. data/lib/devise_token_auth/token_factory.rb +126 -0
  46. data/lib/devise_token_auth/url.rb +3 -0
  47. data/lib/devise_token_auth/version.rb +1 -1
  48. data/lib/devise_token_auth.rb +6 -3
  49. data/lib/generators/devise_token_auth/USAGE +1 -1
  50. data/lib/generators/devise_token_auth/install_generator.rb +7 -91
  51. data/lib/generators/devise_token_auth/install_generator_helpers.rb +98 -0
  52. data/lib/generators/devise_token_auth/install_mongoid_generator.rb +46 -0
  53. data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +10 -0
  54. data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +1 -8
  55. data/lib/generators/devise_token_auth/templates/user.rb.erb +2 -2
  56. data/lib/generators/devise_token_auth/templates/user_mongoid.rb.erb +56 -0
  57. data/test/controllers/custom/custom_confirmations_controller_test.rb +1 -1
  58. data/test/controllers/demo_user_controller_test.rb +2 -2
  59. data/test/controllers/devise_token_auth/confirmations_controller_test.rb +83 -19
  60. data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +109 -42
  61. data/test/controllers/devise_token_auth/passwords_controller_test.rb +227 -102
  62. data/test/controllers/devise_token_auth/registrations_controller_test.rb +34 -7
  63. data/test/controllers/devise_token_auth/sessions_controller_test.rb +0 -38
  64. data/test/controllers/devise_token_auth/token_validations_controller_test.rb +2 -1
  65. data/test/dummy/app/active_record/confirmable_user.rb +11 -0
  66. data/test/dummy/app/{models → active_record}/scoped_user.rb +2 -2
  67. data/test/dummy/app/{models → active_record}/unconfirmable_user.rb +1 -2
  68. data/test/dummy/app/{models → active_record}/unregisterable_user.rb +3 -3
  69. data/test/dummy/app/active_record/user.rb +6 -0
  70. data/test/dummy/app/controllers/overrides/confirmations_controller.rb +3 -3
  71. data/test/dummy/app/controllers/overrides/passwords_controller.rb +3 -3
  72. data/test/dummy/app/controllers/overrides/registrations_controller.rb +1 -1
  73. data/test/dummy/app/controllers/overrides/sessions_controller.rb +2 -2
  74. data/test/dummy/app/models/{user.rb → concerns/favorite_color.rb} +7 -8
  75. data/test/dummy/app/mongoid/confirmable_user.rb +52 -0
  76. data/test/dummy/app/mongoid/lockable_user.rb +38 -0
  77. data/test/dummy/app/mongoid/mang.rb +46 -0
  78. data/test/dummy/app/mongoid/only_email_user.rb +33 -0
  79. data/test/dummy/app/mongoid/scoped_user.rb +50 -0
  80. data/test/dummy/app/mongoid/unconfirmable_user.rb +44 -0
  81. data/test/dummy/app/mongoid/unregisterable_user.rb +47 -0
  82. data/test/dummy/app/mongoid/user.rb +49 -0
  83. data/test/dummy/app/views/layouts/application.html.erb +0 -2
  84. data/test/dummy/config/application.rb +22 -1
  85. data/test/dummy/config/boot.rb +4 -0
  86. data/test/dummy/config/environments/development.rb +0 -10
  87. data/test/dummy/config/environments/production.rb +0 -16
  88. data/test/dummy/config/initializers/devise.rb +285 -0
  89. data/test/dummy/config/initializers/devise_token_auth.rb +35 -4
  90. data/test/dummy/config/initializers/figaro.rb +1 -1
  91. data/test/dummy/config/initializers/omniauth.rb +1 -0
  92. data/test/dummy/config/routes.rb +2 -0
  93. data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +0 -7
  94. data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +0 -7
  95. data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +0 -7
  96. data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +0 -7
  97. data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +0 -7
  98. data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +0 -7
  99. data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +0 -7
  100. data/test/dummy/db/migrate/20190924101113_devise_token_auth_create_confirmable_users.rb +49 -0
  101. data/test/dummy/db/schema.rb +26 -28
  102. data/test/dummy/tmp/generators/app/models/azpire/v1/human_resource/user.rb +9 -0
  103. data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +60 -0
  104. data/test/dummy/tmp/generators/db/migrate/20210126004321_devise_token_auth_create_azpire_v1_human_resource_users.rb +49 -0
  105. data/test/factories/users.rb +3 -2
  106. data/test/lib/devise_token_auth/blacklist_test.rb +11 -0
  107. data/test/lib/devise_token_auth/rails/custom_routes_test.rb +29 -0
  108. data/test/lib/devise_token_auth/rails/routes_test.rb +87 -0
  109. data/test/lib/devise_token_auth/token_factory_test.rb +191 -0
  110. data/test/lib/devise_token_auth/url_test.rb +2 -2
  111. data/test/lib/generators/devise_token_auth/install_generator_test.rb +51 -31
  112. data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +51 -31
  113. data/test/models/concerns/mongoid_support_test.rb +31 -0
  114. data/test/models/concerns/tokens_serialization_test.rb +104 -0
  115. data/test/models/confirmable_user_test.rb +35 -0
  116. data/test/models/only_email_user_test.rb +0 -8
  117. data/test/models/user_test.rb +1 -33
  118. data/test/test_helper.rb +13 -3
  119. metadata +125 -32
  120. data/config/initializers/devise.rb +0 -198
  121. data/test/dummy/config/initializers/assets.rb +0 -10
  122. data/test/dummy/tmp/generators/app/views/devise/mailer/confirmation_instructions.html.erb +0 -5
  123. data/test/dummy/tmp/generators/app/views/devise/mailer/reset_password_instructions.html.erb +0 -8
  124. /data/test/dummy/app/{models → active_record}/lockable_user.rb +0 -0
  125. /data/test/dummy/app/{models → active_record}/mang.rb +0 -0
  126. /data/test/dummy/app/{models → active_record}/only_email_user.rb +0 -0
@@ -2,11 +2,13 @@
2
2
 
3
3
  require 'test_helper'
4
4
  require 'fileutils'
5
- require 'generators/devise_token_auth/install_generator'
5
+ require 'generators/devise_token_auth/install_generator' if DEVISE_TOKEN_AUTH_ORM == :active_record
6
+ require 'generators/devise_token_auth/install_mongoid_generator' if DEVISE_TOKEN_AUTH_ORM == :mongoid
6
7
 
7
8
  module DeviseTokenAuth
8
9
  class InstallGeneratorTest < Rails::Generators::TestCase
9
- tests InstallGenerator
10
+ tests InstallGenerator if DEVISE_TOKEN_AUTH_ORM == :active_record
11
+ tests InstallMongoidGenerator if DEVISE_TOKEN_AUTH_ORM == :mongoid
10
12
  destination Rails.root.join('tmp/generators')
11
13
 
12
14
  describe 'default values, clean install' do
@@ -26,28 +28,30 @@ module DeviseTokenAuth
26
28
  assert_file 'config/initializers/devise_token_auth.rb'
27
29
  end
28
30
 
29
- test 'migration is created' do
30
- assert_migration 'db/migrate/devise_token_auth_create_users.rb'
31
+ test 'subsequent runs raise no errors' do
32
+ run_generator
31
33
  end
32
34
 
33
- test 'migration file contains rails version' do
34
- if Rails::VERSION::MAJOR >= 5
35
- assert_migration 'db/migrate/devise_token_auth_create_users.rb', /#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}/
36
- else
35
+ if DEVISE_TOKEN_AUTH_ORM == :active_record
36
+ test 'migration is created' do
37
37
  assert_migration 'db/migrate/devise_token_auth_create_users.rb'
38
38
  end
39
- end
40
39
 
41
- test 'subsequent runs raise no errors' do
42
- run_generator
43
- end
40
+ test 'migration file contains rails version' do
41
+ if Rails::VERSION::MAJOR >= 5
42
+ assert_migration 'db/migrate/devise_token_auth_create_users.rb', /#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}/
43
+ else
44
+ assert_migration 'db/migrate/devise_token_auth_create_users.rb'
45
+ end
46
+ end
44
47
 
45
- test 'add primary key type with rails 5 when specified in rails generator' do
46
- run_generator %w[--primary_key_type=uuid --force]
47
- if Rails::VERSION::MAJOR >= 5
48
- assert_migration 'db/migrate/devise_token_auth_create_users.rb', /create_table\(:users, id: :uuid\) do/
49
- else
50
- assert_migration 'db/migrate/devise_token_auth_create_users.rb', /create_table\(:users\) do/
48
+ test 'add primary key type with rails 5 when specified in rails generator' do
49
+ run_generator %w[--primary_key_type=uuid --force]
50
+ if Rails::VERSION::MAJOR >= 5
51
+ assert_migration 'db/migrate/devise_token_auth_create_users.rb', /create_table\(:users, id: :uuid\) do/
52
+ else
53
+ assert_migration 'db/migrate/devise_token_auth_create_users.rb', /create_table\(:users\) do/
54
+ end
51
55
  end
52
56
  end
53
57
  end
@@ -63,18 +67,32 @@ module DeviseTokenAuth
63
67
  # make dir if not exists
64
68
  FileUtils.mkdir_p(@dir)
65
69
 
66
- # account for rails version 5
67
- active_record_needle = (Rails::VERSION::MAJOR == 5) ? 'ApplicationRecord' : 'ActiveRecord::Base'
70
+ case DEVISE_TOKEN_AUTH_ORM
71
+ when :active_record
72
+ # account for rails version 5
73
+ active_record_needle = (Rails::VERSION::MAJOR >= 5) ? 'ApplicationRecord' : 'ActiveRecord::Base'
68
74
 
69
- @f = File.open(@fname, 'w') do |f|
70
- f.write <<-RUBY
71
- class User < #{active_record_needle}
75
+ @f = File.open(@fname, 'w') do |f|
76
+ f.write <<-RUBY
77
+ class User < #{active_record_needle}
72
78
 
73
- def whatever
74
- puts 'whatever'
79
+ def whatever
80
+ puts 'whatever'
81
+ end
75
82
  end
76
- end
77
- RUBY
83
+ RUBY
84
+ end
85
+ when :mongoid
86
+ @f = File.open(@fname, 'w') do |f|
87
+ f.write <<-'RUBY'
88
+ class User
89
+
90
+ def whatever
91
+ puts 'whatever'
92
+ end
93
+ end
94
+ RUBY
95
+ end
78
96
  end
79
97
 
80
98
  run_generator
@@ -136,10 +154,6 @@ module DeviseTokenAuth
136
154
  run_generator %w[Mang mangs]
137
155
  end
138
156
 
139
- test 'migration is created' do
140
- assert_migration 'db/migrate/devise_token_auth_create_mangs.rb'
141
- end
142
-
143
157
  test 'route method is appended to routes file' do
144
158
  assert_file 'config/routes.rb' do |routes|
145
159
  assert_match(/mount_devise_token_auth_for 'Mang', at: 'mangs'/, routes)
@@ -152,6 +166,12 @@ module DeviseTokenAuth
152
166
  assert_match(/# Define routes for Mang within this block./, routes)
153
167
  end
154
168
  end
169
+
170
+ if DEVISE_TOKEN_AUTH_ORM == :active_record
171
+ test 'migration is created' do
172
+ assert_migration 'db/migrate/devise_token_auth_create_mangs.rb'
173
+ end
174
+ end
155
175
  end
156
176
  end
157
177
 
@@ -2,11 +2,13 @@
2
2
 
3
3
  require 'test_helper'
4
4
  require 'fileutils'
5
- require 'generators/devise_token_auth/install_generator'
5
+ require 'generators/devise_token_auth/install_generator' if DEVISE_TOKEN_AUTH_ORM == :active_record
6
+ require 'generators/devise_token_auth/install_mongoid_generator' if DEVISE_TOKEN_AUTH_ORM == :mongoid
6
7
 
7
8
  module DeviseTokenAuth
8
9
  class InstallGeneratorTest < Rails::Generators::TestCase
9
- tests InstallGenerator
10
+ tests InstallGenerator if DEVISE_TOKEN_AUTH_ORM == :active_record
11
+ tests InstallMongoidGenerator if DEVISE_TOKEN_AUTH_ORM == :mongoid
10
12
  destination Rails.root.join('tmp/generators')
11
13
 
12
14
  # The namespaced user model for testing
@@ -31,28 +33,30 @@ module DeviseTokenAuth
31
33
  assert_file 'config/initializers/devise_token_auth.rb'
32
34
  end
33
35
 
34
- test 'migration is created for user model with namespace' do
35
- assert_migration "db/migrate/devise_token_auth_create_#{table_name}.rb"
36
+ test 'subsequent runs raise no errors' do
37
+ run_generator %W[#{user_class} auth]
36
38
  end
37
39
 
38
- test 'migration file for user model with namespace contains rails version' do
39
- if Rails::VERSION::MAJOR >= 5
40
- assert_migration "db/migrate/devise_token_auth_create_#{table_name}.rb", /#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}/
41
- else
40
+ if DEVISE_TOKEN_AUTH_ORM == :active_record
41
+ test 'migration is created for user model with namespace' do
42
42
  assert_migration "db/migrate/devise_token_auth_create_#{table_name}.rb"
43
43
  end
44
- end
45
44
 
46
- test 'subsequent runs raise no errors' do
47
- run_generator %W[#{user_class} auth]
48
- end
45
+ test 'migration file for user model with namespace contains rails version' do
46
+ if Rails::VERSION::MAJOR >= 5
47
+ assert_migration "db/migrate/devise_token_auth_create_#{table_name}.rb", /#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}/
48
+ else
49
+ assert_migration "db/migrate/devise_token_auth_create_#{table_name}.rb"
50
+ end
51
+ end
49
52
 
50
- test 'add primary key type with rails 5 when specified in rails generator' do
51
- run_generator %W[#{user_class} auth --primary_key_type=uuid --force]
52
- if Rails::VERSION::MAJOR >= 5
53
- assert_migration "db/migrate/devise_token_auth_create_#{table_name}.rb", /create_table\(:#{table_name}, id: :uuid\) do/
54
- else
55
- assert_migration "db/migrate/devise_token_auth_create_#{table_name}.rb", /create_table\(:#{table_name}\) do/
53
+ test 'add primary key type with rails 5 when specified in rails generator' do
54
+ run_generator %W[#{user_class} auth --primary_key_type=uuid --force]
55
+ if Rails::VERSION::MAJOR >= 5
56
+ assert_migration "db/migrate/devise_token_auth_create_#{table_name}.rb", /create_table\(:#{table_name}, id: :uuid\) do/
57
+ else
58
+ assert_migration "db/migrate/devise_token_auth_create_#{table_name}.rb", /create_table\(:#{table_name}\) do/
59
+ end
56
60
  end
57
61
  end
58
62
  end
@@ -68,18 +72,32 @@ module DeviseTokenAuth
68
72
  # make dir if not exists
69
73
  FileUtils.mkdir_p(@dir)
70
74
 
71
- # account for rails version 5
72
- active_record_needle = (Rails::VERSION::MAJOR == 5) ? 'ApplicationRecord' : 'ActiveRecord::Base'
75
+ case DEVISE_TOKEN_AUTH_ORM
76
+ when :active_record
77
+ # account for rails version 5
78
+ active_record_needle = (Rails::VERSION::MAJOR >= 5) ? 'ApplicationRecord' : 'ActiveRecord::Base'
73
79
 
74
- @f = File.open(@fname, 'w') do |f|
75
- f.write <<-RUBY
76
- class User < #{active_record_needle}
80
+ @f = File.open(@fname, 'w') do |f|
81
+ f.write <<-RUBY
82
+ class User < #{active_record_needle}
77
83
 
78
- def whatever
79
- puts 'whatever'
84
+ def whatever
85
+ puts 'whatever'
86
+ end
80
87
  end
81
- end
82
- RUBY
88
+ RUBY
89
+ end
90
+ when :mongoid
91
+ @f = File.open(@fname, 'w') do |f|
92
+ f.write <<-'RUBY'
93
+ class User
94
+
95
+ def whatever
96
+ puts 'whatever'
97
+ end
98
+ end
99
+ RUBY
100
+ end
83
101
  end
84
102
 
85
103
  run_generator
@@ -141,10 +159,6 @@ module DeviseTokenAuth
141
159
  run_generator %w[Mang mangs]
142
160
  end
143
161
 
144
- test 'migration is created' do
145
- assert_migration 'db/migrate/devise_token_auth_create_mangs.rb'
146
- end
147
-
148
162
  test 'route method is appended to routes file' do
149
163
  assert_file 'config/routes.rb' do |routes|
150
164
  assert_match(/mount_devise_token_auth_for 'Mang', at: 'mangs'/, routes)
@@ -157,6 +171,12 @@ module DeviseTokenAuth
157
171
  assert_match(/# Define routes for Mang within this block./, routes)
158
172
  end
159
173
  end
174
+
175
+ if DEVISE_TOKEN_AUTH_ORM == :active_record
176
+ test 'migration is created' do
177
+ assert_migration 'db/migrate/devise_token_auth_create_mangs.rb'
178
+ end
179
+ end
160
180
  end
161
181
  end
162
182
 
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ if DEVISE_TOKEN_AUTH_ORM == :mongoid
6
+ class DeviseTokenAuth::Concerns::MongoidSupportTest < ActiveSupport::TestCase
7
+ describe DeviseTokenAuth::Concerns::MongoidSupport do
8
+ before do
9
+ @user = create(:user)
10
+ end
11
+
12
+ describe '#as_json' do
13
+ test 'should be defined' do
14
+ assert @user.methods.include?(:as_json)
15
+ end
16
+
17
+ test 'should except _id attribute' do
18
+ refute @user.as_json.key?('_id')
19
+ end
20
+
21
+ test 'should return with id attribute' do
22
+ assert_equal @user._id.to_s, @user.as_json['id']
23
+ end
24
+
25
+ test 'should accept options' do
26
+ refute @user.as_json(except: [:created_at]).key?('created_at')
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,104 @@
1
+ require 'test_helper'
2
+
3
+ if DEVISE_TOKEN_AUTH_ORM == :active_record
4
+ describe 'DeviseTokenAuth::Concerns::TokensSerialization' do
5
+ let(:ts) { DeviseTokenAuth::Concerns::TokensSerialization }
6
+ let(:user) { FactoryBot.create(:user) }
7
+ let(:tokens) do
8
+ # Сreate all possible token's attributes combinations
9
+ user.create_token
10
+ 2.times { user.create_new_auth_token(user.tokens.first[0]) }
11
+ user.create_new_auth_token
12
+ user.create_token
13
+
14
+ user.tokens
15
+ end
16
+
17
+ it 'is defined' do
18
+ assert_equal(ts.present?, true)
19
+ assert_kind_of(Module, ts)
20
+ end
21
+
22
+ describe '.load(json)' do
23
+
24
+ let(:json) { JSON.generate(tokens) }
25
+
26
+ let(:default) { {} }
27
+
28
+ it 'is defined' do
29
+ assert_respond_to(ts, :load)
30
+ end
31
+
32
+ it 'handles nil' do
33
+ assert_equal(ts.load(nil), default)
34
+ end
35
+
36
+ it 'handles string' do
37
+ assert_equal(ts.load(json), JSON.parse(json))
38
+ end
39
+
40
+ it 'returns object of undesirable class' do
41
+ assert_equal(ts.load([]), [])
42
+ end
43
+ end
44
+
45
+ describe '.dump(object)' do
46
+ let(:default) { 'null' }
47
+
48
+ it 'is defined' do
49
+ assert_respond_to(ts, :dump)
50
+ end
51
+
52
+ it 'handles nil' do
53
+ assert_equal(ts.dump(nil), default)
54
+ end
55
+
56
+ it 'handles empty hash' do
57
+ assert_equal(ts.dump({}), '{}')
58
+ end
59
+
60
+ it 'removes nil values' do
61
+ new_tokens = tokens.dup
62
+ new_tokens[new_tokens.first[0]][:kos] = nil
63
+
64
+ assert_equal(ts.dump(tokens), ts.dump(new_tokens))
65
+ end
66
+
67
+ describe 'updated_at' do
68
+ before do
69
+ @default_format = ::Time::DATE_FORMATS[:default]
70
+ ::Time::DATE_FORMATS[:default] = 'imprecise format'
71
+ end
72
+
73
+ after do
74
+ ::Time::DATE_FORMATS[:default] = @default_format
75
+ end
76
+
77
+ def updated_ats(tokens)
78
+ tokens.
79
+ values.
80
+ flat_map do |token|
81
+ [:updated_at, 'updated_at'].map do |key|
82
+ token[key]
83
+ end
84
+ end.
85
+ compact
86
+ end
87
+
88
+ it 'is defined' do
89
+ refute_empty updated_ats(tokens)
90
+ end
91
+
92
+ it 'uses iso8601' do
93
+ updated_ats(JSON.parse(ts.dump(tokens))).each do |updated_at|
94
+ Time.strptime(updated_at, '%Y-%m-%dT%H:%M:%SZ')
95
+ end
96
+ end
97
+
98
+ it 'does not rely on Time#to_s' do
99
+ refute_includes(updated_ats(tokens), 'imprecise format')
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class ConfirmableUserTest < ActiveSupport::TestCase
6
+ describe ConfirmableUser do
7
+ describe 'creation' do
8
+ test 'email should be saved' do
9
+ @resource = create(:confirmable_user)
10
+ assert @resource.email.present?
11
+ end
12
+ end
13
+
14
+ describe 'updating email' do
15
+ test 'new email should be saved to unconfirmed_email' do
16
+ @resource = create(:confirmable_user, email: 'old_address@example.com')
17
+ @resource.update(email: 'new_address@example.com')
18
+ assert @resource.unconfirmed_email == 'new_address@example.com'
19
+ end
20
+
21
+ test 'old email should be kept in email' do
22
+ @resource = create(:confirmable_user, email: 'old_address@example.com')
23
+ @resource.update(email: 'new_address@example.com')
24
+ assert @resource.email == 'old_address@example.com'
25
+ end
26
+
27
+ test 'confirmation_token should be changed' do
28
+ @resource = create(:confirmable_user, email: 'old_address@example.com')
29
+ old_token = @resource.confirmation_token
30
+ @resource.update(email: 'new_address@example.com')
31
+ assert @resource.confirmation_token != old_token
32
+ end
33
+ end
34
+ end
35
+ end
@@ -4,14 +4,6 @@ require 'test_helper'
4
4
 
5
5
  class OnlyEmailUserTest < ActiveSupport::TestCase
6
6
  describe OnlyEmailUser do
7
- test 'trackable is disabled' do
8
- refute OnlyEmailUser.method_defined?(:sign_in_count)
9
- refute OnlyEmailUser.method_defined?(:current_sign_in_at)
10
- refute OnlyEmailUser.method_defined?(:last_sign_in_at)
11
- refute OnlyEmailUser.method_defined?(:current_sign_in_ip)
12
- refute OnlyEmailUser.method_defined?(:last_sign_in_ip)
13
- end
14
-
15
7
  test 'confirmable is disabled' do
16
8
  refute OnlyEmailUser.method_defined?(:confirmation_token)
17
9
  refute OnlyEmailUser.method_defined?(:confirmed_at)
@@ -44,7 +44,7 @@ class UserTest < ActiveSupport::TestCase
44
44
  @resource = build(:user, user_attributes)
45
45
 
46
46
  refute @resource.save
47
- assert @resource.errors.messages[:email] == [I18n.t('errors.messages.taken')]
47
+ assert @resource.errors.messages[:email].first.include? 'taken'
48
48
  assert @resource.errors.messages[:email].none? { |e| e =~ /translation missing/ }
49
49
  end
50
50
  end
@@ -76,38 +76,6 @@ class UserTest < ActiveSupport::TestCase
76
76
  end
77
77
  end
78
78
 
79
- describe 'user specific token lifespan' do
80
- before do
81
- @resource = create(:user, :confirmed)
82
-
83
- auth_headers = @resource.create_new_auth_token
84
- @token_global = auth_headers['access-token']
85
- @client_id_global = auth_headers['client']
86
-
87
- def @resource.token_lifespan
88
- 1.minute
89
- end
90
-
91
- auth_headers = @resource.create_new_auth_token
92
- @token_specific = auth_headers['access-token']
93
- @client_id_specific = auth_headers['client']
94
- end
95
-
96
- test 'works per user' do
97
- assert @resource.token_is_current?(@token_global, @client_id_global)
98
-
99
- time = Time.zone.now.to_i
100
- expiry_global = @resource.tokens[@client_id_global]['expiry'] || @resource.tokens[@client_id_global][:expiry]
101
-
102
- assert expiry_global > time + DeviseTokenAuth.token_lifespan - 5.seconds
103
- assert expiry_global < time + DeviseTokenAuth.token_lifespan + 5.seconds
104
-
105
- expiry_specific = @resource.tokens[@client_id_specific]['expiry'] || @resource.tokens[@client_id_specific][:expiry]
106
- assert expiry_specific > time + 55.seconds
107
- assert expiry_specific < time + 65.seconds
108
- end
109
- end
110
-
111
79
  describe 'expired tokens are destroyed on save' do
112
80
  before do
113
81
  @resource = create(:user, :confirmed)
data/test/test_helper.rb CHANGED
@@ -7,11 +7,15 @@ SimpleCov.start 'rails' do
7
7
  end
8
8
 
9
9
  ENV['RAILS_ENV'] = 'test'
10
+ DEVISE_TOKEN_AUTH_ORM = (ENV['DEVISE_TOKEN_AUTH_ORM'] || :active_record).to_sym
11
+
12
+ puts "\n==> DeviseTokenAuth.orm = #{DEVISE_TOKEN_AUTH_ORM.inspect}"
10
13
 
11
14
  require File.expand_path('dummy/config/environment', __dir__)
12
- require 'rails/test_help'
15
+ require 'active_support/testing/autorun'
13
16
  require 'minitest/rails'
14
17
  require 'mocha/minitest'
18
+ require 'database_cleaner'
15
19
 
16
20
  FactoryBot.definition_file_paths = [File.expand_path('factories', __dir__)]
17
21
  FactoryBot.find_definitions
@@ -30,13 +34,19 @@ end
30
34
  class ActiveSupport::TestCase
31
35
  include FactoryBot::Syntax::Methods
32
36
 
33
- ActiveRecord::Migration.check_pending!
37
+ ActiveRecord::Migration.check_pending! if DEVISE_TOKEN_AUTH_ORM == :active_record
38
+
39
+ strategies = { active_record: :transaction,
40
+ mongoid: :truncation }
41
+ DatabaseCleaner.strategy = strategies[DEVISE_TOKEN_AUTH_ORM]
42
+ setup { DatabaseCleaner.start }
43
+ teardown { DatabaseCleaner.clean }
34
44
 
35
45
  # Add more helper methods to be used by all tests here...
36
46
 
37
47
  def age_token(user, client_id)
38
48
  if user.tokens[client_id]
39
- user.tokens[client_id]['updated_at'] = Time.zone.now - (DeviseTokenAuth.batch_request_buffer_throttle + 10.seconds)
49
+ user.tokens[client_id]['updated_at'] = (Time.zone.now - (DeviseTokenAuth.batch_request_buffer_throttle + 10.seconds))
40
50
  user.save!
41
51
  end
42
52
  end