devise_token_auth 0.2.0 → 1.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of devise_token_auth might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +1 -2
- data/Rakefile +9 -4
- data/app/controllers/devise_token_auth/application_controller.rb +5 -7
- data/app/controllers/devise_token_auth/concerns/resource_finder.rb +2 -2
- data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +18 -10
- data/app/controllers/devise_token_auth/confirmations_controller.rb +2 -2
- data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +17 -23
- data/app/controllers/devise_token_auth/passwords_controller.rb +23 -27
- data/app/controllers/devise_token_auth/registrations_controller.rb +17 -15
- data/app/controllers/devise_token_auth/sessions_controller.rb +8 -12
- data/app/controllers/devise_token_auth/token_validations_controller.rb +3 -3
- data/app/controllers/devise_token_auth/unlocks_controller.rb +10 -12
- data/app/models/devise_token_auth/concerns/user.rb +27 -36
- data/config/initializers/devise.rb +1 -1
- data/lib/devise_token_auth.rb +6 -6
- data/lib/devise_token_auth/controllers/helpers.rb +14 -4
- data/lib/devise_token_auth/engine.rb +11 -13
- data/lib/devise_token_auth/errors.rb +1 -1
- data/lib/devise_token_auth/rails/routes.rb +29 -29
- data/lib/devise_token_auth/url.rb +6 -4
- data/lib/devise_token_auth/version.rb +1 -1
- data/lib/generators/devise_token_auth/install_generator.rb +52 -39
- data/lib/generators/devise_token_auth/install_views_generator.rb +5 -5
- data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +1 -1
- data/lib/generators/devise_token_auth/templates/{user.rb → user.rb.erb} +0 -0
- data/test/controllers/custom/custom_confirmations_controller_test.rb +3 -1
- data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +2 -0
- data/test/controllers/custom/custom_passwords_controller_test.rb +4 -2
- data/test/controllers/custom/custom_registrations_controller_test.rb +6 -8
- data/test/controllers/custom/custom_sessions_controller_test.rb +5 -5
- data/test/controllers/custom/custom_token_validations_controller_test.rb +3 -3
- data/test/controllers/demo_group_controller_test.rb +2 -6
- data/test/controllers/demo_mang_controller_test.rb +2 -5
- data/test/controllers/demo_user_controller_test.rb +8 -17
- data/test/controllers/devise_token_auth/confirmations_controller_test.rb +2 -2
- data/test/controllers/devise_token_auth/passwords_controller_test.rb +13 -9
- data/test/controllers/devise_token_auth/registrations_controller_test.rb +8 -8
- data/test/controllers/devise_token_auth/sessions_controller_test.rb +22 -33
- data/test/controllers/devise_token_auth/token_validations_controller_test.rb +2 -6
- data/test/controllers/devise_token_auth/unlocks_controller_test.rb +1 -1
- data/test/controllers/overrides/confirmations_controller_test.rb +3 -1
- data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +3 -1
- data/test/controllers/overrides/passwords_controller_test.rb +25 -29
- data/test/controllers/overrides/registrations_controller_test.rb +4 -2
- data/test/controllers/overrides/sessions_controller_test.rb +4 -4
- data/test/controllers/overrides/token_validations_controller_test.rb +3 -3
- data/test/dummy/app/controllers/custom/confirmations_controller.rb +0 -2
- data/test/dummy/app/controllers/custom/passwords_controller.rb +1 -4
- data/test/dummy/app/controllers/custom/registrations_controller.rb +1 -2
- data/test/dummy/app/controllers/custom/sessions_controller.rb +1 -3
- data/test/dummy/app/controllers/custom/token_validations_controller.rb +1 -3
- data/test/dummy/app/controllers/overrides/confirmations_controller.rb +3 -3
- data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +3 -3
- data/test/dummy/app/controllers/overrides/passwords_controller.rb +5 -5
- data/test/dummy/app/controllers/overrides/registrations_controller.rb +2 -2
- data/test/dummy/app/controllers/overrides/sessions_controller.rb +8 -10
- data/test/dummy/app/controllers/overrides/token_validations_controller.rb +3 -5
- data/test/dummy/app/helpers/application_helper.rb +1027 -1036
- data/test/dummy/app/models/scoped_user.rb +2 -2
- data/test/dummy/app/models/unregisterable_user.rb +2 -2
- data/test/dummy/app/models/user.rb +1 -1
- data/test/dummy/config.ru +5 -3
- data/test/dummy/config/application.rb +2 -2
- data/test/dummy/config/boot.rb +2 -2
- data/test/dummy/config/environment.rb +1 -1
- data/test/dummy/config/environments/development.rb +3 -3
- data/test/dummy/config/environments/test.rb +1 -1
- data/test/dummy/config/initializers/omniauth.rb +2 -2
- data/test/dummy/config/routes.rb +10 -29
- data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +8 -8
- data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +7 -7
- data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +4 -4
- data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +7 -7
- data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +7 -7
- data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +7 -7
- data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +6 -6
- data/test/dummy/db/schema.rb +2 -60
- data/test/factories/users.rb +40 -0
- data/test/lib/devise_token_auth/url_test.rb +6 -6
- data/test/lib/generators/devise_token_auth/install_generator_test.rb +22 -14
- data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +30 -22
- data/test/lib/generators/devise_token_auth/install_views_generator_test.rb +1 -1
- data/test/models/user_test.rb +15 -46
- data/test/support/controllers/routes.rb +43 -0
- data/test/test_helper.rb +12 -12
- metadata +8 -14
- data/test/dummy/app/models/evil_user.rb +0 -5
- data/test/dummy/app/models/nice_user.rb +0 -9
- data/test/dummy/db/migrate/20140928231203_devise_token_auth_create_evil_users.rb +0 -66
- data/test/dummy/db/migrate/20150409095712_devise_token_auth_create_nice_users.rb +0 -63
- data/test/integration/navigation_test.rb +0 -12
    
        data/test/dummy/db/schema.rb
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            # This file is auto-generated from the current state of the database. Instead
         | 
