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.
Files changed (167) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +13 -0
  3. data/README.md +97 -0
  4. data/Rakefile +42 -0
  5. data/app/controllers/devise_token_auth/application_controller.rb +79 -0
  6. data/app/controllers/devise_token_auth/concerns/resource_finder.rb +44 -0
  7. data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +178 -0
  8. data/app/controllers/devise_token_auth/confirmations_controller.rb +39 -0
  9. data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +239 -0
  10. data/app/controllers/devise_token_auth/passwords_controller.rb +185 -0
  11. data/app/controllers/devise_token_auth/registrations_controller.rb +198 -0
  12. data/app/controllers/devise_token_auth/sessions_controller.rb +131 -0
  13. data/app/controllers/devise_token_auth/token_validations_controller.rb +31 -0
  14. data/app/controllers/devise_token_auth/unlocks_controller.rb +89 -0
  15. data/app/models/devise_token_auth/concerns/active_record_support.rb +34 -0
  16. data/app/models/devise_token_auth/concerns/mongoid_support.rb +19 -0
  17. data/app/models/devise_token_auth/concerns/user.rb +262 -0
  18. data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +28 -0
  19. data/app/validators/devise_token_auth/email_validator.rb +23 -0
  20. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  21. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  22. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  23. data/app/views/devise_token_auth/omniauth_external_window.html.erb +38 -0
  24. data/config/locales/da-DK.yml +50 -0
  25. data/config/locales/de.yml +49 -0
  26. data/config/locales/en.yml +50 -0
  27. data/config/locales/es.yml +49 -0
  28. data/config/locales/fr.yml +49 -0
  29. data/config/locales/it.yml +46 -0
  30. data/config/locales/ja.yml +46 -0
  31. data/config/locales/nl.yml +30 -0
  32. data/config/locales/pl.yml +48 -0
  33. data/config/locales/pt-BR.yml +46 -0
  34. data/config/locales/pt.yml +48 -0
  35. data/config/locales/ro.yml +46 -0
  36. data/config/locales/ru.yml +50 -0
  37. data/config/locales/sq.yml +46 -0
  38. data/config/locales/sv.yml +50 -0
  39. data/config/locales/uk.yml +59 -0
  40. data/config/locales/vi.yml +50 -0
  41. data/config/locales/zh-CN.yml +46 -0
  42. data/config/locales/zh-HK.yml +48 -0
  43. data/config/locales/zh-TW.yml +48 -0
  44. data/lib/devise_token_auth.rb +13 -0
  45. data/lib/devise_token_auth/blacklist.rb +2 -0
  46. data/lib/devise_token_auth/controllers/helpers.rb +161 -0
  47. data/lib/devise_token_auth/controllers/url_helpers.rb +10 -0
  48. data/lib/devise_token_auth/engine.rb +90 -0
  49. data/lib/devise_token_auth/errors.rb +8 -0
  50. data/lib/devise_token_auth/rails/routes.rb +116 -0
  51. data/lib/devise_token_auth/url.rb +41 -0
  52. data/lib/devise_token_auth/version.rb +5 -0
  53. data/lib/generators/devise_token_auth/USAGE +31 -0
  54. data/lib/generators/devise_token_auth/install_generator.rb +91 -0
  55. data/lib/generators/devise_token_auth/install_generator_helpers.rb +98 -0
  56. data/lib/generators/devise_token_auth/install_mongoid_generator.rb +46 -0
  57. data/lib/generators/devise_token_auth/install_views_generator.rb +18 -0
  58. data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +50 -0
  59. data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +56 -0
  60. data/lib/generators/devise_token_auth/templates/user.rb.erb +9 -0
  61. data/lib/generators/devise_token_auth/templates/user_mongoid.rb.erb +63 -0
  62. data/lib/tasks/devise_token_auth_tasks.rake +6 -0
  63. data/test/controllers/custom/custom_confirmations_controller_test.rb +25 -0
  64. data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +33 -0
  65. data/test/controllers/custom/custom_passwords_controller_test.rb +79 -0
  66. data/test/controllers/custom/custom_registrations_controller_test.rb +63 -0
  67. data/test/controllers/custom/custom_sessions_controller_test.rb +39 -0
  68. data/test/controllers/custom/custom_token_validations_controller_test.rb +42 -0
  69. data/test/controllers/demo_group_controller_test.rb +151 -0
  70. data/test/controllers/demo_mang_controller_test.rb +284 -0
  71. data/test/controllers/demo_user_controller_test.rb +629 -0
  72. data/test/controllers/devise_token_auth/confirmations_controller_test.rb +127 -0
  73. data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +376 -0
  74. data/test/controllers/devise_token_auth/passwords_controller_test.rb +639 -0
  75. data/test/controllers/devise_token_auth/registrations_controller_test.rb +880 -0
  76. data/test/controllers/devise_token_auth/sessions_controller_test.rb +541 -0
  77. data/test/controllers/devise_token_auth/token_validations_controller_test.rb +102 -0
  78. data/test/controllers/devise_token_auth/unlocks_controller_test.rb +196 -0
  79. data/test/controllers/overrides/confirmations_controller_test.rb +47 -0
  80. data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +53 -0
  81. data/test/controllers/overrides/passwords_controller_test.rb +64 -0
  82. data/test/controllers/overrides/registrations_controller_test.rb +46 -0
  83. data/test/controllers/overrides/sessions_controller_test.rb +35 -0
  84. data/test/controllers/overrides/token_validations_controller_test.rb +43 -0
  85. data/test/dummy/README.rdoc +28 -0
  86. data/test/dummy/app/active_record/lockable_user.rb +7 -0
  87. data/test/dummy/app/active_record/mang.rb +5 -0
  88. data/test/dummy/app/active_record/only_email_user.rb +7 -0
  89. data/test/dummy/app/active_record/scoped_user.rb +9 -0
  90. data/test/dummy/app/active_record/unconfirmable_user.rb +9 -0
  91. data/test/dummy/app/active_record/unregisterable_user.rb +9 -0
  92. data/test/dummy/app/active_record/user.rb +6 -0
  93. data/test/dummy/app/controllers/application_controller.rb +18 -0
  94. data/test/dummy/app/controllers/auth_origin_controller.rb +7 -0
  95. data/test/dummy/app/controllers/custom/confirmations_controller.rb +13 -0
  96. data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +13 -0
  97. data/test/dummy/app/controllers/custom/passwords_controller.rb +39 -0
  98. data/test/dummy/app/controllers/custom/registrations_controller.rb +39 -0
  99. data/test/dummy/app/controllers/custom/sessions_controller.rb +29 -0
  100. data/test/dummy/app/controllers/custom/token_validations_controller.rb +19 -0
  101. data/test/dummy/app/controllers/demo_group_controller.rb +15 -0
  102. data/test/dummy/app/controllers/demo_mang_controller.rb +14 -0
  103. data/test/dummy/app/controllers/demo_user_controller.rb +27 -0
  104. data/test/dummy/app/controllers/overrides/confirmations_controller.rb +28 -0
  105. data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +16 -0
  106. data/test/dummy/app/controllers/overrides/passwords_controller.rb +35 -0
  107. data/test/dummy/app/controllers/overrides/registrations_controller.rb +29 -0
  108. data/test/dummy/app/controllers/overrides/sessions_controller.rb +36 -0
  109. data/test/dummy/app/controllers/overrides/token_validations_controller.rb +23 -0
  110. data/test/dummy/app/helpers/application_helper.rb +1058 -0
  111. data/test/dummy/app/models/concerns/favorite_color.rb +19 -0
  112. data/test/dummy/app/mongoid/lockable_user.rb +38 -0
  113. data/test/dummy/app/mongoid/mang.rb +53 -0
  114. data/test/dummy/app/mongoid/only_email_user.rb +33 -0
  115. data/test/dummy/app/mongoid/scoped_user.rb +57 -0
  116. data/test/dummy/app/mongoid/unconfirmable_user.rb +51 -0
  117. data/test/dummy/app/mongoid/unregisterable_user.rb +54 -0
  118. data/test/dummy/app/mongoid/user.rb +56 -0
  119. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  120. data/test/dummy/config.ru +18 -0
  121. data/test/dummy/config/application.rb +48 -0
  122. data/test/dummy/config/application.yml.bk +0 -0
  123. data/test/dummy/config/boot.rb +11 -0
  124. data/test/dummy/config/environment.rb +7 -0
  125. data/test/dummy/config/environments/development.rb +46 -0
  126. data/test/dummy/config/environments/production.rb +84 -0
  127. data/test/dummy/config/environments/test.rb +50 -0
  128. data/test/dummy/config/initializers/assets.rb +10 -0
  129. data/test/dummy/config/initializers/backtrace_silencers.rb +9 -0
  130. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  131. data/test/dummy/config/initializers/devise.rb +17 -0
  132. data/test/dummy/config/initializers/devise_token_auth.rb +24 -0
  133. data/test/dummy/config/initializers/figaro.rb +3 -0
  134. data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  135. data/test/dummy/config/initializers/inflections.rb +18 -0
  136. data/test/dummy/config/initializers/mime_types.rb +6 -0
  137. data/test/dummy/config/initializers/omniauth.rb +10 -0
  138. data/test/dummy/config/initializers/session_store.rb +5 -0
  139. data/test/dummy/config/initializers/wrap_parameters.rb +16 -0
  140. data/test/dummy/config/routes.rb +55 -0
  141. data/test/dummy/config/spring.rb +3 -0
  142. data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +65 -0
  143. data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +64 -0
  144. data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +8 -0
  145. data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +7 -0
  146. data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +62 -0
  147. data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +63 -0
  148. data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +63 -0
  149. data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +63 -0
  150. data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +63 -0
  151. data/test/dummy/db/schema.rb +200 -0
  152. data/test/dummy/lib/migration_database_helper.rb +43 -0
  153. data/test/dummy/tmp/generators/app/models/user.rb +9 -0
  154. data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +50 -0
  155. data/test/dummy/tmp/generators/db/migrate/20181030122248_devise_token_auth_create_users.rb +56 -0
  156. data/test/factories/users.rb +40 -0
  157. data/test/lib/devise_token_auth/blacklist_test.rb +11 -0
  158. data/test/lib/devise_token_auth/url_test.rb +26 -0
  159. data/test/lib/generators/devise_token_auth/install_generator_test.rb +217 -0
  160. data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +222 -0
  161. data/test/lib/generators/devise_token_auth/install_views_generator_test.rb +25 -0
  162. data/test/models/concerns/mongoid_support_test.rb +31 -0
  163. data/test/models/only_email_user_test.rb +37 -0
  164. data/test/models/user_test.rb +140 -0
  165. data/test/support/controllers/routes.rb +43 -0
  166. data/test/test_helper.rb +103 -0
  167. 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