devise_token_auth 1.0.0 → 1.2.2
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.
- checksums.yaml +5 -5
- data/README.md +6 -3
- data/app/controllers/devise_token_auth/application_controller.rb +23 -3
- data/app/controllers/devise_token_auth/concerns/resource_finder.rb +24 -11
- data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +78 -57
- data/app/controllers/devise_token_auth/confirmations_controller.rb +69 -19
- data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +89 -44
- data/app/controllers/devise_token_auth/passwords_controller.rb +55 -31
- data/app/controllers/devise_token_auth/registrations_controller.rb +33 -40
- data/app/controllers/devise_token_auth/sessions_controller.rb +36 -14
- data/app/controllers/devise_token_auth/unlocks_controller.rb +12 -7
- data/app/models/devise_token_auth/concerns/active_record_support.rb +14 -0
- data/app/models/devise_token_auth/concerns/confirmable_support.rb +28 -0
- data/app/models/devise_token_auth/concerns/mongoid_support.rb +19 -0
- data/app/models/devise_token_auth/concerns/tokens_serialization.rb +31 -0
- data/app/models/devise_token_auth/concerns/user.rb +79 -80
- data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +12 -5
- data/app/validators/{email_validator.rb → devise_token_auth_email_validator.rb} +11 -3
- data/app/views/devise_token_auth/omniauth_external_window.html.erb +1 -1
- data/config/locales/da-DK.yml +2 -0
- data/config/locales/de.yml +2 -0
- data/config/locales/en.yml +10 -0
- data/config/locales/es.yml +2 -0
- data/config/locales/fr.yml +2 -0
- data/config/locales/he.yml +52 -0
- data/config/locales/it.yml +2 -0
- data/config/locales/ja.yml +16 -2
- data/config/locales/ko.yml +51 -0
- data/config/locales/nl.yml +2 -0
- data/config/locales/pl.yml +6 -3
- data/config/locales/pt-BR.yml +2 -0
- data/config/locales/pt.yml +6 -3
- data/config/locales/ro.yml +2 -0
- data/config/locales/ru.yml +2 -0
- data/config/locales/sq.yml +2 -0
- data/config/locales/sv.yml +2 -0
- data/config/locales/uk.yml +2 -0
- data/config/locales/vi.yml +2 -0
- data/config/locales/zh-CN.yml +2 -0
- data/config/locales/zh-HK.yml +2 -0
- data/config/locales/zh-TW.yml +2 -0
- data/lib/devise_token_auth/blacklist.rb +6 -0
- data/lib/devise_token_auth/controllers/helpers.rb +5 -9
- data/lib/devise_token_auth/engine.rb +17 -2
- data/lib/devise_token_auth/rails/routes.rb +22 -16
- data/lib/devise_token_auth/token_factory.rb +126 -0
- data/lib/devise_token_auth/url.rb +3 -0
- data/lib/devise_token_auth/version.rb +1 -1
- data/lib/devise_token_auth.rb +6 -3
- data/lib/generators/devise_token_auth/USAGE +1 -1
- data/lib/generators/devise_token_auth/install_generator.rb +7 -91
- data/lib/generators/devise_token_auth/install_generator_helpers.rb +98 -0
- data/lib/generators/devise_token_auth/install_mongoid_generator.rb +46 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +21 -5
- data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +1 -8
- data/lib/generators/devise_token_auth/templates/user.rb.erb +2 -2
- data/lib/generators/devise_token_auth/templates/user_mongoid.rb.erb +56 -0
- data/test/controllers/custom/custom_confirmations_controller_test.rb +2 -2
- data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +1 -1
- data/test/controllers/demo_mang_controller_test.rb +37 -8
- data/test/controllers/demo_user_controller_test.rb +39 -10
- data/test/controllers/devise_token_auth/confirmations_controller_test.rb +170 -22
- data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +117 -53
- data/test/controllers/devise_token_auth/passwords_controller_test.rb +299 -122
- data/test/controllers/devise_token_auth/registrations_controller_test.rb +56 -16
- data/test/controllers/devise_token_auth/sessions_controller_test.rb +139 -75
- data/test/controllers/devise_token_auth/token_validations_controller_test.rb +43 -2
- data/test/controllers/devise_token_auth/unlocks_controller_test.rb +44 -5
- data/test/controllers/overrides/confirmations_controller_test.rb +1 -1
- data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +1 -1
- data/test/dummy/app/active_record/confirmable_user.rb +11 -0
- data/test/dummy/app/{models → active_record}/scoped_user.rb +2 -2
- data/test/dummy/app/{models → active_record}/unconfirmable_user.rb +1 -2
- data/test/dummy/app/{models → active_record}/unregisterable_user.rb +3 -3
- data/test/dummy/app/active_record/user.rb +6 -0
- data/test/dummy/app/controllers/application_controller.rb +2 -6
- data/test/dummy/app/controllers/overrides/confirmations_controller.rb +5 -4
- data/test/dummy/app/controllers/overrides/passwords_controller.rb +5 -4
- data/test/dummy/app/controllers/overrides/registrations_controller.rb +1 -1
- data/test/dummy/app/controllers/overrides/sessions_controller.rb +2 -2
- data/test/dummy/app/models/{user.rb → concerns/favorite_color.rb} +7 -8
- data/test/dummy/app/mongoid/confirmable_user.rb +52 -0
- data/test/dummy/app/mongoid/lockable_user.rb +38 -0
- data/test/dummy/app/mongoid/mang.rb +46 -0
- data/test/dummy/app/mongoid/only_email_user.rb +33 -0
- data/test/dummy/app/mongoid/scoped_user.rb +50 -0
- data/test/dummy/app/mongoid/unconfirmable_user.rb +44 -0
- data/test/dummy/app/mongoid/unregisterable_user.rb +47 -0
- data/test/dummy/app/mongoid/user.rb +49 -0
- data/test/dummy/app/views/layouts/application.html.erb +0 -2
- data/test/dummy/config/application.rb +22 -1
- data/test/dummy/config/boot.rb +4 -0
- data/test/dummy/config/environments/development.rb +0 -10
- data/test/dummy/config/environments/production.rb +0 -16
- data/test/dummy/config/environments/test.rb +6 -2
- data/test/dummy/config/initializers/devise.rb +285 -0
- data/test/dummy/config/initializers/devise_token_auth.rb +35 -4
- data/test/dummy/config/initializers/figaro.rb +1 -1
- data/test/dummy/config/initializers/omniauth.rb +1 -0
- data/test/dummy/config/routes.rb +2 -0
- data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +0 -7
- data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +0 -7
- data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +0 -7
- data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +0 -7
- data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +0 -7
- data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +0 -7
- data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +0 -7
- data/test/dummy/db/migrate/20190924101113_devise_token_auth_create_confirmable_users.rb +49 -0
- data/test/dummy/db/schema.rb +31 -33
- data/test/dummy/tmp/generators/app/models/user.rb +9 -0
- data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +66 -0
- data/test/dummy/tmp/generators/db/migrate/20230415183419_devise_token_auth_create_users.rb +49 -0
- data/test/factories/users.rb +3 -2
- data/test/lib/devise_token_auth/blacklist_test.rb +19 -0
- data/test/lib/devise_token_auth/rails/custom_routes_test.rb +29 -0
- data/test/lib/devise_token_auth/rails/routes_test.rb +87 -0
- data/test/lib/devise_token_auth/token_factory_test.rb +191 -0
- data/test/lib/devise_token_auth/url_test.rb +2 -2
- data/test/lib/generators/devise_token_auth/install_generator_test.rb +51 -31
- data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +51 -31
- data/test/models/concerns/mongoid_support_test.rb +31 -0
- data/test/models/concerns/tokens_serialization_test.rb +104 -0
- data/test/models/confirmable_user_test.rb +35 -0
- data/test/models/only_email_user_test.rb +0 -8
- data/test/models/user_test.rb +13 -23
- data/test/test_helper.rb +45 -4
- metadata +190 -97
- data/config/initializers/devise.rb +0 -198
- data/test/dummy/config/initializers/assets.rb +0 -10
- data/test/dummy/tmp/generators/app/views/devise/mailer/confirmation_instructions.html.erb +0 -5
- data/test/dummy/tmp/generators/app/views/devise/mailer/reset_password_instructions.html.erb +0 -8
- /data/test/dummy/app/{models → active_record}/lockable_user.rb +0 -0
- /data/test/dummy/app/{models → active_record}/mang.rb +0 -0
- /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
|
# 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 '
|
35
|
-
|
36
|
+
test 'subsequent runs raise no errors' do
|
37
|
+
run_generator %W[#{user_class} auth]
|
36
38
|
end
|
37
39
|
|
38
|
-
|
39
|
-
|
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
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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
|
-
|
72
|
-
|
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
|
-
|
75
|
-
|
76
|
-
|
80
|
+
@f = File.open(@fname, 'w') do |f|
|
81
|
+
f.write <<-RUBY
|
82
|
+
class User < #{active_record_needle}
|
77
83
|
|
78
|
-
|
79
|
-
|
84
|
+
def whatever
|
85
|
+
puts 'whatever'
|
86
|
+
end
|
80
87
|
end
|
81
|
-
|
82
|
-
|
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)
|
data/test/models/user_test.rb
CHANGED
@@ -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]
|
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,35 +76,25 @@ class UserTest < ActiveSupport::TestCase
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
describe '
|
79
|
+
describe 'previous token' do
|
80
80
|
before do
|
81
81
|
@resource = create(:user, :confirmed)
|
82
82
|
|
83
|
-
|
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']
|
83
|
+
@auth_headers1 = @resource.create_new_auth_token
|
94
84
|
end
|
95
85
|
|
96
|
-
test '
|
97
|
-
assert @resource.token_is_current?(@
|
98
|
-
|
99
|
-
|
100
|
-
expiry_global = @resource.tokens[@client_id_global]['expiry'] || @resource.tokens[@client_id_global][:expiry]
|
86
|
+
test 'should properly indicate whether previous token is current' do
|
87
|
+
assert @resource.token_is_current?(@auth_headers1['access-token'], @auth_headers1['client'])
|
88
|
+
# create another token, emulating a new request
|
89
|
+
@auth_headers2 = @resource.create_new_auth_token
|
101
90
|
|
102
|
-
|
103
|
-
assert
|
91
|
+
# should work for previous token
|
92
|
+
assert @resource.token_is_current?(@auth_headers1['access-token'], @auth_headers1['client'])
|
93
|
+
# should work for latest token as well
|
94
|
+
assert @resource.token_is_current?(@auth_headers2['access-token'], @auth_headers2['client'])
|
104
95
|
|
105
|
-
|
106
|
-
assert
|
107
|
-
assert expiry_specific < time + 65.seconds
|
96
|
+
# after using latest token, previous token should not work
|
97
|
+
assert @resource.token_is_current?(@auth_headers1['access-token'], @auth_headers1['client'])
|
108
98
|
end
|
109
99
|
end
|
110
100
|
|
data/test/test_helper.rb
CHANGED
@@ -7,11 +7,19 @@ 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 '
|
15
|
+
require 'active_support/testing/autorun'
|
13
16
|
require 'minitest/rails'
|
14
17
|
require 'mocha/minitest'
|
18
|
+
if DEVISE_TOKEN_AUTH_ORM == :active_record
|
19
|
+
require 'database_cleaner'
|
20
|
+
else
|
21
|
+
require 'database_cleaner/mongoid'
|
22
|
+
end
|
15
23
|
|
16
24
|
FactoryBot.definition_file_paths = [File.expand_path('factories', __dir__)]
|
17
25
|
FactoryBot.find_definitions
|
@@ -30,13 +38,46 @@ end
|
|
30
38
|
class ActiveSupport::TestCase
|
31
39
|
include FactoryBot::Syntax::Methods
|
32
40
|
|
33
|
-
ActiveRecord::Migration.check_pending!
|
41
|
+
ActiveRecord::Migration.check_pending! if DEVISE_TOKEN_AUTH_ORM == :active_record
|
42
|
+
|
43
|
+
strategies = { active_record: :transaction,
|
44
|
+
mongoid: :deletion }
|
45
|
+
DatabaseCleaner.strategy = strategies[DEVISE_TOKEN_AUTH_ORM]
|
46
|
+
setup { DatabaseCleaner.start }
|
47
|
+
teardown { DatabaseCleaner.clean }
|
34
48
|
|
35
49
|
# Add more helper methods to be used by all tests here...
|
36
50
|
|
51
|
+
# Execute the block setting the given values and restoring old values after
|
52
|
+
# the block is executed.
|
53
|
+
# shamelessly copied from devise test_helper.
|
54
|
+
def swap(object, new_values)
|
55
|
+
old_values = {}
|
56
|
+
new_values.each do |key, value|
|
57
|
+
old_values[key] = object.send key
|
58
|
+
object.send :"#{key}=", value
|
59
|
+
end
|
60
|
+
clear_cached_variables(new_values)
|
61
|
+
yield
|
62
|
+
ensure
|
63
|
+
clear_cached_variables(new_values)
|
64
|
+
old_values.each do |key, value|
|
65
|
+
object.send :"#{key}=", value
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# shamelessly copied from devise test_helper.
|
70
|
+
def clear_cached_variables(options)
|
71
|
+
if options.key?(:case_insensitive_keys) || options.key?(:strip_whitespace_keys)
|
72
|
+
Devise.mappings.each do |_, mapping|
|
73
|
+
mapping.to.instance_variable_set(:@devise_parameter_filter, nil)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
37
78
|
def age_token(user, client_id)
|
38
79
|
if user.tokens[client_id]
|
39
|
-
user.tokens[client_id]['updated_at'] = Time.zone.now - (DeviseTokenAuth.batch_request_buffer_throttle + 10.seconds)
|
80
|
+
user.tokens[client_id]['updated_at'] = (Time.zone.now - (DeviseTokenAuth.batch_request_buffer_throttle + 10.seconds))
|
40
81
|
user.save!
|
41
82
|
end
|
42
83
|
end
|
@@ -75,7 +116,7 @@ module Rails
|
|
75
116
|
%w[get post patch put head delete get_via_redirect post_via_redirect].each do |method|
|
76
117
|
define_method(method) do |path_or_action, **args|
|
77
118
|
if Rails::VERSION::MAJOR >= 5
|
78
|
-
super path_or_action, args
|
119
|
+
super path_or_action, **args
|
79
120
|
else
|
80
121
|
super path_or_action, args[:params], args[:headers]
|
81
122
|
end
|