| 2 4 | 
             
            # of editing this file, please use the migrations feature of Active Record to
         | 
| 3 5 | 
             
            # incrementally modify your database, and then regenerate this schema definition.
         | 
| @@ -12,37 +14,6 @@ | |
| 12 14 |  | 
| 13 15 | 
             
            ActiveRecord::Schema.define(version: 20160629184441) do
         | 
| 14 16 |  | 
| 15 | 
            -
              create_table "evil_users", force: :cascade do |t|
         | 
| 16 | 
            -
                t.string "email"
         | 
| 17 | 
            -
                t.string "encrypted_password", default: "", null: false
         | 
| 18 | 
            -
                t.string "reset_password_token"
         | 
| 19 | 
            -
                t.datetime "reset_password_sent_at"
         | 
| 20 | 
            -
                t.boolean "allow_password_change", default: false
         | 
| 21 | 
            -
                t.datetime "remember_created_at"
         | 
| 22 | 
            -
                t.integer "sign_in_count", default: 0, null: false
         | 
| 23 | 
            -
                t.datetime "current_sign_in_at"
         | 
| 24 | 
            -
                t.datetime "last_sign_in_at"
         | 
| 25 | 
            -
                t.string "current_sign_in_ip"
         | 
| 26 | 
            -
                t.string "last_sign_in_ip"
         | 
| 27 | 
            -
                t.string "confirmation_token"
         | 
| 28 | 
            -
                t.datetime "confirmed_at"
         | 
| 29 | 
            -
                t.datetime "confirmation_sent_at"
         | 
| 30 | 
            -
                t.string "unconfirmed_email"
         | 
| 31 | 
            -
                t.string "name"
         | 
| 32 | 
            -
                t.string "nickname"
         | 
| 33 | 
            -
                t.string "image"
         | 
| 34 | 
            -
                t.string "provider"
         | 
| 35 | 
            -
                t.string "uid", default: "", null: false
         | 
| 36 | 
            -
                t.text "tokens"
         | 
| 37 | 
            -
                t.string "favorite_color"
         | 
| 38 | 
            -
                t.datetime "created_at"
         | 
| 39 | 
            -
                t.datetime "updated_at"
         | 
| 40 | 
            -
                t.index ["confirmation_token"], name: "index_evil_users_on_confirmation_token", unique: true
         | 
| 41 | 
            -
                t.index ["email"], name: "index_evil_users_on_email"
         | 
| 42 | 
            -
                t.index ["reset_password_token"], name: "index_evil_users_on_reset_password_token", unique: true
         | 
| 43 | 
            -
                t.index ["uid", "provider"], name: "index_evil_users_on_uid_and_provider", unique: true
         | 
| 44 | 
            -
              end
         | 
| 45 | 
            -
             | 
| 46 17 | 
             
              create_table "lockable_users", force: :cascade do |t|
         | 
| 47 18 | 
             
                t.string "provider", null: false
         | 
| 48 19 | 
             
                t.string "uid", default: "", null: false
         | 
| @@ -94,35 +65,6 @@ ActiveRecord::Schema.define(version: 20160629184441) do | |
| 94 65 | 
             
                t.index ["uid", "provider"], name: "index_mangs_on_uid_and_provider", unique: true
         | 
| 95 66 | 
             
              end
         | 
| 96 67 |  | 
| 97 | 
            -
              create_table "nice_users", force: :cascade do |t|
         | 
| 98 | 
            -
                t.string "provider", null: false
         | 
| 99 | 
            -
                t.string "uid", default: "", null: false
         | 
| 100 | 
            -
                t.string "encrypted_password", default: "", null: false
         | 
