devise 3.2.0 → 3.3.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.
Potentially problematic release.
This version of devise might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.travis.yml +18 -3
- data/CHANGELOG.md +82 -9
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +7 -9
- data/Gemfile.lock +102 -96
- data/MIT-LICENSE +1 -1
- data/README.md +94 -42
- data/Rakefile +1 -1
- data/app/controllers/devise/confirmations_controller.rb +5 -3
- data/app/controllers/devise/omniauth_callbacks_controller.rb +2 -2
- data/app/controllers/devise/passwords_controller.rb +5 -3
- data/app/controllers/devise/registrations_controller.rb +26 -10
- data/app/controllers/devise/sessions_controller.rb +39 -14
- data/app/controllers/devise/unlocks_controller.rb +4 -2
- data/app/controllers/devise_controller.rb +6 -6
- data/app/helpers/devise_helper.rb +2 -2
- data/app/views/devise/confirmations/new.html.erb +2 -2
- data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
- data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/devise/mailer/unlock_instructions.html.erb +1 -1
- data/app/views/devise/passwords/edit.html.erb +3 -3
- data/app/views/devise/passwords/new.html.erb +2 -2
- data/app/views/devise/registrations/edit.html.erb +6 -6
- data/app/views/devise/registrations/new.html.erb +5 -5
- data/app/views/devise/sessions/new.html.erb +5 -5
- data/app/views/devise/shared/_links.erb +1 -1
- data/app/views/devise/unlocks/new.html.erb +2 -2
- data/config/locales/en.yml +17 -16
- data/devise.gemspec +2 -2
- data/gemfiles/{Gemfile.rails-3.2.x → Gemfile.rails-3.2-stable} +8 -10
- data/gemfiles/Gemfile.rails-3.2-stable.lock +166 -0
- data/gemfiles/Gemfile.rails-4.0-stable +29 -0
- data/gemfiles/Gemfile.rails-4.0-stable.lock +162 -0
- data/gemfiles/Gemfile.rails-head +32 -0
- data/gemfiles/Gemfile.rails-head.lock +190 -0
- data/lib/devise/controllers/helpers.rb +84 -29
- data/lib/devise/controllers/rememberable.rb +3 -3
- data/lib/devise/controllers/scoped_views.rb +1 -1
- data/lib/devise/controllers/sign_in_out.rb +9 -10
- data/lib/devise/controllers/store_location.rb +56 -0
- data/lib/devise/controllers/url_helpers.rb +3 -1
- data/lib/devise/failure_app.rb +12 -10
- data/lib/devise/hooks/activatable.rb +5 -6
- data/lib/devise/hooks/csrf_cleaner.rb +3 -1
- data/lib/devise/hooks/lockable.rb +1 -1
- data/lib/devise/hooks/proxy.rb +2 -2
- data/lib/devise/hooks/rememberable.rb +2 -2
- data/lib/devise/hooks/timeoutable.rb +10 -3
- data/lib/devise/hooks/trackable.rb +1 -1
- data/lib/devise/mailers/helpers.rb +8 -8
- data/lib/devise/mapping.rb +4 -1
- data/lib/devise/models/authenticatable.rb +5 -5
- data/lib/devise/models/confirmable.rb +14 -14
- data/lib/devise/models/database_authenticatable.rb +18 -5
- data/lib/devise/models/lockable.rb +14 -11
- data/lib/devise/models/omniauthable.rb +1 -1
- data/lib/devise/models/recoverable.rb +23 -7
- data/lib/devise/models/rememberable.rb +6 -6
- data/lib/devise/models/timeoutable.rb +2 -2
- data/lib/devise/models/trackable.rb +5 -2
- data/lib/devise/models/validatable.rb +6 -6
- data/lib/devise/modules.rb +10 -10
- data/lib/devise/omniauth/url_helpers.rb +2 -2
- data/lib/devise/orm/active_record.rb +1 -1
- data/lib/devise/orm/mongoid.rb +1 -1
- data/lib/devise/rails/routes.rb +107 -78
- data/lib/devise/rails.rb +7 -1
- data/lib/devise/strategies/authenticatable.rb +11 -4
- data/lib/devise/strategies/base.rb +1 -1
- data/lib/devise/strategies/database_authenticatable.rb +7 -4
- data/lib/devise/test_helpers.rb +2 -2
- data/lib/devise/time_inflector.rb +2 -2
- data/lib/devise/version.rb +1 -1
- data/lib/devise.rb +15 -10
- data/lib/generators/active_record/devise_generator.rb +27 -10
- data/lib/generators/active_record/templates/migration.rb +4 -4
- data/lib/generators/active_record/templates/migration_existing.rb +4 -4
- data/lib/generators/devise/devise_generator.rb +5 -3
- data/lib/generators/devise/install_generator.rb +5 -0
- data/lib/generators/devise/views_generator.rb +31 -18
- data/lib/generators/mongoid/devise_generator.rb +20 -19
- data/lib/generators/templates/README +4 -4
- data/lib/generators/templates/devise.rb +20 -11
- data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
- data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
- data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
- data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +2 -2
- data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +4 -4
- data/lib/generators/templates/simple_form_for/passwords/new.html.erb +2 -2
- data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +6 -6
- data/lib/generators/templates/simple_form_for/registrations/new.html.erb +4 -4
- data/lib/generators/templates/simple_form_for/sessions/new.html.erb +4 -4
- data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +2 -2
- data/script/cached-bundle +49 -0
- data/script/s3-put +71 -0
- data/test/controllers/custom_registrations_controller_test.rb +35 -0
- data/test/controllers/helpers_test.rb +89 -31
- data/test/controllers/internal_helpers_test.rb +11 -8
- data/test/controllers/passwords_controller_test.rb +1 -1
- data/test/controllers/sessions_controller_test.rb +29 -25
- data/test/controllers/url_helpers_test.rb +4 -4
- data/test/delegator_test.rb +1 -1
- data/test/devise_test.rb +21 -8
- data/test/failure_app_test.rb +61 -25
- data/test/generators/active_record_generator_test.rb +10 -4
- data/test/generators/devise_generator_test.rb +2 -2
- data/test/generators/mongoid_generator_test.rb +3 -3
- data/test/generators/views_generator_test.rb +30 -1
- data/test/helpers/devise_helper_test.rb +14 -13
- data/test/integration/authenticatable_test.rb +61 -45
- data/test/integration/confirmable_test.rb +95 -55
- data/test/integration/database_authenticatable_test.rb +16 -16
- data/test/integration/http_authenticatable_test.rb +12 -12
- data/test/integration/lockable_test.rb +43 -43
- data/test/integration/omniauthable_test.rb +3 -3
- data/test/integration/recoverable_test.rb +53 -53
- data/test/integration/registerable_test.rb +90 -80
- data/test/integration/rememberable_test.rb +15 -15
- data/test/integration/timeoutable_test.rb +27 -16
- data/test/integration/trackable_test.rb +4 -4
- data/test/mailers/confirmation_instructions_test.rb +7 -7
- data/test/mailers/reset_password_instructions_test.rb +6 -6
- data/test/mailers/unlock_instructions_test.rb +5 -5
- data/test/mapping_test.rb +3 -3
- data/test/models/authenticatable_test.rb +3 -3
- data/test/models/confirmable_test.rb +32 -32
- data/test/models/database_authenticatable_test.rb +32 -27
- data/test/models/lockable_test.rb +57 -33
- data/test/models/recoverable_test.rb +34 -22
- data/test/models/rememberable_test.rb +29 -14
- data/test/models/serializable_test.rb +8 -8
- data/test/models/timeoutable_test.rb +1 -1
- data/test/models/trackable_test.rb +28 -0
- data/test/models/validatable_test.rb +13 -13
- data/test/omniauth/config_test.rb +4 -4
- data/test/omniauth/url_helpers_test.rb +3 -3
- data/test/orm/mongoid.rb +1 -1
- data/test/parameter_sanitizer_test.rb +1 -1
- data/test/rails_app/app/active_record/shim.rb +1 -1
- data/test/rails_app/app/active_record/user_on_engine.rb +7 -0
- data/test/rails_app/app/active_record/user_on_main_app.rb +7 -0
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +1 -1
- data/test/rails_app/app/controllers/admins_controller.rb +1 -1
- data/test/rails_app/app/controllers/application_controller.rb +5 -2
- data/test/rails_app/app/controllers/application_with_fake_engine.rb +30 -0
- data/test/rails_app/app/controllers/custom/registrations_controller.rb +21 -0
- data/test/rails_app/app/controllers/home_controller.rb +1 -1
- data/test/rails_app/app/controllers/publisher/registrations_controller.rb +1 -1
- data/test/rails_app/app/controllers/publisher/sessions_controller.rb +1 -1
- data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +4 -4
- data/test/rails_app/app/controllers/users_controller.rb +6 -6
- data/test/rails_app/app/mailers/users/mailer.rb +4 -4
- data/test/rails_app/app/mongoid/admin.rb +11 -11
- data/test/rails_app/app/mongoid/shim.rb +2 -2
- data/test/rails_app/app/mongoid/user.rb +19 -19
- data/test/rails_app/app/mongoid/user_on_engine.rb +39 -0
- data/test/rails_app/app/mongoid/user_on_main_app.rb +39 -0
- data/test/rails_app/app/views/admins/sessions/new.html.erb +1 -1
- data/test/rails_app/app/views/home/admin_dashboard.html.erb +1 -1
- data/test/rails_app/app/views/home/index.html.erb +1 -1
- data/test/rails_app/app/views/home/join.html.erb +1 -1
- data/test/rails_app/app/views/home/user_dashboard.html.erb +1 -1
- data/test/rails_app/app/views/layouts/application.html.erb +1 -1
- data/test/rails_app/config/application.rb +2 -2
- data/test/rails_app/config/boot.rb +7 -1
- data/test/rails_app/config/environments/development.rb +0 -4
- data/test/rails_app/config/environments/production.rb +0 -4
- data/test/rails_app/config/initializers/devise.rb +7 -5
- data/test/rails_app/config/initializers/secret_token.rb +1 -1
- data/test/rails_app/config/routes.rb +60 -42
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +7 -7
- data/test/rails_app/db/schema.rb +21 -17
- data/test/rails_app/lib/shared_admin.rb +4 -4
- data/test/rails_app/lib/shared_user.rb +1 -1
- data/test/rails_app/lib/shared_user_without_omniauth.rb +13 -0
- data/test/routes_test.rb +72 -58
- data/test/support/action_controller/record_identifier.rb +10 -0
- data/test/support/assertions.rb +2 -3
- data/test/support/helpers.rb +4 -4
- data/test/support/integration.rb +14 -14
- data/test/support/mongoid.yml +6 -0
- data/test/test_helper.rb +2 -7
- data/test/test_helpers_test.rb +25 -35
- data/test/test_models.rb +12 -5
- metadata +53 -38
- data/gemfiles/Gemfile.rails-3.2.x.lock +0 -159
data/script/s3-put
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
# Usage: s3-put <FILE> <S3_BUCKET>[:<PATH>] [<CONTENT_TYPE>]
|
3
|
+
#
|
4
|
+
# Uploads a file to the Amazon S3 service.
|
5
|
+
# Outputs the URL for the newly uploaded file.
|
6
|
+
#
|
7
|
+
# Requirements:
|
8
|
+
# - AMAZON_ACCESS_KEY_ID
|
9
|
+
# - AMAZON_SECRET_ACCESS_KEY
|
10
|
+
# - openssl
|
11
|
+
# - curl
|
12
|
+
#
|
13
|
+
# Author: Mislav Marohnić
|
14
|
+
|
15
|
+
set -e
|
16
|
+
|
17
|
+
authorization() {
|
18
|
+
local signature="$(string_to_sign | hmac_sha1 | base64)"
|
19
|
+
echo "AWS ${AMAZON_ACCESS_KEY_ID?}:${signature}"
|
20
|
+
}
|
21
|
+
|
22
|
+
hmac_sha1() {
|
23
|
+
openssl dgst -binary -sha1 -hmac "${AMAZON_SECRET_ACCESS_KEY?}"
|
24
|
+
}
|
25
|
+
|
26
|
+
base64() {
|
27
|
+
openssl enc -base64
|
28
|
+
}
|
29
|
+
|
30
|
+
bin_md5() {
|
31
|
+
openssl dgst -binary -md5
|
32
|
+
}
|
33
|
+
|
34
|
+
string_to_sign() {
|
35
|
+
echo "$http_method"
|
36
|
+
echo "$content_md5"
|
37
|
+
echo "$content_type"
|
38
|
+
echo "$date"
|
39
|
+
echo "x-amz-acl:$acl"
|
40
|
+
printf "/$bucket/$remote_path"
|
41
|
+
}
|
42
|
+
|
43
|
+
date_string() {
|
44
|
+
LC_TIME=C date "+%a, %d %h %Y %T %z"
|
45
|
+
}
|
46
|
+
|
47
|
+
file="$1"
|
48
|
+
bucket="${2%%:*}"
|
49
|
+
remote_path="${2#*:}"
|
50
|
+
content_type="$3"
|
51
|
+
|
52
|
+
if [ -z "$remote_path" ] || [ "$remote_path" = "$bucket" ]; then
|
53
|
+
remote_path="${file##*/}"
|
54
|
+
fi
|
55
|
+
|
56
|
+
http_method=PUT
|
57
|
+
acl="public-read"
|
58
|
+
content_md5="$(bin_md5 < "$file" | base64)"
|
59
|
+
date="$(date_string)"
|
60
|
+
|
61
|
+
url="https://$bucket.s3.amazonaws.com/$remote_path"
|
62
|
+
|
63
|
+
curl -qsSf -T "$file" \
|
64
|
+
-H "Authorization: $(authorization)" \
|
65
|
+
-H "x-amz-acl: $acl" \
|
66
|
+
-H "Date: $date" \
|
67
|
+
-H "Content-MD5: $content_md5" \
|
68
|
+
-H "Content-Type: $content_type" \
|
69
|
+
"$url"
|
70
|
+
|
71
|
+
echo "$url"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CustomRegistrationsControllerTest < ActionController::TestCase
|
4
|
+
tests Custom::RegistrationsController
|
5
|
+
|
6
|
+
include Devise::TestHelpers
|
7
|
+
|
8
|
+
setup do
|
9
|
+
request.env["devise.mapping"] = Devise.mappings[:user]
|
10
|
+
@password = 'password'
|
11
|
+
@user = create_user(password: @password, password_confirmation: @password).tap(&:confirm!)
|
12
|
+
end
|
13
|
+
|
14
|
+
test "yield resource to block on create success" do
|
15
|
+
post :create, { user: { email: "user@example.org", password: "password", password_confirmation: "password" } }
|
16
|
+
assert @controller.create_block_called?, "create failed to yield resource to provided block"
|
17
|
+
end
|
18
|
+
|
19
|
+
test "yield resource to block on create failure" do
|
20
|
+
post :create, { user: { } }
|
21
|
+
assert @controller.create_block_called?, "create failed to yield resource to provided block"
|
22
|
+
end
|
23
|
+
|
24
|
+
test "yield resource to block on update success" do
|
25
|
+
sign_in @user
|
26
|
+
put :update, { user: { current_password: @password } }
|
27
|
+
assert @controller.update_block_called?, "update failed to yield resource to provided block"
|
28
|
+
end
|
29
|
+
|
30
|
+
test "yield resource to block on update failure" do
|
31
|
+
sign_in @user
|
32
|
+
put :update, { user: { } }
|
33
|
+
assert @controller.update_block_called?, "update failed to yield resource to provided block"
|
34
|
+
end
|
35
|
+
end
|
@@ -14,81 +14,110 @@ class ControllerAuthenticatableTest < ActionController::TestCase
|
|
14
14
|
end
|
15
15
|
|
16
16
|
test 'proxy signed_in?(scope) to authenticate?' do
|
17
|
-
@mock_warden.expects(:authenticate?).with(:
|
17
|
+
@mock_warden.expects(:authenticate?).with(scope: :my_scope)
|
18
18
|
@controller.signed_in?(:my_scope)
|
19
19
|
end
|
20
20
|
|
21
21
|
test 'proxy signed_in?(nil) to authenticate?' do
|
22
22
|
Devise.mappings.keys.each do |scope| # :user, :admin, :manager
|
23
|
-
@mock_warden.expects(:authenticate?).with(:
|
23
|
+
@mock_warden.expects(:authenticate?).with(scope: scope)
|
24
24
|
end
|
25
25
|
@controller.signed_in?
|
26
26
|
end
|
27
27
|
|
28
|
+
test 'proxy [group]_signed_in? to authenticate? with each scope' do
|
29
|
+
[:user, :admin].each do |scope|
|
30
|
+
@mock_warden.expects(:authenticate?).with(scope: scope).returns(false)
|
31
|
+
end
|
32
|
+
@controller.commenter_signed_in?
|
33
|
+
end
|
34
|
+
|
28
35
|
test 'proxy current_user to authenticate with user scope' do
|
29
|
-
@mock_warden.expects(:authenticate).with(:
|
36
|
+
@mock_warden.expects(:authenticate).with(scope: :user)
|
30
37
|
@controller.current_user
|
31
38
|
end
|
32
39
|
|
33
40
|
test 'proxy current_admin to authenticate with admin scope' do
|
34
|
-
@mock_warden.expects(:authenticate).with(:
|
41
|
+
@mock_warden.expects(:authenticate).with(scope: :admin)
|
35
42
|
@controller.current_admin
|
36
43
|
end
|
37
44
|
|
45
|
+
test 'proxy current_[group] to authenticate with each scope' do
|
46
|
+
[:user, :admin].each do |scope|
|
47
|
+
@mock_warden.expects(:authenticate).with(scope: scope).returns(nil)
|
48
|
+
end
|
49
|
+
@controller.current_commenter
|
50
|
+
end
|
51
|
+
|
52
|
+
test 'proxy current_[plural_group] to authenticate with each scope' do
|
53
|
+
[:user, :admin].each do |scope|
|
54
|
+
@mock_warden.expects(:authenticate).with(scope: scope)
|
55
|
+
end
|
56
|
+
@controller.current_commenters
|
57
|
+
end
|
58
|
+
|
38
59
|
test 'proxy current_publisher_account to authenticate with namespaced publisher account scope' do
|
39
|
-
@mock_warden.expects(:authenticate).with(:
|
60
|
+
@mock_warden.expects(:authenticate).with(scope: :publisher_account)
|
40
61
|
@controller.current_publisher_account
|
41
62
|
end
|
42
63
|
|
43
64
|
test 'proxy authenticate_user! to authenticate with user scope' do
|
44
|
-
@mock_warden.expects(:authenticate!).with(:
|
65
|
+
@mock_warden.expects(:authenticate!).with(scope: :user)
|
45
66
|
@controller.authenticate_user!
|
46
67
|
end
|
47
68
|
|
48
69
|
test 'proxy authenticate_user! options to authenticate with user scope' do
|
49
|
-
@mock_warden.expects(:authenticate!).with(:
|
50
|
-
@controller.authenticate_user!(:
|
70
|
+
@mock_warden.expects(:authenticate!).with(scope: :user, recall: "foo")
|
71
|
+
@controller.authenticate_user!(recall: "foo")
|
51
72
|
end
|
52
73
|
|
53
74
|
test 'proxy authenticate_admin! to authenticate with admin scope' do
|
54
|
-
@mock_warden.expects(:authenticate!).with(:
|
75
|
+
@mock_warden.expects(:authenticate!).with(scope: :admin)
|
55
76
|
@controller.authenticate_admin!
|
56
77
|
end
|
57
78
|
|
79
|
+
test 'proxy authenticate_[group]! to authenticate!? with each scope' do
|
80
|
+
[:user, :admin].each do |scope|
|
81
|
+
@mock_warden.expects(:authenticate!).with(scope: scope)
|
82
|
+
@mock_warden.expects(:authenticate?).with(scope: scope).returns(false)
|
83
|
+
end
|
84
|
+
@controller.authenticate_commenter!
|
85
|
+
end
|
86
|
+
|
58
87
|
test 'proxy authenticate_publisher_account! to authenticate with namespaced publisher account scope' do
|
59
|
-
@mock_warden.expects(:authenticate!).with(:
|
88
|
+
@mock_warden.expects(:authenticate!).with(scope: :publisher_account)
|
60
89
|
@controller.authenticate_publisher_account!
|
61
90
|
end
|
62
91
|
|
63
92
|
test 'proxy user_signed_in? to authenticate with user scope' do
|
64
|
-
@mock_warden.expects(:authenticate).with(:
|
93
|
+
@mock_warden.expects(:authenticate).with(scope: :user).returns("user")
|
65
94
|
assert @controller.user_signed_in?
|
66
95
|
end
|
67
96
|
|
68
97
|
test 'proxy admin_signed_in? to authenticatewith admin scope' do
|
69
|
-
@mock_warden.expects(:authenticate).with(:
|
98
|
+
@mock_warden.expects(:authenticate).with(scope: :admin)
|
70
99
|
assert_not @controller.admin_signed_in?
|
71
100
|
end
|
72
101
|
|
73
102
|
test 'proxy publisher_account_signed_in? to authenticate with namespaced publisher account scope' do
|
74
|
-
@mock_warden.expects(:authenticate).with(:
|
103
|
+
@mock_warden.expects(:authenticate).with(scope: :publisher_account)
|
75
104
|
@controller.publisher_account_signed_in?
|
76
105
|
end
|
77
106
|
|
78
107
|
test 'proxy user_session to session scope in warden' do
|
79
|
-
@mock_warden.expects(:authenticate).with(:
|
108
|
+
@mock_warden.expects(:authenticate).with(scope: :user).returns(true)
|
80
109
|
@mock_warden.expects(:session).with(:user).returns({})
|
81
110
|
@controller.user_session
|
82
111
|
end
|
83
112
|
|
84
113
|
test 'proxy admin_session to session scope in warden' do
|
85
|
-
@mock_warden.expects(:authenticate).with(:
|
114
|
+
@mock_warden.expects(:authenticate).with(scope: :admin).returns(true)
|
86
115
|
@mock_warden.expects(:session).with(:admin).returns({})
|
87
116
|
@controller.admin_session
|
88
117
|
end
|
89
118
|
|
90
119
|
test 'proxy publisher_account_session from namespaced scope to session scope in warden' do
|
91
|
-
@mock_warden.expects(:authenticate).with(:
|
120
|
+
@mock_warden.expects(:authenticate).with(scope: :publisher_account).returns(true)
|
92
121
|
@mock_warden.expects(:session).with(:publisher_account).returns({})
|
93
122
|
@controller.publisher_account_session
|
94
123
|
end
|
@@ -96,14 +125,14 @@ class ControllerAuthenticatableTest < ActionController::TestCase
|
|
96
125
|
test 'sign in proxy to set_user on warden' do
|
97
126
|
user = User.new
|
98
127
|
@mock_warden.expects(:user).returns(nil)
|
99
|
-
@mock_warden.expects(:set_user).with(user, :
|
128
|
+
@mock_warden.expects(:set_user).with(user, scope: :user).returns(true)
|
100
129
|
@controller.sign_in(:user, user)
|
101
130
|
end
|
102
131
|
|
103
132
|
test 'sign in accepts a resource as argument' do
|
104
133
|
user = User.new
|
105
134
|
@mock_warden.expects(:user).returns(nil)
|
106
|
-
@mock_warden.expects(:set_user).with(user, :
|
135
|
+
@mock_warden.expects(:set_user).with(user, scope: :user).returns(true)
|
107
136
|
@controller.sign_in(user)
|
108
137
|
end
|
109
138
|
|
@@ -117,15 +146,15 @@ class ControllerAuthenticatableTest < ActionController::TestCase
|
|
117
146
|
test 'sign in again when the user is already in only if force is given' do
|
118
147
|
user = User.new
|
119
148
|
@mock_warden.expects(:user).returns(user)
|
120
|
-
@mock_warden.expects(:set_user).with(user, :
|
121
|
-
@controller.sign_in(user, :
|
149
|
+
@mock_warden.expects(:set_user).with(user, scope: :user).returns(true)
|
150
|
+
@controller.sign_in(user, force: true)
|
122
151
|
end
|
123
152
|
|
124
153
|
test 'sign in accepts bypass as option' do
|
125
154
|
user = User.new
|
126
155
|
@mock_warden.expects(:session_serializer).returns(serializer = mock())
|
127
156
|
serializer.expects(:store).with(user, :user)
|
128
|
-
@controller.sign_in(user, :
|
157
|
+
@controller.sign_in(user, bypass: true)
|
129
158
|
end
|
130
159
|
|
131
160
|
test 'sign out clears up any signed in user from all scopes' do
|
@@ -141,18 +170,18 @@ class ControllerAuthenticatableTest < ActionController::TestCase
|
|
141
170
|
|
142
171
|
test 'sign out logs out and clears up any signed in user by scope' do
|
143
172
|
user = User.new
|
144
|
-
@mock_warden.expects(:user).with(:
|
173
|
+
@mock_warden.expects(:user).with(scope: :user, run_callbacks: false).returns(user)
|
145
174
|
@mock_warden.expects(:logout).with(:user).returns(true)
|
146
|
-
@mock_warden.expects(:clear_strategies_cache!).with(:
|
175
|
+
@mock_warden.expects(:clear_strategies_cache!).with(scope: :user).returns(true)
|
147
176
|
@controller.instance_variable_set(:@current_user, user)
|
148
177
|
@controller.sign_out(:user)
|
149
178
|
assert_equal nil, @controller.instance_variable_get(:@current_user)
|
150
179
|
end
|
151
180
|
|
152
181
|
test 'sign out accepts a resource as argument' do
|
153
|
-
@mock_warden.expects(:user).with(:
|
182
|
+
@mock_warden.expects(:user).with(scope: :user, run_callbacks: false).returns(true)
|
154
183
|
@mock_warden.expects(:logout).with(:user).returns(true)
|
155
|
-
@mock_warden.expects(:clear_strategies_cache!).with(:
|
184
|
+
@mock_warden.expects(:clear_strategies_cache!).with(scope: :user).returns(true)
|
156
185
|
@controller.sign_out(User.new)
|
157
186
|
end
|
158
187
|
|
@@ -187,6 +216,35 @@ class ControllerAuthenticatableTest < ActionController::TestCase
|
|
187
216
|
assert_nil @controller.session[:"user_return_to"]
|
188
217
|
end
|
189
218
|
|
219
|
+
test 'store location for stores a location to redirect back to' do
|
220
|
+
assert_nil @controller.stored_location_for(:user)
|
221
|
+
@controller.store_location_for(:user, "/foo.bar")
|
222
|
+
assert_equal "/foo.bar", @controller.stored_location_for(:user)
|
223
|
+
end
|
224
|
+
|
225
|
+
test 'store bad location for stores a location to redirect back to' do
|
226
|
+
assert_nil @controller.stored_location_for(:user)
|
227
|
+
@controller.store_location_for(:user, "/foo.bar\">Carry")
|
228
|
+
assert_nil @controller.stored_location_for(:user)
|
229
|
+
end
|
230
|
+
|
231
|
+
test 'store location for accepts a resource as argument' do
|
232
|
+
@controller.store_location_for(User.new, "/foo.bar")
|
233
|
+
assert_equal "/foo.bar", @controller.stored_location_for(User.new)
|
234
|
+
end
|
235
|
+
|
236
|
+
test 'store location for stores paths' do
|
237
|
+
@controller.store_location_for(:user, "//host/foo.bar")
|
238
|
+
assert_equal "/foo.bar", @controller.stored_location_for(:user)
|
239
|
+
@controller.store_location_for(:user, "///foo.bar")
|
240
|
+
assert_equal "/foo.bar", @controller.stored_location_for(:user)
|
241
|
+
end
|
242
|
+
|
243
|
+
test 'store location for stores query string' do
|
244
|
+
@controller.store_location_for(:user, "/foo?bar=baz")
|
245
|
+
assert_equal "/foo?bar=baz", @controller.stored_location_for(:user)
|
246
|
+
end
|
247
|
+
|
190
248
|
test 'after sign in path defaults to root path if none by was specified for the given scope' do
|
191
249
|
assert_equal root_path, @controller.after_sign_in_path_for(:user)
|
192
250
|
end
|
@@ -204,7 +262,7 @@ class ControllerAuthenticatableTest < ActionController::TestCase
|
|
204
262
|
user = User.new
|
205
263
|
@controller.session[:user_return_to] = "/foo.bar"
|
206
264
|
@mock_warden.expects(:user).with(:user).returns(nil)
|
207
|
-
@mock_warden.expects(:set_user).with(user, :
|
265
|
+
@mock_warden.expects(:set_user).with(user, scope: :user).returns(true)
|
208
266
|
@controller.expects(:redirect_to).with("/foo.bar")
|
209
267
|
@controller.sign_in_and_redirect(user)
|
210
268
|
end
|
@@ -212,7 +270,7 @@ class ControllerAuthenticatableTest < ActionController::TestCase
|
|
212
270
|
test 'sign in and redirect uses the configured after sign in path' do
|
213
271
|
admin = Admin.new
|
214
272
|
@mock_warden.expects(:user).with(:admin).returns(nil)
|
215
|
-
@mock_warden.expects(:set_user).with(admin, :
|
273
|
+
@mock_warden.expects(:set_user).with(admin, scope: :admin).returns(true)
|
216
274
|
@controller.expects(:redirect_to).with(admin_root_path)
|
217
275
|
@controller.sign_in_and_redirect(admin)
|
218
276
|
end
|
@@ -226,10 +284,10 @@ class ControllerAuthenticatableTest < ActionController::TestCase
|
|
226
284
|
end
|
227
285
|
|
228
286
|
test 'sign out and redirect uses the configured after sign out path when signing out only the current scope' do
|
229
|
-
swap Devise, :
|
230
|
-
@mock_warden.expects(:user).with(:
|
287
|
+
swap Devise, sign_out_all_scopes: false do
|
288
|
+
@mock_warden.expects(:user).with(scope: :admin, run_callbacks: false).returns(true)
|
231
289
|
@mock_warden.expects(:logout).with(:admin).returns(true)
|
232
|
-
@mock_warden.expects(:clear_strategies_cache!).with(:
|
290
|
+
@mock_warden.expects(:clear_strategies_cache!).with(scope: :admin).returns(true)
|
233
291
|
@controller.expects(:redirect_to).with(admin_root_path)
|
234
292
|
@controller.instance_eval "def after_sign_out_path_for(resource); admin_root_path; end"
|
235
293
|
@controller.sign_out_and_redirect(:admin)
|
@@ -237,7 +295,7 @@ class ControllerAuthenticatableTest < ActionController::TestCase
|
|
237
295
|
end
|
238
296
|
|
239
297
|
test 'sign out and redirect uses the configured after sign out path when signing out all scopes' do
|
240
|
-
swap Devise, :
|
298
|
+
swap Devise, sign_out_all_scopes: true do
|
241
299
|
@mock_warden.expects(:user).times(Devise.mappings.size)
|
242
300
|
@mock_warden.expects(:logout).with().returns(true)
|
243
301
|
@mock_warden.expects(:clear_strategies_cache!).with().returns(true)
|
@@ -51,11 +51,11 @@ class HelpersTest < ActionController::TestCase
|
|
51
51
|
end
|
52
52
|
|
53
53
|
test 'resources methods are not controller actions' do
|
54
|
-
assert @controller.class.action_methods.empty?
|
54
|
+
assert @controller.class.action_methods.delete_if { |m| m.include? 'commenter' }.empty?
|
55
55
|
end
|
56
56
|
|
57
57
|
test 'require no authentication tests current mapping' do
|
58
|
-
@mock_warden.expects(:authenticate?).with(:rememberable, :
|
58
|
+
@mock_warden.expects(:authenticate?).with(:rememberable, scope: :user).returns(true)
|
59
59
|
@mock_warden.expects(:user).with(:user).returns(User.new)
|
60
60
|
@controller.expects(:redirect_to).with(root_path)
|
61
61
|
@controller.send :require_no_authentication
|
@@ -71,7 +71,7 @@ class HelpersTest < ActionController::TestCase
|
|
71
71
|
end
|
72
72
|
|
73
73
|
test 'require no authentication sets a flash message' do
|
74
|
-
@mock_warden.expects(:authenticate?).with(:rememberable, :
|
74
|
+
@mock_warden.expects(:authenticate?).with(:rememberable, scope: :user).returns(true)
|
75
75
|
@mock_warden.expects(:user).with(:user).returns(User.new)
|
76
76
|
@controller.expects(:redirect_to).with(root_path)
|
77
77
|
@controller.send :require_no_authentication
|
@@ -79,7 +79,7 @@ class HelpersTest < ActionController::TestCase
|
|
79
79
|
end
|
80
80
|
|
81
81
|
test 'signed in resource returns signed in resource for current scope' do
|
82
|
-
@mock_warden.expects(:authenticate).with(:
|
82
|
+
@mock_warden.expects(:authenticate).with(scope: :user).returns(User.new)
|
83
83
|
assert_kind_of User, @controller.signed_in_resource
|
84
84
|
end
|
85
85
|
|
@@ -100,21 +100,24 @@ class HelpersTest < ActionController::TestCase
|
|
100
100
|
end
|
101
101
|
|
102
102
|
test 'uses custom i18n options' do
|
103
|
-
@controller.stubs(:devise_i18n_options).returns(:
|
103
|
+
@controller.stubs(:devise_i18n_options).returns(default: "devise custom options")
|
104
104
|
@controller.send :set_flash_message, :notice, :invalid_i18n_messagesend_instructions
|
105
105
|
assert_equal 'devise custom options', flash[:notice]
|
106
106
|
end
|
107
107
|
|
108
108
|
test 'allows custom i18n options to override resource_name' do
|
109
109
|
I18n.expects(:t).with("custom_resource_name.confirmed", anything)
|
110
|
-
@controller.stubs(:devise_i18n_options).returns(:
|
110
|
+
@controller.stubs(:devise_i18n_options).returns(resource_name: "custom_resource_name")
|
111
111
|
@controller.send :set_flash_message, :notice, :confirmed
|
112
112
|
end
|
113
113
|
|
114
114
|
test 'navigational_formats not returning a wild card' do
|
115
115
|
MyController.send(:public, :navigational_formats)
|
116
|
-
|
117
|
-
|
116
|
+
|
117
|
+
swap Devise, navigational_formats: ['*/*', :html] do
|
118
|
+
assert_not @controller.navigational_formats.include?("*/*")
|
119
|
+
end
|
120
|
+
|
118
121
|
MyController.send(:protected, :navigational_formats)
|
119
122
|
end
|
120
123
|
end
|
@@ -12,7 +12,7 @@ class PasswordsControllerTest < ActionController::TestCase
|
|
12
12
|
|
13
13
|
def put_update_with_params
|
14
14
|
put :update, "user" => {
|
15
|
-
"reset_password_token" => @raw, "password" => "
|
15
|
+
"reset_password_token" => @raw, "password" => "1234567", "password_confirmation" => "1234567"
|
16
16
|
}
|
17
17
|
end
|
18
18
|
|
@@ -5,21 +5,25 @@ class SessionsControllerTest < ActionController::TestCase
|
|
5
5
|
include Devise::TestHelpers
|
6
6
|
|
7
7
|
test "#create doesn't raise unpermitted params when sign in fails" do
|
8
|
-
|
9
|
-
|
8
|
+
begin
|
9
|
+
subscriber = ActiveSupport::Notifications.subscribe /unpermitted_parameters/ do |name, start, finish, id, payload|
|
10
|
+
flunk "Unpermitted params: #{payload}"
|
11
|
+
end
|
12
|
+
request.env["devise.mapping"] = Devise.mappings[:user]
|
13
|
+
request.session["user_return_to"] = 'foo.bar'
|
14
|
+
create_user
|
15
|
+
post :create, user: {
|
16
|
+
email: "wrong@email.com",
|
17
|
+
password: "wrongpassword"
|
18
|
+
}
|
19
|
+
assert_equal 200, @response.status
|
20
|
+
ensure
|
21
|
+
ActiveSupport::Notifications.unsubscribe(subscriber)
|
10
22
|
end
|
11
|
-
request.env["devise.mapping"] = Devise.mappings[:user]
|
12
|
-
request.session["user_return_to"] = 'foo.bar'
|
13
|
-
create_user
|
14
|
-
post :create, :user => {
|
15
|
-
:email => "wrong@email.com",
|
16
|
-
:password => "wrongpassword"
|
17
|
-
}
|
18
|
-
assert_equal 200, @response.status
|
19
23
|
end
|
20
24
|
|
21
25
|
test "#create works even with scoped views" do
|
22
|
-
swap Devise, :
|
26
|
+
swap Devise, scoped_views: true do
|
23
27
|
request.env["devise.mapping"] = Devise.mappings[:user]
|
24
28
|
post :create
|
25
29
|
assert_equal 200, @response.status
|
@@ -33,9 +37,9 @@ class SessionsControllerTest < ActionController::TestCase
|
|
33
37
|
|
34
38
|
user = create_user
|
35
39
|
user.confirm!
|
36
|
-
post :create, :
|
37
|
-
:
|
38
|
-
:
|
40
|
+
post :create, user: {
|
41
|
+
email: user.email,
|
42
|
+
password: user.password
|
39
43
|
}
|
40
44
|
|
41
45
|
assert_nil request.session["user_return_to"]
|
@@ -47,9 +51,9 @@ class SessionsControllerTest < ActionController::TestCase
|
|
47
51
|
|
48
52
|
user = create_user
|
49
53
|
user.confirm!
|
50
|
-
post :create, :
|
51
|
-
:
|
52
|
-
:
|
54
|
+
post :create, format: 'json', user: {
|
55
|
+
email: user.email,
|
56
|
+
password: user.password
|
53
57
|
}
|
54
58
|
|
55
59
|
assert_equal 'foo.bar', request.session["user_return_to"]
|
@@ -57,9 +61,9 @@ class SessionsControllerTest < ActionController::TestCase
|
|
57
61
|
|
58
62
|
test "#create doesn't raise exception after Warden authentication fails when TestHelpers included" do
|
59
63
|
request.env["devise.mapping"] = Devise.mappings[:user]
|
60
|
-
post :create, :
|
61
|
-
:
|
62
|
-
:
|
64
|
+
post :create, user: {
|
65
|
+
email: "nosuchuser@example.com",
|
66
|
+
password: "wevdude"
|
63
67
|
}
|
64
68
|
assert_equal 200, @response.status
|
65
69
|
assert_template "devise/sessions/new"
|
@@ -69,12 +73,12 @@ class SessionsControllerTest < ActionController::TestCase
|
|
69
73
|
request.env["devise.mapping"] = Devise.mappings[:user]
|
70
74
|
user = create_user
|
71
75
|
user.confirm!
|
72
|
-
post :create, :
|
73
|
-
:
|
74
|
-
:
|
76
|
+
post :create, format: 'json', user: {
|
77
|
+
email: user.email,
|
78
|
+
password: user.password
|
75
79
|
}
|
76
80
|
|
77
|
-
delete :destroy, :
|
81
|
+
delete :destroy, format: 'json'
|
78
82
|
assert flash[:notice].blank?, "flash[:notice] should be blank, not #{flash[:notice].inspect}"
|
79
83
|
assert_equal 204, @response.status
|
80
84
|
end
|
@@ -88,7 +92,7 @@ class SessionsControllerTest < ActionController::TestCase
|
|
88
92
|
|
89
93
|
begin
|
90
94
|
assert_nothing_raised ActiveModel::MassAssignmentSecurity::Error do
|
91
|
-
get :new, :
|
95
|
+
get :new, user: { email: "allez viens!" }
|
92
96
|
end
|
93
97
|
ensure
|
94
98
|
ActiveRecord::Base.mass_assignment_sanitizer = :logger
|
@@ -14,10 +14,10 @@ class RoutesTest < ActionController::TestCase
|
|
14
14
|
send(:"#{prepend_path}user_#{name}_url")
|
15
15
|
|
16
16
|
# Default url params
|
17
|
-
assert_equal @controller.send(:"#{prepend_path}#{name}_path", :user, :
|
18
|
-
send(:"#{prepend_path}user_#{name}_path", :
|
19
|
-
assert_equal @controller.send(:"#{prepend_path}#{name}_url", :user, :
|
20
|
-
send(:"#{prepend_path}user_#{name}_url", :
|
17
|
+
assert_equal @controller.send(:"#{prepend_path}#{name}_path", :user, param: 123),
|
18
|
+
send(:"#{prepend_path}user_#{name}_path", param: 123)
|
19
|
+
assert_equal @controller.send(:"#{prepend_path}#{name}_url", :user, param: 123),
|
20
|
+
send(:"#{prepend_path}user_#{name}_url", param: 123)
|
21
21
|
|
22
22
|
@request.path = nil
|
23
23
|
# With an object
|
data/test/delegator_test.rb
CHANGED
@@ -14,6 +14,6 @@ class DelegatorTest < ActiveSupport::TestCase
|
|
14
14
|
end
|
15
15
|
|
16
16
|
test 'failure_app returns associated failure app by scope in the given environment' do
|
17
|
-
assert_kind_of Proc, delegator.failure_app({"warden.options" => {:
|
17
|
+
assert_kind_of Proc, delegator.failure_app({"warden.options" => {scope: "manager"}})
|
18
18
|
end
|
19
19
|
end
|
data/test/devise_test.rb
CHANGED
@@ -3,10 +3,10 @@ require 'test_helper'
|
|
3
3
|
module Devise
|
4
4
|
def self.yield_and_restore
|
5
5
|
@@warden_configured = nil
|
6
|
-
c, b = @@warden_config, @@
|
6
|
+
c, b = @@warden_config, @@warden_config_blocks
|
7
7
|
yield
|
8
8
|
ensure
|
9
|
-
@@warden_config, @@
|
9
|
+
@@warden_config, @@warden_config_blocks = c, b
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -23,7 +23,7 @@ class DeviseTest < ActiveSupport::TestCase
|
|
23
23
|
end
|
24
24
|
|
25
25
|
test 'model options can be configured through Devise' do
|
26
|
-
swap Devise, :
|
26
|
+
swap Devise, allow_unconfirmed_access_for: 113, pepper: "foo" do
|
27
27
|
assert_equal 113, Devise.allow_unconfirmed_access_for
|
28
28
|
assert_equal "foo", Devise.pepper
|
29
29
|
end
|
@@ -42,14 +42,27 @@ class DeviseTest < ActiveSupport::TestCase
|
|
42
42
|
|
43
43
|
test 'warden manager user configuration through a block' do
|
44
44
|
Devise.yield_and_restore do
|
45
|
-
|
45
|
+
executed = false
|
46
46
|
Devise.warden do |config|
|
47
|
-
|
47
|
+
executed = true
|
48
48
|
assert_kind_of Warden::Config, config
|
49
49
|
end
|
50
50
|
|
51
51
|
Devise.configure_warden!
|
52
|
-
assert
|
52
|
+
assert executed
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
test 'warden manager user configuration through multiple blocks' do
|
57
|
+
Devise.yield_and_restore do
|
58
|
+
executed = 0
|
59
|
+
|
60
|
+
3.times do
|
61
|
+
Devise.warden { |config| executed += 1 }
|
62
|
+
end
|
63
|
+
|
64
|
+
Devise.configure_warden!
|
65
|
+
assert_equal 3, executed
|
53
66
|
end
|
54
67
|
end
|
55
68
|
|
@@ -60,12 +73,12 @@ class DeviseTest < ActiveSupport::TestCase
|
|
60
73
|
assert_not defined?(Devise::Models::Coconut)
|
61
74
|
Devise::ALL.delete(:coconut)
|
62
75
|
|
63
|
-
assert_nothing_raised(Exception) { Devise.add_module(:banana, :
|
76
|
+
assert_nothing_raised(Exception) { Devise.add_module(:banana, strategy: :fruits) }
|
64
77
|
assert_equal :fruits, Devise::STRATEGIES[:banana]
|
65
78
|
Devise::ALL.delete(:banana)
|
66
79
|
Devise::STRATEGIES.delete(:banana)
|
67
80
|
|
68
|
-
assert_nothing_raised(Exception) { Devise.add_module(:kivi, :
|
81
|
+
assert_nothing_raised(Exception) { Devise.add_module(:kivi, controller: :fruits) }
|
69
82
|
assert_equal :fruits, Devise::CONTROLLERS[:kivi]
|
70
83
|
Devise::ALL.delete(:kivi)
|
71
84
|
Devise::CONTROLLERS.delete(:kivi)
|