devise_token_auth_skycocker_fork 1.0.0
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 +7 -0
- data/LICENSE +13 -0
- data/README.md +97 -0
- data/Rakefile +42 -0
- data/app/controllers/devise_token_auth/application_controller.rb +79 -0
- data/app/controllers/devise_token_auth/concerns/resource_finder.rb +44 -0
- data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +178 -0
- data/app/controllers/devise_token_auth/confirmations_controller.rb +39 -0
- data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +239 -0
- data/app/controllers/devise_token_auth/passwords_controller.rb +185 -0
- data/app/controllers/devise_token_auth/registrations_controller.rb +198 -0
- data/app/controllers/devise_token_auth/sessions_controller.rb +131 -0
- data/app/controllers/devise_token_auth/token_validations_controller.rb +31 -0
- data/app/controllers/devise_token_auth/unlocks_controller.rb +89 -0
- data/app/models/devise_token_auth/concerns/active_record_support.rb +34 -0
- data/app/models/devise_token_auth/concerns/mongoid_support.rb +19 -0
- data/app/models/devise_token_auth/concerns/user.rb +262 -0
- data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +28 -0
- data/app/validators/devise_token_auth/email_validator.rb +23 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise_token_auth/omniauth_external_window.html.erb +38 -0
- data/config/locales/da-DK.yml +50 -0
- data/config/locales/de.yml +49 -0
- data/config/locales/en.yml +50 -0
- data/config/locales/es.yml +49 -0
- data/config/locales/fr.yml +49 -0
- data/config/locales/it.yml +46 -0
- data/config/locales/ja.yml +46 -0
- data/config/locales/nl.yml +30 -0
- data/config/locales/pl.yml +48 -0
- data/config/locales/pt-BR.yml +46 -0
- data/config/locales/pt.yml +48 -0
- data/config/locales/ro.yml +46 -0
- data/config/locales/ru.yml +50 -0
- data/config/locales/sq.yml +46 -0
- data/config/locales/sv.yml +50 -0
- data/config/locales/uk.yml +59 -0
- data/config/locales/vi.yml +50 -0
- data/config/locales/zh-CN.yml +46 -0
- data/config/locales/zh-HK.yml +48 -0
- data/config/locales/zh-TW.yml +48 -0
- data/lib/devise_token_auth.rb +13 -0
- data/lib/devise_token_auth/blacklist.rb +2 -0
- data/lib/devise_token_auth/controllers/helpers.rb +161 -0
- data/lib/devise_token_auth/controllers/url_helpers.rb +10 -0
- data/lib/devise_token_auth/engine.rb +90 -0
- data/lib/devise_token_auth/errors.rb +8 -0
- data/lib/devise_token_auth/rails/routes.rb +116 -0
- data/lib/devise_token_auth/url.rb +41 -0
- data/lib/devise_token_auth/version.rb +5 -0
- data/lib/generators/devise_token_auth/USAGE +31 -0
- data/lib/generators/devise_token_auth/install_generator.rb +91 -0
- 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/install_views_generator.rb +18 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +50 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +56 -0
- data/lib/generators/devise_token_auth/templates/user.rb.erb +9 -0
- data/lib/generators/devise_token_auth/templates/user_mongoid.rb.erb +63 -0
- data/lib/tasks/devise_token_auth_tasks.rake +6 -0
- data/test/controllers/custom/custom_confirmations_controller_test.rb +25 -0
- data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +33 -0
- data/test/controllers/custom/custom_passwords_controller_test.rb +79 -0
- data/test/controllers/custom/custom_registrations_controller_test.rb +63 -0
- data/test/controllers/custom/custom_sessions_controller_test.rb +39 -0
- data/test/controllers/custom/custom_token_validations_controller_test.rb +42 -0
- data/test/controllers/demo_group_controller_test.rb +151 -0
- data/test/controllers/demo_mang_controller_test.rb +284 -0
- data/test/controllers/demo_user_controller_test.rb +629 -0
- data/test/controllers/devise_token_auth/confirmations_controller_test.rb +127 -0
- data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +376 -0
- data/test/controllers/devise_token_auth/passwords_controller_test.rb +639 -0
- data/test/controllers/devise_token_auth/registrations_controller_test.rb +880 -0
- data/test/controllers/devise_token_auth/sessions_controller_test.rb +541 -0
- data/test/controllers/devise_token_auth/token_validations_controller_test.rb +102 -0
- data/test/controllers/devise_token_auth/unlocks_controller_test.rb +196 -0
- data/test/controllers/overrides/confirmations_controller_test.rb +47 -0
- data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +53 -0
- data/test/controllers/overrides/passwords_controller_test.rb +64 -0
- data/test/controllers/overrides/registrations_controller_test.rb +46 -0
- data/test/controllers/overrides/sessions_controller_test.rb +35 -0
- data/test/controllers/overrides/token_validations_controller_test.rb +43 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/app/active_record/lockable_user.rb +7 -0
- data/test/dummy/app/active_record/mang.rb +5 -0
- data/test/dummy/app/active_record/only_email_user.rb +7 -0
- data/test/dummy/app/active_record/scoped_user.rb +9 -0
- data/test/dummy/app/active_record/unconfirmable_user.rb +9 -0
- data/test/dummy/app/active_record/unregisterable_user.rb +9 -0
- data/test/dummy/app/active_record/user.rb +6 -0
- data/test/dummy/app/controllers/application_controller.rb +18 -0
- data/test/dummy/app/controllers/auth_origin_controller.rb +7 -0
- data/test/dummy/app/controllers/custom/confirmations_controller.rb +13 -0
- data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +13 -0
- data/test/dummy/app/controllers/custom/passwords_controller.rb +39 -0
- data/test/dummy/app/controllers/custom/registrations_controller.rb +39 -0
- data/test/dummy/app/controllers/custom/sessions_controller.rb +29 -0
- data/test/dummy/app/controllers/custom/token_validations_controller.rb +19 -0
- data/test/dummy/app/controllers/demo_group_controller.rb +15 -0
- data/test/dummy/app/controllers/demo_mang_controller.rb +14 -0
- data/test/dummy/app/controllers/demo_user_controller.rb +27 -0
- data/test/dummy/app/controllers/overrides/confirmations_controller.rb +28 -0
- data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +16 -0
- data/test/dummy/app/controllers/overrides/passwords_controller.rb +35 -0
- data/test/dummy/app/controllers/overrides/registrations_controller.rb +29 -0
- data/test/dummy/app/controllers/overrides/sessions_controller.rb +36 -0
- data/test/dummy/app/controllers/overrides/token_validations_controller.rb +23 -0
- data/test/dummy/app/helpers/application_helper.rb +1058 -0
- data/test/dummy/app/models/concerns/favorite_color.rb +19 -0
- data/test/dummy/app/mongoid/lockable_user.rb +38 -0
- data/test/dummy/app/mongoid/mang.rb +53 -0
- data/test/dummy/app/mongoid/only_email_user.rb +33 -0
- data/test/dummy/app/mongoid/scoped_user.rb +57 -0
- data/test/dummy/app/mongoid/unconfirmable_user.rb +51 -0
- data/test/dummy/app/mongoid/unregisterable_user.rb +54 -0
- data/test/dummy/app/mongoid/user.rb +56 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +18 -0
- data/test/dummy/config/application.rb +48 -0
- data/test/dummy/config/application.yml.bk +0 -0
- data/test/dummy/config/boot.rb +11 -0
- data/test/dummy/config/environment.rb +7 -0
- data/test/dummy/config/environments/development.rb +46 -0
- data/test/dummy/config/environments/production.rb +84 -0
- data/test/dummy/config/environments/test.rb +50 -0
- data/test/dummy/config/initializers/assets.rb +10 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +9 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/devise.rb +17 -0
- data/test/dummy/config/initializers/devise_token_auth.rb +24 -0
- data/test/dummy/config/initializers/figaro.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -0
- data/test/dummy/config/initializers/inflections.rb +18 -0
- data/test/dummy/config/initializers/mime_types.rb +6 -0
- data/test/dummy/config/initializers/omniauth.rb +10 -0
- data/test/dummy/config/initializers/session_store.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +16 -0
- data/test/dummy/config/routes.rb +55 -0
- data/test/dummy/config/spring.rb +3 -0
- data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +65 -0
- data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +64 -0
- data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +8 -0
- data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +7 -0
- data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +62 -0
- data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +63 -0
- data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +63 -0
- data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +63 -0
- data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +63 -0
- data/test/dummy/db/schema.rb +200 -0
- data/test/dummy/lib/migration_database_helper.rb +43 -0
- data/test/dummy/tmp/generators/app/models/user.rb +9 -0
- data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +50 -0
- data/test/dummy/tmp/generators/db/migrate/20181030122248_devise_token_auth_create_users.rb +56 -0
- data/test/factories/users.rb +40 -0
- data/test/lib/devise_token_auth/blacklist_test.rb +11 -0
- data/test/lib/devise_token_auth/url_test.rb +26 -0
- data/test/lib/generators/devise_token_auth/install_generator_test.rb +217 -0
- data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +222 -0
- data/test/lib/generators/devise_token_auth/install_views_generator_test.rb +25 -0
- data/test/models/concerns/mongoid_support_test.rb +31 -0
- data/test/models/only_email_user_test.rb +37 -0
- data/test/models/user_test.rb +140 -0
- data/test/support/controllers/routes.rb +43 -0
- data/test/test_helper.rb +103 -0
- metadata +443 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# polyfill Rails >= 5 versioned migrations
|
|
4
|
+
|
|
5
|
+
unless ActiveRecord::Migration.respond_to?(:[])
|
|
6
|
+
module ActiveRecord
|
|
7
|
+
class Migration
|
|
8
|
+
def self.[](_version)
|
|
9
|
+
self
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module MigrationDatabaseHelper
|
|
16
|
+
def json_supported_database?
|
|
17
|
+
(postgres? && postgres_correct_version?) || (mysql? && mysql_correct_version?)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def postgres?
|
|
21
|
+
database_name == 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def postgres_correct_version?
|
|
25
|
+
database_version > '9.3'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def mysql?
|
|
29
|
+
database_name == 'ActiveRecord::ConnectionAdapters::MysqlAdapter'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def mysql_correct_version?
|
|
33
|
+
database_version > '5.7.7'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def database_name
|
|
37
|
+
ActiveRecord::Base.connection.class.name
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def database_version
|
|
41
|
+
ActiveRecord::Base.connection.select_value('SELECT VERSION()')
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class User < ActiveRecord::Base
|
|
4
|
+
# Include default devise modules. Others available are:
|
|
5
|
+
# :confirmable, :lockable, :timeoutable and :omniauthable
|
|
6
|
+
devise :database_authenticatable, :registerable,
|
|
7
|
+
:recoverable, :rememberable, :trackable, :validatable
|
|
8
|
+
include DeviseTokenAuth::Concerns::User
|
|
9
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
DeviseTokenAuth.setup do |config|
|
|
4
|
+
# By default the authorization headers will change after each request. The
|
|
5
|
+
# client is responsible for keeping track of the changing tokens. Change
|
|
6
|
+
# this to false to prevent the Authorization header from changing after
|
|
7
|
+
# each request.
|
|
8
|
+
# config.change_headers_on_each_request = true
|
|
9
|
+
|
|
10
|
+
# By default, users will need to re-authenticate after 2 weeks. This setting
|
|
11
|
+
# determines how long tokens will remain valid after they are issued.
|
|
12
|
+
# config.token_lifespan = 2.weeks
|
|
13
|
+
|
|
14
|
+
# Sets the max number of concurrent devices per user, which is 10 by default.
|
|
15
|
+
# After this limit is reached, the oldest tokens will be removed.
|
|
16
|
+
# config.max_number_of_devices = 10
|
|
17
|
+
|
|
18
|
+
# Sometimes it's necessary to make several requests to the API at the same
|
|
19
|
+
# time. In this case, each request in the batch will need to share the same
|
|
20
|
+
# auth token. This setting determines how far apart the requests can be while
|
|
21
|
+
# still using the same auth token.
|
|
22
|
+
# config.batch_request_buffer_throttle = 5.seconds
|
|
23
|
+
|
|
24
|
+
# This route will be the prefix for all oauth2 redirect callbacks. For
|
|
25
|
+
# example, using the default '/omniauth', the github oauth2 provider will
|
|
26
|
+
# redirect successful authentications to '/omniauth/github/callback'
|
|
27
|
+
# config.omniauth_prefix = "/omniauth"
|
|
28
|
+
|
|
29
|
+
# By default sending current password is not needed for the password update.
|
|
30
|
+
# Uncomment to enforce current_password param to be checked before all
|
|
31
|
+
# attribute updates. Set it to :password if you want it to be checked only if
|
|
32
|
+
# password is updated.
|
|
33
|
+
# config.check_current_password_before_update = :attributes
|
|
34
|
+
|
|
35
|
+
# By default we will use callbacks for single omniauth.
|
|
36
|
+
# It depends on fields like email, provider and uid.
|
|
37
|
+
# config.default_callbacks = true
|
|
38
|
+
|
|
39
|
+
# Makes it possible to change the headers names
|
|
40
|
+
# config.headers_names = {:'access-token' => 'access-token',
|
|
41
|
+
# :'client' => 'client',
|
|
42
|
+
# :'expiry' => 'expiry',
|
|
43
|
+
# :'uid' => 'uid',
|
|
44
|
+
# :'token-type' => 'token-type' }
|
|
45
|
+
|
|
46
|
+
# By default, only Bearer Token authentication is implemented out of the box.
|
|
47
|
+
# If, however, you wish to integrate with legacy Devise authentication, you can
|
|
48
|
+
# do so by enabling this flag. NOTE: This feature is highly experimental!
|
|
49
|
+
# config.enable_standard_devise_support = false
|
|
50
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
class DeviseTokenAuthCreateUsers < ActiveRecord::Migration[5.2]
|
|
2
|
+
def change
|
|
3
|
+
|
|
4
|
+
create_table(:users) do |t|
|
|
5
|
+
## Required
|
|
6
|
+
t.string :provider, :null => false, :default => "email"
|
|
7
|
+
t.string :uid, :null => false, :default => ""
|
|
8
|
+
|
|
9
|
+
## Database authenticatable
|
|
10
|
+
t.string :encrypted_password, :null => false, :default => ""
|
|
11
|
+
|
|
12
|
+
## Recoverable
|
|
13
|
+
t.string :reset_password_token
|
|
14
|
+
t.datetime :reset_password_sent_at
|
|
15
|
+
t.boolean :allow_password_change, :default => false
|
|
16
|
+
|
|
17
|
+
## Rememberable
|
|
18
|
+
t.datetime :remember_created_at
|
|
19
|
+
|
|
20
|
+
## Trackable
|
|
21
|
+
t.integer :sign_in_count, :default => 0, :null => false
|
|
22
|
+
t.datetime :current_sign_in_at
|
|
23
|
+
t.datetime :last_sign_in_at
|
|
24
|
+
t.string :current_sign_in_ip
|
|
25
|
+
t.string :last_sign_in_ip
|
|
26
|
+
|
|
27
|
+
## Confirmable
|
|
28
|
+
t.string :confirmation_token
|
|
29
|
+
t.datetime :confirmed_at
|
|
30
|
+
t.datetime :confirmation_sent_at
|
|
31
|
+
t.string :unconfirmed_email # Only if using reconfirmable
|
|
32
|
+
|
|
33
|
+
## Lockable
|
|
34
|
+
# t.integer :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
|
|
35
|
+
# t.string :unlock_token # Only if unlock strategy is :email or :both
|
|
36
|
+
# t.datetime :locked_at
|
|
37
|
+
|
|
38
|
+
## User Info
|
|
39
|
+
t.string :name
|
|
40
|
+
t.string :nickname
|
|
41
|
+
t.string :image
|
|
42
|
+
t.string :email
|
|
43
|
+
|
|
44
|
+
## Tokens
|
|
45
|
+
t.text :tokens
|
|
46
|
+
|
|
47
|
+
t.timestamps
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
add_index :users, :email, unique: true
|
|
51
|
+
add_index :users, [:uid, :provider], unique: true
|
|
52
|
+
add_index :users, :reset_password_token, unique: true
|
|
53
|
+
add_index :users, :confirmation_token, unique: true
|
|
54
|
+
# add_index :users, :unlock_token, unique: true
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
FactoryBot.define do
|
|
2
|
+
factory :user do
|
|
3
|
+
email { Faker::Internet.safe_email }
|
|
4
|
+
password { Faker::Internet.password }
|
|
5
|
+
provider { 'email' }
|
|
6
|
+
|
|
7
|
+
transient do
|
|
8
|
+
allow_unconfirmed_period { Time.now.utc - Devise.allow_unconfirmed_access_for }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
trait :with_nickname do
|
|
12
|
+
nickname { Faker::Internet.username }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
trait :confirmed do
|
|
16
|
+
after(:create) { |user| user.confirm }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# confirmation period is expired
|
|
20
|
+
trait :unconfirmed do
|
|
21
|
+
after(:create) do |user, evaluator|
|
|
22
|
+
user.update_attribute(:confirmation_sent_at, evaluator.allow_unconfirmed_period - 1.day )
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
trait :facebook do
|
|
27
|
+
uid { Faker::Number.number(10) }
|
|
28
|
+
provider { 'facebook' }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
trait :locked do
|
|
32
|
+
after(:create) { |user| user.lock_access! }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
factory :lockable_user, class: 'LockableUser'
|
|
36
|
+
factory :mang_user, class: 'Mang'
|
|
37
|
+
factory :only_email_user, class: 'OnlyEmailUser'
|
|
38
|
+
factory :scoped_user, class: 'ScopedUser'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class DeviseTokenAuth::BlacklistTest < ActiveSupport::TestCase
|
|
6
|
+
describe Devise::Models::Authenticatable::BLACKLIST_FOR_SERIALIZATION do
|
|
7
|
+
test 'should include :tokens' do
|
|
8
|
+
assert Devise::Models::Authenticatable::BLACKLIST_FOR_SERIALIZATION.include?(:tokens)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class DeviseTokenAuth::UrlTest < ActiveSupport::TestCase
|
|
6
|
+
describe 'DeviseTokenAuth::Url#generate' do
|
|
7
|
+
test 'URI fragment should appear at the end of URL' do
|
|
8
|
+
params = { client_id: 123 }
|
|
9
|
+
url = 'http://example.com#fragment'
|
|
10
|
+
assert_equal DeviseTokenAuth::Url.send(:generate, url, params), 'http://example.com?client_id=123#fragment'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe 'with existing query params' do
|
|
14
|
+
test 'should preserve existing query params' do
|
|
15
|
+
url = 'http://example.com?a=1'
|
|
16
|
+
assert_equal DeviseTokenAuth::Url.send(:generate, url), 'http://example.com?a=1'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test 'should marge existing query params with new ones' do
|
|
20
|
+
params = { client_id: 123 }
|
|
21
|
+
url = 'http://example.com?a=1'
|
|
22
|
+
assert_equal DeviseTokenAuth::Url.send(:generate, url, params), 'http://example.com?a=1&client_id=123'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
require 'fileutils'
|
|
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
|
|
7
|
+
|
|
8
|
+
module DeviseTokenAuth
|
|
9
|
+
class InstallGeneratorTest < Rails::Generators::TestCase
|
|
10
|
+
tests InstallGenerator if DEVISE_TOKEN_AUTH_ORM == :active_record
|
|
11
|
+
tests InstallMongoidGenerator if DEVISE_TOKEN_AUTH_ORM == :mongoid
|
|
12
|
+
destination Rails.root.join('tmp/generators')
|
|
13
|
+
|
|
14
|
+
describe 'default values, clean install' do
|
|
15
|
+
setup :prepare_destination
|
|
16
|
+
|
|
17
|
+
before do
|
|
18
|
+
run_generator
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test 'user model is created, concern is included' do
|
|
22
|
+
assert_file 'app/models/user.rb' do |model|
|
|
23
|
+
assert_match(/include DeviseTokenAuth::Concerns::User/, model)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test 'initializer is created' do
|
|
28
|
+
assert_file 'config/initializers/devise_token_auth.rb'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
test 'subsequent runs raise no errors' do
|
|
32
|
+
run_generator
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
if DEVISE_TOKEN_AUTH_ORM == :active_record
|
|
36
|
+
test 'migration is created' do
|
|
37
|
+
assert_migration 'db/migrate/devise_token_auth_create_users.rb'
|
|
38
|
+
end
|
|
39
|
+
|
|
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
|
|
47
|
+
|
|
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
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe 'existing user model' do
|
|
60
|
+
setup :prepare_destination
|
|
61
|
+
|
|
62
|
+
before do
|
|
63
|
+
@dir = File.join(destination_root, 'app', 'models')
|
|
64
|
+
|
|
65
|
+
@fname = File.join(@dir, 'user.rb')
|
|
66
|
+
|
|
67
|
+
# make dir if not exists
|
|
68
|
+
FileUtils.mkdir_p(@dir)
|
|
69
|
+
|
|
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'
|
|
74
|
+
|
|
75
|
+
@f = File.open(@fname, 'w') do |f|
|
|
76
|
+
f.write <<-RUBY
|
|
77
|
+
class User < #{active_record_needle}
|
|
78
|
+
|
|
79
|
+
def whatever
|
|
80
|
+
puts 'whatever'
|
|
81
|
+
end
|
|
82
|
+
end
|
|
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
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
run_generator
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
test 'user concern is injected into existing model' do
|
|
102
|
+
assert_file 'app/models/user.rb' do |model|
|
|
103
|
+
assert_match(/include DeviseTokenAuth::Concerns::User/, model)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
test 'subsequent runs do not modify file' do
|
|
108
|
+
run_generator
|
|
109
|
+
assert_file 'app/models/user.rb' do |model|
|
|
110
|
+
matches = model.scan(/include DeviseTokenAuth::Concerns::User/m).size
|
|
111
|
+
assert_equal 1, matches
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
describe 'routes' do
|
|
117
|
+
setup :prepare_destination
|
|
118
|
+
|
|
119
|
+
before do
|
|
120
|
+
@dir = File.join(destination_root, 'config')
|
|
121
|
+
|
|
122
|
+
@fname = File.join(@dir, 'routes.rb')
|
|
123
|
+
|
|
124
|
+
# make dir if not exists
|
|
125
|
+
FileUtils.mkdir_p(@dir)
|
|
126
|
+
|
|
127
|
+
@f = File.open(@fname, 'w') do |f|
|
|
128
|
+
f.write <<-RUBY
|
|
129
|
+
Rails.application.routes.draw do
|
|
130
|
+
patch '/chong', to: 'bong#index'
|
|
131
|
+
end
|
|
132
|
+
RUBY
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
run_generator
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
test 'route method is appended to routes file' do
|
|
139
|
+
assert_file 'config/routes.rb' do |routes|
|
|
140
|
+
assert_match(/mount_devise_token_auth_for 'User', at: 'auth'/, routes)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
test 'subsequent runs do not modify file' do
|
|
145
|
+
run_generator
|
|
146
|
+
assert_file 'config/routes.rb' do |routes|
|
|
147
|
+
matches = routes.scan(/mount_devise_token_auth_for 'User', at: 'auth'/m).size
|
|
148
|
+
assert_equal 1, matches
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
describe 'subsequent models' do
|
|
153
|
+
before do
|
|
154
|
+
run_generator %w[Mang mangs]
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
test 'route method is appended to routes file' do
|
|
158
|
+
assert_file 'config/routes.rb' do |routes|
|
|
159
|
+
assert_match(/mount_devise_token_auth_for 'Mang', at: 'mangs'/, routes)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
test 'devise_for block is appended to routes file' do
|
|
164
|
+
assert_file 'config/routes.rb' do |routes|
|
|
165
|
+
assert_match(/as :mang do/, routes)
|
|
166
|
+
assert_match(/# Define routes for Mang within this block./, routes)
|
|
167
|
+
end
|
|
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
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
describe 'application controller' do
|
|
179
|
+
setup :prepare_destination
|
|
180
|
+
|
|
181
|
+
before do
|
|
182
|
+
@dir = File.join(destination_root, 'app', 'controllers')
|
|
183
|
+
|
|
184
|
+
@fname = File.join(@dir, 'application_controller.rb')
|
|
185
|
+
|
|
186
|
+
# make dir if not exists
|
|
187
|
+
FileUtils.mkdir_p(@dir)
|
|
188
|
+
|
|
189
|
+
@f = File.open(@fname, 'w') do |f|
|
|
190
|
+
f.write <<-RUBY
|
|
191
|
+
class ApplicationController < ActionController::Base
|
|
192
|
+
def whatever
|
|
193
|
+
'whatever'
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
RUBY
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
run_generator
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
test 'controller concern is appended to application controller' do
|
|
203
|
+
assert_file 'app/controllers/application_controller.rb' do |controller|
|
|
204
|
+
assert_match(/include DeviseTokenAuth::Concerns::SetUserByToken/, controller)
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
test 'subsequent runs do not modify file' do
|
|
209
|
+
run_generator
|
|
210
|
+
assert_file 'app/controllers/application_controller.rb' do |controller|
|
|
211
|
+
matches = controller.scan(/include DeviseTokenAuth::Concerns::SetUserByToken/m).size
|
|
212
|
+
assert_equal 1, matches
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
end
|