| 101 | 
            -
                t.string "reset_password_token"
         | 
| 102 | 
            -
                t.datetime "reset_password_sent_at"
         | 
| 103 | 
            -
                t.boolean "allow_password_change", default: false
         | 
| 104 | 
            -
                t.datetime "remember_created_at"
         | 
| 105 | 
            -
                t.integer "sign_in_count", default: 0, null: false
         | 
| 106 | 
            -
                t.datetime "current_sign_in_at"
         | 
| 107 | 
            -
                t.datetime "last_sign_in_at"
         | 
| 108 | 
            -
                t.string "current_sign_in_ip"
         | 
| 109 | 
            -
                t.string "last_sign_in_ip"
         | 
| 110 | 
            -
                t.string "confirmation_token"
         | 
| 111 | 
            -
                t.datetime "confirmed_at"
         | 
| 112 | 
            -
                t.datetime "confirmation_sent_at"
         | 
| 113 | 
            -
                t.string "unconfirmed_email"
         | 
| 114 | 
            -
                t.string "name"
         | 
| 115 | 
            -
                t.string "nickname"
         | 
| 116 | 
            -
                t.string "image"
         | 
| 117 | 
            -
                t.string "email"
         | 
| 118 | 
            -
                t.text "tokens"
         | 
| 119 | 
            -
                t.datetime "created_at"
         | 
| 120 | 
            -
                t.datetime "updated_at"
         | 
| 121 | 
            -
                t.index ["email"], name: "index_nice_users_on_email"
         | 
| 122 | 
            -
                t.index ["reset_password_token"], name: "index_nice_users_on_reset_password_token", unique: true
         | 
| 123 | 
            -
                t.index ["uid", "provider"], name: "index_nice_users_on_uid_and_provider", unique: true
         | 
| 124 | 
            -
              end
         | 
| 125 | 
            -
             | 
| 126 68 | 
             
              create_table "only_email_users", force: :cascade do |t|
         | 
| 127 69 | 
             
                t.string "provider", null: false
         | 
| 128 70 | 
             
                t.string "uid", default: "", null: false
         | 
| @@ -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
         | 
| @@ -3,23 +3,23 @@ | |
| 3 3 | 
             
            require 'test_helper'
         | 
| 4 4 |  | 
| 5 5 | 
             
            class DeviseTokenAuth::UrlTest < ActiveSupport::TestCase
         | 
| 6 | 
            -
              describe  | 
| 6 | 
            +
              describe 'DeviseTokenAuth::Url#generate' do
         | 
| 7 7 | 
             
                test 'URI fragment should appear at the end of URL' do
         | 
| 8 | 
            -
                  params = {client_id: 123}
         | 
| 8 | 
            +
                  params = { client_id: 123 }
         | 
| 9 9 | 
             
                  url = 'http://example.com#fragment'
         | 
| 10 | 
            -
                  assert_equal DeviseTokenAuth::Url.send(:generate, url, params),  | 
| 10 | 
            +
                  assert_equal DeviseTokenAuth::Url.send(:generate, url, params), 'http://example.com?client_id=123#fragment'
         | 
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| 13 13 | 
             
                describe 'with existing query params' do
         | 
| 14 14 | 
             
                  test 'should preserve existing query params' do
         | 
| 15 15 | 
             
                    url = 'http://example.com?a=1'
         | 
| 16 | 
            -
                    assert_equal DeviseTokenAuth::Url.send(:generate, url),  | 
| 16 | 
            +
                    assert_equal DeviseTokenAuth::Url.send(:generate, url), 'http://example.com?a=1'
         | 
| 17 17 | 
             
                  end
         | 
| 18 18 |  | 
| 19 19 | 
             
                  test 'should marge existing query params with new ones' do
         | 
| 20 | 
            -
                    params = {client_id: 123}
         | 
| 20 | 
            +
                    params = { client_id: 123 }
         | 
| 21 21 | 
             
                    url = 'http://example.com?a=1'
         | 
| 22 | 
            -
                    assert_equal DeviseTokenAuth::Url.send(:generate, url, params),  | 
| 22 | 
            +
                    assert_equal DeviseTokenAuth::Url.send(:generate, url, params), 'http://example.com?a=1&client_id=123'
         | 
| 23 23 | 
             
                  end
         | 
| 24 24 | 
             
                end
         | 
| 25 25 | 
             
              end
         | 
| @@ -41,15 +41,24 @@ module DeviseTokenAuth | |
| 41 41 | 
             
                  test 'subsequent runs raise no errors' do
         | 
| 42 42 | 
             
                    run_generator
         | 
| 43 43 | 
             
                  end
         | 
| 44 | 
            +
             | 
| 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/
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
                  end
         | 
| 44 53 | 
             
                end
         | 
| 45 54 |  | 
| 46 55 | 
             
                describe 'existing user model' do
         | 
| 47 56 | 
             
                  setup :prepare_destination
         | 
| 48 57 |  | 
| 49 58 | 
             
                  before do
         | 
| 50 | 
            -
                    @dir = File.join(destination_root,  | 
| 59 | 
            +
                    @dir = File.join(destination_root, 'app', 'models')
         | 
| 51 60 |  | 
| 52 | 
            -
                    @fname = File.join(@dir,  | 
| 61 | 
            +
                    @fname = File.join(@dir, 'user.rb')
         | 
| 53 62 |  | 
| 54 63 | 
             
                    # make dir if not exists
         | 
| 55 64 | 
             
                    FileUtils.mkdir_p(@dir)
         | 
| @@ -57,7 +66,7 @@ module DeviseTokenAuth | |
| 57 66 | 
             
                    # account for rails version 5
         | 
| 58 67 | 
             
                    active_record_needle = (Rails::VERSION::MAJOR == 5) ? 'ApplicationRecord' : 'ActiveRecord::Base'
         | 
| 59 68 |  | 
| 60 | 
            -
                    @f = File.open(@fname, 'w')  | 
| 69 | 
            +
                    @f = File.open(@fname, 'w') do |f|
         | 
| 61 70 | 
             
                      f.write <<-RUBY
         | 
| 62 71 | 
             
                        class User < #{active_record_needle}
         | 
| 63 72 |  | 
| @@ -66,7 +75,7 @@ module DeviseTokenAuth | |
| 66 75 | 
             
                          end
         | 
| 67 76 | 
             
                        end
         | 
| 68 77 | 
             
                      RUBY
         | 
| 69 | 
            -
                     | 
| 78 | 
            +
                    end
         | 
| 70 79 |  | 
| 71 80 | 
             
                    run_generator
         | 
| 72 81 | 
             
                  end
         | 
| @@ -86,25 +95,24 @@ module DeviseTokenAuth | |
| 86 95 | 
             
                  end
         | 
| 87 96 | 
             
                end
         | 
| 88 97 |  | 
| 89 | 
            -
             | 
| 90 98 | 
             
                describe 'routes' do
         | 
| 91 99 | 
             
                  setup :prepare_destination
         | 
| 92 100 |  | 
| 93 101 | 
             
                  before do
         | 
| 94 | 
            -
                    @dir = File.join(destination_root,  | 
| 102 | 
            +
                    @dir = File.join(destination_root, 'config')
         | 
| 95 103 |  | 
| 96 | 
            -
                    @fname = File.join(@dir,  | 
| 104 | 
            +
                    @fname = File.join(@dir, 'routes.rb')
         | 
| 97 105 |  | 
| 98 106 | 
             
                    # make dir if not exists
         | 
| 99 107 | 
             
                    FileUtils.mkdir_p(@dir)
         | 
| 100 108 |  | 
| 101 | 
            -
                    @f = File.open(@fname, 'w')  | 
| 109 | 
            +
                    @f = File.open(@fname, 'w') do |f|
         | 
| 102 110 | 
             
                      f.write <<-RUBY
         | 
| 103 111 | 
             
                        Rails.application.routes.draw do
         | 
| 104 112 | 
             
                          patch '/chong', to: 'bong#index'
         | 
| 105 113 | 
             
                        end
         | 
| 106 114 | 
             
                      RUBY
         | 
| 107 | 
            -
                     | 
| 115 | 
            +
                    end
         | 
| 108 116 |  | 
| 109 117 | 
             
                    run_generator
         | 
| 110 118 | 
             
                  end
         | 
| @@ -125,7 +133,7 @@ module DeviseTokenAuth | |
| 125 133 |  | 
| 126 134 | 
             
                  describe 'subsequent models' do
         | 
| 127 135 | 
             
                    before do
         | 
| 128 | 
            -
                      run_generator %w | 
| 136 | 
            +
                      run_generator %w[Mang mangs]
         | 
| 129 137 | 
             
                    end
         | 
| 130 138 |  | 
| 131 139 | 
             
                    test 'migration is created' do
         | 
| @@ -151,14 +159,14 @@ module DeviseTokenAuth | |
| 151 159 | 
             
                  setup :prepare_destination
         | 
| 152 160 |  | 
| 153 161 | 
             
                  before do
         | 
| 154 | 
            -
                    @dir = File.join(destination_root,  | 
| 162 | 
            +
                    @dir = File.join(destination_root, 'app', 'controllers')
         | 
| 155 163 |  | 
| 156 | 
            -
                    @fname = File.join(@dir,  | 
| 164 | 
            +
                    @fname = File.join(@dir, 'application_controller.rb')
         | 
| 157 165 |  | 
| 158 166 | 
             
                    # make dir if not exists
         | 
| 159 167 | 
             
                    FileUtils.mkdir_p(@dir)
         | 
| 160 168 |  | 
| 161 | 
            -
                    @f = File.open(@fname, 'w')  | 
| 169 | 
            +
                    @f = File.open(@fname, 'w') do |f|
         | 
| 162 170 | 
             
                      f.write <<-RUBY
         | 
| 163 171 | 
             
                        class ApplicationController < ActionController::Base
         | 
| 164 172 | 
             
                          def whatever
         | 
| @@ -166,7 +174,7 @@ module DeviseTokenAuth | |
| 166 174 | 
             
                          end
         | 
| 167 175 | 
             
                        end
         | 
| 168 176 | 
             
                      RUBY
         | 
| 169 | 
            -
                     | 
| 177 | 
            +
                    end
         | 
| 170 178 |  | 
| 171 179 | 
             
                    run_generator
         | 
| 172 180 | 
             
                  end
         | 
| @@ -10,15 +10,15 @@ module DeviseTokenAuth | |
| 10 10 | 
             
                destination Rails.root.join('tmp/generators')
         | 
| 11 11 |  | 
| 12 12 | 
             
                # The namespaced user model for testing
         | 
| 13 | 
            -
                let(:user_class) {  | 
| 13 | 
            +
                let(:user_class) { 'Azpire::V1::HumanResource::User' }
         | 
| 14 14 | 
             
                let(:namespace_path) { user_class.underscore }
         | 
| 15 | 
            -
                let(:table_name) { user_class.pluralize.underscore.gsub( | 
| 15 | 
            +
                let(:table_name) { user_class.pluralize.underscore.gsub('/','_') }
         | 
| 16 16 |  | 
| 17 17 | 
             
                describe 'user model with namespace, clean install' do
         | 
| 18 18 | 
             
                  setup :prepare_destination
         | 
| 19 19 |  | 
| 20 20 | 
             
                  before do
         | 
| 21 | 
            -
                    run_generator %W | 
| 21 | 
            +
                    run_generator %W[#{user_class} auth]
         | 
| 22 22 | 
             
                  end
         | 
| 23 23 |  | 
| 24 24 | 
             
                  test 'user model (with namespace) is created, concern is included' do
         | 
| @@ -44,7 +44,16 @@ module DeviseTokenAuth | |
| 44 44 | 
             
                  end
         | 
| 45 45 |  | 
| 46 46 | 
             
                  test 'subsequent runs raise no errors' do
         | 
| 47 | 
            -
                    run_generator %W | 
| 47 | 
            +
                    run_generator %W[#{user_class} auth]
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 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/
         | 
| 56 | 
            +
                    end
         | 
| 48 57 | 
             
                  end
         | 
| 49 58 | 
             
                end
         | 
| 50 59 |  | 
| @@ -52,9 +61,9 @@ module DeviseTokenAuth | |
| 52 61 | 
             
                  setup :prepare_destination
         | 
| 53 62 |  | 
| 54 63 | 
             
                  before do
         | 
| 55 | 
            -
                    @dir = File.join(destination_root,  | 
| 64 | 
            +
                    @dir = File.join(destination_root, 'app', 'models')
         | 
| 56 65 |  | 
| 57 | 
            -
                    @fname = File.join(@dir,  | 
| 66 | 
            +
                    @fname = File.join(@dir, 'user.rb')
         | 
| 58 67 |  | 
| 59 68 | 
             
                    # make dir if not exists
         | 
| 60 69 | 
             
                    FileUtils.mkdir_p(@dir)
         | 
| @@ -62,7 +71,7 @@ module DeviseTokenAuth | |
| 62 71 | 
             
                    # account for rails version 5
         | 
| 63 72 | 
             
                    active_record_needle = (Rails::VERSION::MAJOR == 5) ? 'ApplicationRecord' : 'ActiveRecord::Base'
         | 
| 64 73 |  | 
| 65 | 
            -
                    @f = File.open(@fname, 'w')  | 
| 74 | 
            +
                    @f = File.open(@fname, 'w') do |f|
         | 
| 66 75 | 
             
                      f.write <<-RUBY
         | 
| 67 76 | 
             
                        class User < #{active_record_needle}
         | 
| 68 77 |  | 
| @@ -71,7 +80,7 @@ module DeviseTokenAuth | |
| 71 80 | 
             
                          end
         | 
| 72 81 | 
             
                        end
         | 
| 73 82 | 
             
                      RUBY
         | 
| 74 | 
            -
                     | 
| 83 | 
            +
                    end
         | 
| 75 84 |  | 
| 76 85 | 
             
                    run_generator
         | 
| 77 86 | 
             
                  end
         | 
| @@ -91,27 +100,26 @@ module DeviseTokenAuth | |
| 91 100 | 
             
                  end
         | 
| 92 101 | 
             
                end
         | 
| 93 102 |  | 
| 94 | 
            -
             | 
| 95 103 | 
             
                describe 'routes' do
         | 
| 96 104 | 
             
                  setup :prepare_destination
         | 
| 97 105 |  | 
| 98 106 | 
             
                  before do
         | 
| 99 | 
            -
                    @dir = File.join(destination_root,  | 
| 107 | 
            +
                    @dir = File.join(destination_root, 'config')
         | 
| 100 108 |  | 
| 101 | 
            -
                    @fname = File.join(@dir,  | 
| 109 | 
            +
                    @fname = File.join(@dir, 'routes.rb')
         | 
| 102 110 |  | 
| 103 111 | 
             
                    # make dir if not exists
         | 
| 104 112 | 
             
                    FileUtils.mkdir_p(@dir)
         | 
| 105 113 |  | 
| 106 | 
            -
                    @f = File.open(@fname, 'w')  | 
| 114 | 
            +
                    @f = File.open(@fname, 'w') do |f|
         | 
| 107 115 | 
             
                      f.write <<-RUBY
         | 
| 108 116 | 
             
                        Rails.application.routes.draw do
         | 
| 109 117 | 
             
                          patch '/chong', to: 'bong#index'
         | 
| 110 118 | 
             
                        end
         | 
| 111 119 | 
             
                      RUBY
         | 
| 112 | 
            -
                     | 
| 120 | 
            +
                    end
         | 
| 113 121 |  | 
| 114 | 
            -
                    run_generator %W | 
| 122 | 
            +
                    run_generator %W[#{user_class} auth]
         | 
| 115 123 | 
             
                  end
         | 
| 116 124 |  | 
| 117 125 | 
             
                  test 'route method for user model with namespace is appended to routes file' do
         | 
| @@ -121,7 +129,7 @@ module DeviseTokenAuth | |
| 121 129 | 
             
                  end
         | 
| 122 130 |  | 
| 123 131 | 
             
                  test 'subsequent runs do not modify file' do
         | 
| 124 | 
            -
                    run_generator %W | 
| 132 | 
            +
                    run_generator %W[#{user_class} auth]
         | 
| 125 133 | 
             
                    assert_file 'config/routes.rb' do |routes|
         | 
| 126 134 | 
             
                      matches = routes.scan(/mount_devise_token_auth_for '#{user_class}', at: 'auth'/m).size
         | 
| 127 135 | 
             
                      assert_equal 1, matches
         | 
| @@ -130,7 +138,7 @@ module DeviseTokenAuth | |
| 130 138 |  | 
| 131 139 | 
             
                  describe 'subsequent models' do
         | 
| 132 140 | 
             
                    before do
         | 
| 133 | 
            -
                      run_generator %w | 
| 141 | 
            +
                      run_generator %w[Mang mangs]
         | 
| 134 142 | 
             
                    end
         | 
| 135 143 |  | 
| 136 144 | 
             
                    test 'migration is created' do
         | 
| @@ -156,14 +164,14 @@ module DeviseTokenAuth | |
| 156 164 | 
             
                  setup :prepare_destination
         | 
| 157 165 |  | 
| 158 166 | 
             
                  before do
         | 
| 159 | 
            -
                    @dir = File.join(destination_root,  | 
| 167 | 
            +
                    @dir = File.join(destination_root, 'app', 'controllers')
         | 
| 160 168 |  | 
| 161 | 
            -
                    @fname = File.join(@dir,  | 
| 169 | 
            +
                    @fname = File.join(@dir, 'application_controller.rb')
         | 
| 162 170 |  | 
| 163 171 | 
             
                    # make dir if not exists
         | 
| 164 172 | 
             
                    FileUtils.mkdir_p(@dir)
         | 
| 165 173 |  | 
| 166 | 
            -
                    @f = File.open(@fname, 'w')  | 
| 174 | 
            +
                    @f = File.open(@fname, 'w') do |f|
         | 
| 167 175 | 
             
                      f.write <<-RUBY
         | 
| 168 176 | 
             
                        class ApplicationController < ActionController::Base
         | 
| 169 177 | 
             
                          def whatever
         | 
| @@ -171,9 +179,9 @@ module DeviseTokenAuth | |
| 171 179 | 
             
                          end
         | 
| 172 180 | 
             
                        end
         | 
| 173 181 | 
             
                      RUBY
         | 
| 174 | 
            -
                     | 
| 182 | 
            +
                    end
         | 
| 175 183 |  | 
| 176 | 
            -
                    run_generator %W | 
| 184 | 
            +
                    run_generator %W[#{user_class} auth]
         | 
| 177 185 | 
             
                  end
         | 
| 178 186 |  | 
| 179 187 | 
             
                  test 'controller concern is appended to application controller' do
         | 
| @@ -183,7 +191,7 @@ module DeviseTokenAuth | |
| 183 191 | 
             
                  end
         | 
| 184 192 |  | 
| 185 193 | 
             
                  test 'subsequent runs do not modify file' do
         | 
| 186 | 
            -
                    run_generator %W | 
| 194 | 
            +
                    run_generator %W[#{user_class} auth]
         | 
| 187 195 | 
             
                    assert_file 'app/controllers/application_controller.rb' do |controller|
         | 
| 188 196 | 
             
                      matches = controller.scan(/include DeviseTokenAuth::Concerns::SetUserByToken/m).size
         | 
| 189 197 | 
             
                      assert_equal 1, matches
         | 
| @@ -16,7 +16,7 @@ module DeviseTokenAuth | |
| 16 16 | 
             
                    run_generator
         | 
| 17 17 | 
             
                  end
         | 
| 18 18 |  | 
| 19 | 
            -
                  test  | 
| 19 | 
            +
                  test 'files are copied' do
         | 
| 20 20 | 
             
                    assert_file 'app/views/devise/mailer/reset_password_instructions.html.erb'
         | 
| 21 21 | 
             
                    assert_file 'app/views/devise/mailer/confirmation_instructions.html.erb'
         | 
| 22 22 | 
             
                  end
         | 
    
        data/test/models/user_test.rb
    CHANGED
    
    | @@ -4,21 +4,16 @@ require 'test_helper' | |
| 4 4 |  | 
| 5 5 | 
             
            class UserTest < ActiveSupport::TestCase
         | 
| 6 6 | 
             
              describe User do
         | 
| 7 | 
            -
                before do
         | 
| 8 | 
            -
                  @password    = Faker::Internet.password(10, 20)
         | 
| 9 | 
            -
                  @email       = Faker::Internet.email
         | 
| 10 | 
            -
                  @success_url = Faker::Internet.url
         | 
| 11 | 
            -
                  @resource    = User.new()
         | 
| 12 | 
            -
                end
         | 
| 13 | 
            -
             | 
| 14 7 | 
             
                describe 'serialization' do
         | 
| 15 8 | 
             
                  test 'hash should not include sensitive info' do
         | 
| 9 | 
            +
                    @resource = build(:user)
         | 
| 16 10 | 
             
                    refute @resource.as_json[:tokens]
         | 
| 17 11 | 
             
                  end
         | 
| 18 12 | 
             
                end
         | 
| 19 13 |  | 
| 20 14 | 
             
                describe 'creation' do
         | 
| 21 15 | 
             
                  test 'save fails if uid is missing' do
         | 
| 16 | 
            +
                    @resource = User.new
         | 
| 22 17 | 
             
                    @resource.uid = nil
         | 
| 23 18 | 
             
                    @resource.save
         | 
| 24 19 |  | 
| @@ -28,40 +23,25 @@ class UserTest < ActiveSupport::TestCase | |
| 28 23 |  | 
| 29 24 | 
             
                describe 'email registration' do
         | 
| 30 25 | 
             
                  test 'model should not save if email is blank' do
         | 
| 31 | 
            -
                    @resource | 
| 32 | 
            -
                    @resource.password              = @password
         | 
| 33 | 
            -
                    @resource.password_confirmation = @password
         | 
| 26 | 
            +
                    @resource = build(:user, email: nil)
         | 
| 34 27 |  | 
| 35 28 | 
             
                    refute @resource.save
         | 
| 36 | 
            -
                    assert @resource.errors.messages[:email] == [I18n.t( | 
| 29 | 
            +
                    assert @resource.errors.messages[:email] == [I18n.t('errors.messages.blank')]
         | 
| 37 30 | 
             
                  end
         | 
| 38 31 |  | 
| 39 32 | 
             
                  test 'model should not save if email is not an email' do
         | 
| 40 | 
            -
                    @resource | 
| 41 | 
            -
                    @resource.email                 = '@example.com'
         | 
| 42 | 
            -
                    @resource.password              = @password
         | 
| 43 | 
            -
                    @resource.password_confirmation = @password
         | 
| 33 | 
            +
                    @resource = build(:user, email: '@example.com')
         | 
| 44 34 |  | 
| 45 35 | 
             
                    refute @resource.save
         | 
| 46 | 
            -
                    assert @resource.errors.messages[:email] == [I18n.t( | 
| 36 | 
            +
                    assert @resource.errors.messages[:email] == [I18n.t('errors.messages.not_email')]
         | 
| 47 37 | 
             
                  end
         | 
| 48 38 | 
             
                end
         | 
| 49 39 |  | 
| 50 40 | 
             
                describe 'email uniqueness' do
         | 
| 51 41 | 
             
                  test 'model should not save if email is taken' do
         | 
| 52 | 
            -
                     | 
| 53 | 
            -
             | 
| 54 | 
            -
                     | 
| 55 | 
            -
                      email: @email,
         | 
| 56 | 
            -
                      provider: provider,
         | 
| 57 | 
            -
                      password: @password,
         | 
| 58 | 
            -
                      password_confirmation: @password
         | 
| 59 | 
            -
                    )
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                    @resource.email                 = @email
         | 
| 62 | 
            -
                    @resource.provider              = provider
         | 
| 63 | 
            -
                    @resource.password              = @password
         | 
| 64 | 
            -
                    @resource.password_confirmation = @password
         | 
| 42 | 
            +
                    user_attributes = attributes_for(:user)
         | 
| 43 | 
            +
                    create(:user, user_attributes)
         | 
| 44 | 
            +
                    @resource = build(:user, user_attributes)
         | 
| 65 45 |  | 
| 66 46 | 
             
                    refute @resource.save
         | 
| 67 47 | 
             
                    assert @resource.errors.messages[:email] == [I18n.t('errors.messages.taken')]
         | 
| @@ -71,10 +51,7 @@ class UserTest < ActiveSupport::TestCase | |
| 71 51 |  | 
| 72 52 | 
             
                describe 'oauth2 authentication' do
         | 
| 73 53 | 
             
                  test 'model should save even if email is blank' do
         | 
| 74 | 
            -
                    @resource | 
| 75 | 
            -
                    @resource.uid                   = 123
         | 
| 76 | 
            -
                    @resource.password              = @password
         | 
| 77 | 
            -
                    @resource.password_confirmation = @password
         | 
| 54 | 
            +
                    @resource = build(:user, :facebook, email: nil)
         | 
| 78 55 |  | 
| 79 56 | 
             
                    assert @resource.save
         | 
| 80 57 | 
             
                    assert @resource.errors.messages[:email].blank?
         | 
| @@ -83,9 +60,7 @@ class UserTest < ActiveSupport::TestCase | |
| 83 60 |  | 
| 84 61 | 
             
                describe 'token expiry' do
         | 
| 85 62 | 
             
                  before do
         | 
| 86 | 
            -
                    @resource =  | 
| 87 | 
            -
                    @resource.skip_confirmation!
         | 
| 88 | 
            -
                    @resource.save!
         | 
| 63 | 
            +
                    @resource = create(:user, :confirmed)
         | 
| 89 64 |  | 
| 90 65 | 
             
                    @auth_headers = @resource.create_new_auth_token
         | 
| 91 66 |  | 
| @@ -103,9 +78,7 @@ class UserTest < ActiveSupport::TestCase | |
| 103 78 |  | 
| 104 79 | 
             
                describe 'user specific token lifespan' do
         | 
| 105 80 | 
             
                  before do
         | 
| 106 | 
            -
                    @resource =  | 
| 107 | 
            -
                    @resource.skip_confirmation!
         | 
| 108 | 
            -
                    @resource.save!
         | 
| 81 | 
            +
                    @resource = create(:user, :confirmed)
         | 
| 109 82 |  | 
| 110 83 | 
             
                    auth_headers = @resource.create_new_auth_token
         | 
| 111 84 | 
             
                    @token_global     = auth_headers['access-token']
         | 
| @@ -137,9 +110,7 @@ class UserTest < ActiveSupport::TestCase | |
| 137 110 |  | 
| 138 111 | 
             
                describe 'expired tokens are destroyed on save' do
         | 
| 139 112 | 
             
                  before do
         | 
| 140 | 
            -
                    @resource =  | 
| 141 | 
            -
                    @resource.skip_confirmation!
         | 
| 142 | 
            -
                    @resource.save!
         | 
| 113 | 
            +
                    @resource = create(:user, :confirmed)
         | 
| 143 114 |  | 
| 144 115 | 
             
                    @old_auth_headers = @resource.create_new_auth_token
         | 
| 145 116 | 
             
                    @new_auth_headers = @resource.create_new_auth_token
         | 
| @@ -151,15 +122,13 @@ class UserTest < ActiveSupport::TestCase | |
| 151 122 | 
             
                  end
         | 
| 152 123 |  | 
| 153 124 | 
             
                  test 'current token was not removed' do
         | 
| 154 | 
            -
                    assert @resource.tokens[@new_auth_headers[ | 
| 125 | 
            +
                    assert @resource.tokens[@new_auth_headers['client']]
         | 
| 155 126 | 
             
                  end
         | 
| 156 127 | 
             
                end
         | 
| 157 128 |  | 
| 158 129 | 
             
                describe 'nil tokens are handled properly' do
         | 
| 159 130 | 
             
                  before do
         | 
| 160 | 
            -
                    @resource =  | 
| 161 | 
            -
                    @resource.skip_confirmation!
         | 
| 162 | 
            -
                    @resource.save!
         | 
| 131 | 
            +
                    @resource = create(:user, :confirmed)
         | 
| 163 132 | 
             
                  end
         | 
| 164 133 |  | 
| 165 134 | 
             
                  test 'tokens can be set to nil' do
         |