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
@@ -3,17 +3,17 @@ require 'test_helper'
|
|
3
3
|
class ConfirmationTest < ActionDispatch::IntegrationTest
|
4
4
|
|
5
5
|
def visit_user_confirmation_with_token(confirmation_token)
|
6
|
-
visit user_confirmation_path(:
|
6
|
+
visit user_confirmation_path(confirmation_token: confirmation_token)
|
7
7
|
end
|
8
8
|
|
9
9
|
def resend_confirmation
|
10
|
-
user = create_user(:
|
10
|
+
user = create_user(confirm: false)
|
11
11
|
ActionMailer::Base.deliveries.clear
|
12
12
|
|
13
13
|
visit new_user_session_path
|
14
14
|
click_link "Didn't receive confirmation instructions?"
|
15
15
|
|
16
|
-
fill_in 'email', :
|
16
|
+
fill_in 'email', with: user.email
|
17
17
|
click_button 'Resend confirmation instructions'
|
18
18
|
end
|
19
19
|
|
@@ -21,7 +21,7 @@ class ConfirmationTest < ActionDispatch::IntegrationTest
|
|
21
21
|
resend_confirmation
|
22
22
|
|
23
23
|
assert_current_url '/users/sign_in'
|
24
|
-
assert_contain 'You will receive an email with instructions
|
24
|
+
assert_contain 'You will receive an email with instructions for how to confirm your email address in a few minutes'
|
25
25
|
assert_equal 1, ActionMailer::Base.deliveries.size
|
26
26
|
assert_equal ['please-change-me@config-initializers-devise.com'], ActionMailer::Base.deliveries.first.from
|
27
27
|
end
|
@@ -39,24 +39,55 @@ class ConfirmationTest < ActionDispatch::IntegrationTest
|
|
39
39
|
end
|
40
40
|
|
41
41
|
test 'user with valid confirmation token should not be able to confirm an account after the token has expired' do
|
42
|
-
swap Devise, :
|
43
|
-
user = create_user(:
|
42
|
+
swap Devise, confirm_within: 3.days do
|
43
|
+
user = create_user(confirm: false, confirmation_sent_at: 4.days.ago)
|
44
44
|
assert_not user.confirmed?
|
45
45
|
visit_user_confirmation_with_token(user.raw_confirmation_token)
|
46
46
|
|
47
47
|
assert_have_selector '#error_explanation'
|
48
48
|
assert_contain /needs to be confirmed within 3 days/
|
49
49
|
assert_not user.reload.confirmed?
|
50
|
+
assert_current_url "/users/confirmation?confirmation_token=#{user.raw_confirmation_token}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
test 'user with valid confirmation token where the token has expired and with application router_name set to a different engine it should raise an error' do
|
55
|
+
user = create_user(confirm: false, confirmation_sent_at: 4.days.ago)
|
56
|
+
|
57
|
+
swap Devise, confirm_within: 3.days, router_name: :fake_engine do
|
58
|
+
assert_raise ActionView::Template::Error do
|
59
|
+
visit_user_confirmation_with_token(user.raw_confirmation_token)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
test 'user with valid confirmation token where the token has expired and with application router_name set to a different engine and route overrides back to main it shows the path' do
|
65
|
+
user = create_user(confirm: false, confirmation_sent_at: 4.days.ago)
|
66
|
+
|
67
|
+
swap Devise, confirm_within: 3.days, router_name: :fake_engine do
|
68
|
+
visit user_on_main_app_confirmation_path(confirmation_token: user.raw_confirmation_token)
|
69
|
+
|
70
|
+
assert_current_url "/user_on_main_apps/confirmation?confirmation_token=#{user.raw_confirmation_token}"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
test 'user with valid confirmation token where the token has expired with router overrides different engine it shows the path' do
|
75
|
+
user = create_user(confirm: false, confirmation_sent_at: 4.days.ago)
|
76
|
+
|
77
|
+
swap Devise, confirm_within: 3.days do
|
78
|
+
visit user_on_engine_confirmation_path(confirmation_token: user.raw_confirmation_token)
|
79
|
+
|
80
|
+
assert_current_url "/user_on_engines/confirmation?confirmation_token=#{user.raw_confirmation_token}"
|
50
81
|
end
|
51
82
|
end
|
52
83
|
|
53
84
|
test 'user with valid confirmation token should be able to confirm an account before the token has expired' do
|
54
|
-
swap Devise, :
|
55
|
-
user = create_user(:
|
85
|
+
swap Devise, confirm_within: 3.days do
|
86
|
+
user = create_user(confirm: false, confirmation_sent_at: 2.days.ago)
|
56
87
|
assert_not user.confirmed?
|
57
88
|
visit_user_confirmation_with_token(user.raw_confirmation_token)
|
58
89
|
|
59
|
-
assert_contain 'Your
|
90
|
+
assert_contain 'Your email address has been successfully confirmed.'
|
60
91
|
assert_current_url '/users/sign_in'
|
61
92
|
assert user.reload.confirmed?
|
62
93
|
end
|
@@ -65,14 +96,14 @@ class ConfirmationTest < ActionDispatch::IntegrationTest
|
|
65
96
|
test 'user should be redirected to a custom path after confirmation' do
|
66
97
|
Devise::ConfirmationsController.any_instance.stubs(:after_confirmation_path_for).returns("/?custom=1")
|
67
98
|
|
68
|
-
user = create_user(:
|
99
|
+
user = create_user(confirm: false)
|
69
100
|
visit_user_confirmation_with_token(user.raw_confirmation_token)
|
70
101
|
|
71
102
|
assert_current_url "/?custom=1"
|
72
103
|
end
|
73
104
|
|
74
105
|
test 'already confirmed user should not be able to confirm the account again' do
|
75
|
-
user = create_user(:
|
106
|
+
user = create_user(confirm: false)
|
76
107
|
user.confirmed_at = Time.now
|
77
108
|
user.save
|
78
109
|
visit_user_confirmation_with_token(user.raw_confirmation_token)
|
@@ -82,31 +113,31 @@ class ConfirmationTest < ActionDispatch::IntegrationTest
|
|
82
113
|
end
|
83
114
|
|
84
115
|
test 'already confirmed user should not be able to confirm the account again neither request confirmation' do
|
85
|
-
user = create_user(:
|
116
|
+
user = create_user(confirm: false)
|
86
117
|
user.confirmed_at = Time.now
|
87
118
|
user.save
|
88
119
|
|
89
120
|
visit_user_confirmation_with_token(user.raw_confirmation_token)
|
90
121
|
assert_contain 'already confirmed'
|
91
122
|
|
92
|
-
fill_in 'email', :
|
123
|
+
fill_in 'email', with: user.email
|
93
124
|
click_button 'Resend confirmation instructions'
|
94
125
|
assert_contain 'already confirmed'
|
95
126
|
end
|
96
127
|
|
97
128
|
test 'not confirmed user with setup to block without confirmation should not be able to sign in' do
|
98
|
-
swap Devise, :
|
99
|
-
sign_in_as_user(:
|
129
|
+
swap Devise, allow_unconfirmed_access_for: 0.days do
|
130
|
+
sign_in_as_user(confirm: false)
|
100
131
|
|
101
|
-
assert_contain 'You have to confirm your
|
132
|
+
assert_contain 'You have to confirm your email address before continuing'
|
102
133
|
assert_not warden.authenticated?(:user)
|
103
134
|
end
|
104
135
|
end
|
105
136
|
|
106
137
|
test 'not confirmed user should not see confirmation message if invalid credentials are given' do
|
107
|
-
swap Devise, :
|
108
|
-
sign_in_as_user(:
|
109
|
-
fill_in 'password', :
|
138
|
+
swap Devise, allow_unconfirmed_access_for: 0.days do
|
139
|
+
sign_in_as_user(confirm: false) do
|
140
|
+
fill_in 'password', with: 'invalid'
|
110
141
|
end
|
111
142
|
|
112
143
|
assert_contain 'Invalid email or password'
|
@@ -115,8 +146,8 @@ class ConfirmationTest < ActionDispatch::IntegrationTest
|
|
115
146
|
end
|
116
147
|
|
117
148
|
test 'not confirmed user but configured with some days to confirm should be able to sign in' do
|
118
|
-
swap Devise, :
|
119
|
-
sign_in_as_user(:
|
149
|
+
swap Devise, allow_unconfirmed_access_for: 1.day do
|
150
|
+
sign_in_as_user(confirm: false)
|
120
151
|
|
121
152
|
assert_response :success
|
122
153
|
assert warden.authenticated?(:user)
|
@@ -124,86 +155,95 @@ class ConfirmationTest < ActionDispatch::IntegrationTest
|
|
124
155
|
end
|
125
156
|
|
126
157
|
test 'unconfirmed but signed in user should be redirected to their root path' do
|
127
|
-
swap Devise, :
|
128
|
-
user = sign_in_as_user(:
|
158
|
+
swap Devise, allow_unconfirmed_access_for: 1.day do
|
159
|
+
user = sign_in_as_user(confirm: false)
|
129
160
|
|
130
161
|
visit_user_confirmation_with_token(user.raw_confirmation_token)
|
131
|
-
assert_contain 'Your
|
162
|
+
assert_contain 'Your email address has been successfully confirmed.'
|
132
163
|
assert_current_url '/'
|
133
164
|
end
|
134
165
|
end
|
135
166
|
|
167
|
+
test 'user should be redirected to sign in page whenever signed in as another resource at same session already' do
|
168
|
+
sign_in_as_admin
|
169
|
+
|
170
|
+
user = create_user(confirm: false)
|
171
|
+
visit_user_confirmation_with_token(user.raw_confirmation_token)
|
172
|
+
|
173
|
+
assert_current_url '/users/sign_in'
|
174
|
+
end
|
175
|
+
|
136
176
|
test 'error message is configurable by resource name' do
|
137
|
-
store_translations :en, :
|
138
|
-
:
|
177
|
+
store_translations :en, devise: {
|
178
|
+
failure: { user: { unconfirmed: "Not confirmed user" } }
|
139
179
|
} do
|
140
|
-
sign_in_as_user(:
|
180
|
+
sign_in_as_user(confirm: false)
|
141
181
|
assert_contain 'Not confirmed user'
|
142
182
|
end
|
143
183
|
end
|
144
184
|
|
145
185
|
test 'resent confirmation token with valid E-Mail in XML format should return valid response' do
|
146
|
-
user = create_user(:
|
147
|
-
post user_confirmation_path(:
|
186
|
+
user = create_user(confirm: false)
|
187
|
+
post user_confirmation_path(format: 'xml'), user: { email: user.email }
|
148
188
|
assert_response :success
|
149
189
|
assert_equal response.body, {}.to_xml
|
150
190
|
end
|
151
191
|
|
152
192
|
test 'resent confirmation token with invalid E-Mail in XML format should return invalid response' do
|
153
|
-
create_user(:
|
154
|
-
post user_confirmation_path(:
|
193
|
+
create_user(confirm: false)
|
194
|
+
post user_confirmation_path(format: 'xml'), user: { email: 'invalid.test@test.com' }
|
155
195
|
assert_response :unprocessable_entity
|
156
196
|
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
157
197
|
end
|
158
198
|
|
159
199
|
test 'confirm account with valid confirmation token in XML format should return valid response' do
|
160
|
-
user = create_user(:
|
161
|
-
get user_confirmation_path(:
|
200
|
+
user = create_user(confirm: false)
|
201
|
+
get user_confirmation_path(confirmation_token: user.raw_confirmation_token, format: 'xml')
|
162
202
|
assert_response :success
|
163
203
|
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
|
164
204
|
end
|
165
205
|
|
166
206
|
test 'confirm account with invalid confirmation token in XML format should return invalid response' do
|
167
|
-
create_user(:
|
168
|
-
get user_confirmation_path(:
|
207
|
+
create_user(confirm: false)
|
208
|
+
get user_confirmation_path(confirmation_token: 'invalid_confirmation', format: 'xml')
|
169
209
|
assert_response :unprocessable_entity
|
170
210
|
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
171
211
|
end
|
172
212
|
|
173
213
|
test 'request an account confirmation account with JSON, should return an empty JSON' do
|
174
|
-
user = create_user(:
|
214
|
+
user = create_user(confirm: false)
|
175
215
|
|
176
|
-
post user_confirmation_path, :
|
216
|
+
post user_confirmation_path, user: { email: user.email }, format: :json
|
177
217
|
assert_response :success
|
178
218
|
assert_equal response.body, {}.to_json
|
179
219
|
end
|
180
220
|
|
181
221
|
test "when in paranoid mode and with a valid e-mail, should not say that the e-mail is valid" do
|
182
|
-
swap Devise, :
|
183
|
-
user = create_user(:
|
222
|
+
swap Devise, paranoid: true do
|
223
|
+
user = create_user(confirm: false)
|
184
224
|
visit new_user_session_path
|
185
225
|
|
186
226
|
click_link "Didn't receive confirmation instructions?"
|
187
|
-
fill_in 'email', :
|
227
|
+
fill_in 'email', with: user.email
|
188
228
|
click_button 'Resend confirmation instructions'
|
189
229
|
|
190
|
-
assert_contain "If your email address exists in our database, you will receive an email with instructions
|
230
|
+
assert_contain "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes."
|
191
231
|
assert_current_url "/users/sign_in"
|
192
232
|
end
|
193
233
|
end
|
194
234
|
|
195
235
|
test "when in paranoid mode and with a invalid e-mail, should not say that the e-mail is invalid" do
|
196
|
-
swap Devise, :
|
236
|
+
swap Devise, paranoid: true do
|
197
237
|
visit new_user_session_path
|
198
238
|
|
199
239
|
click_link "Didn't receive confirmation instructions?"
|
200
|
-
fill_in 'email', :
|
240
|
+
fill_in 'email', with: "idonthavethisemail@gmail.com"
|
201
241
|
click_button 'Resend confirmation instructions'
|
202
242
|
|
203
243
|
assert_not_contain "1 error prohibited this user from being saved:"
|
204
244
|
assert_not_contain "Email not found"
|
205
245
|
|
206
|
-
assert_contain "If your email address exists in our database, you will receive an email with instructions
|
246
|
+
assert_contain "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes."
|
207
247
|
assert_current_url "/users/sign_in"
|
208
248
|
end
|
209
249
|
end
|
@@ -216,32 +256,32 @@ class ConfirmationOnChangeTest < ActionDispatch::IntegrationTest
|
|
216
256
|
end
|
217
257
|
|
218
258
|
def visit_admin_confirmation_with_token(confirmation_token)
|
219
|
-
visit admin_confirmation_path(:
|
259
|
+
visit admin_confirmation_path(confirmation_token: confirmation_token)
|
220
260
|
end
|
221
261
|
|
222
262
|
test 'admin should be able to request a new confirmation after email changed' do
|
223
263
|
admin = create_admin
|
224
|
-
admin.update_attributes(:
|
264
|
+
admin.update_attributes(email: 'new_test@example.com')
|
225
265
|
|
226
266
|
visit new_admin_session_path
|
227
267
|
click_link "Didn't receive confirmation instructions?"
|
228
268
|
|
229
|
-
fill_in 'email', :
|
269
|
+
fill_in 'email', with: admin.unconfirmed_email
|
230
270
|
assert_difference "ActionMailer::Base.deliveries.size" do
|
231
271
|
click_button 'Resend confirmation instructions'
|
232
272
|
end
|
233
273
|
|
234
274
|
assert_current_url '/admin_area/sign_in'
|
235
|
-
assert_contain 'You will receive an email with instructions
|
275
|
+
assert_contain 'You will receive an email with instructions for how to confirm your email address in a few minutes'
|
236
276
|
end
|
237
277
|
|
238
278
|
test 'admin with valid confirmation token should be able to confirm email after email changed' do
|
239
279
|
admin = create_admin
|
240
|
-
admin.update_attributes(:
|
280
|
+
admin.update_attributes(email: 'new_test@example.com')
|
241
281
|
assert_equal 'new_test@example.com', admin.unconfirmed_email
|
242
282
|
visit_admin_confirmation_with_token(admin.raw_confirmation_token)
|
243
283
|
|
244
|
-
assert_contain 'Your
|
284
|
+
assert_contain 'Your email address has been successfully confirmed.'
|
245
285
|
assert_current_url '/admin_area/sign_in'
|
246
286
|
assert admin.reload.confirmed?
|
247
287
|
assert_not admin.reload.pending_reconfirmation?
|
@@ -249,13 +289,13 @@ class ConfirmationOnChangeTest < ActionDispatch::IntegrationTest
|
|
249
289
|
|
250
290
|
test 'admin with previously valid confirmation token should not be able to confirm email after email changed again' do
|
251
291
|
admin = create_admin
|
252
|
-
admin.update_attributes(:
|
292
|
+
admin.update_attributes(email: 'first_test@example.com')
|
253
293
|
assert_equal 'first_test@example.com', admin.unconfirmed_email
|
254
294
|
|
255
295
|
raw_confirmation_token = admin.raw_confirmation_token
|
256
296
|
admin = Admin.find(admin.id)
|
257
297
|
|
258
|
-
admin.update_attributes(:
|
298
|
+
admin.update_attributes(email: 'second_test@example.com')
|
259
299
|
assert_equal 'second_test@example.com', admin.unconfirmed_email
|
260
300
|
|
261
301
|
visit_admin_confirmation_with_token(raw_confirmation_token)
|
@@ -263,7 +303,7 @@ class ConfirmationOnChangeTest < ActionDispatch::IntegrationTest
|
|
263
303
|
assert_contain(/Confirmation token(.*)invalid/)
|
264
304
|
|
265
305
|
visit_admin_confirmation_with_token(admin.raw_confirmation_token)
|
266
|
-
assert_contain 'Your
|
306
|
+
assert_contain 'Your email address has been successfully confirmed.'
|
267
307
|
assert_current_url '/admin_area/sign_in'
|
268
308
|
assert admin.reload.confirmed?
|
269
309
|
assert_not admin.reload.pending_reconfirmation?
|
@@ -271,10 +311,10 @@ class ConfirmationOnChangeTest < ActionDispatch::IntegrationTest
|
|
271
311
|
|
272
312
|
test 'admin email should be unique also within unconfirmed_email' do
|
273
313
|
admin = create_admin
|
274
|
-
admin.update_attributes(:
|
314
|
+
admin.update_attributes(email: 'new_admin_test@example.com')
|
275
315
|
assert_equal 'new_admin_test@example.com', admin.unconfirmed_email
|
276
316
|
|
277
|
-
create_second_admin(:
|
317
|
+
create_second_admin(email: "new_admin_test@example.com")
|
278
318
|
|
279
319
|
visit_admin_confirmation_with_token(admin.raw_confirmation_token)
|
280
320
|
assert_have_selector '#error_explanation'
|
@@ -2,21 +2,21 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class DatabaseAuthenticationTest < ActionDispatch::IntegrationTest
|
4
4
|
test 'sign in with email of different case should succeed when email is in the list of case insensitive keys' do
|
5
|
-
create_user(:
|
5
|
+
create_user(email: 'Foo@Bar.com')
|
6
6
|
|
7
7
|
sign_in_as_user do
|
8
|
-
fill_in 'email', :
|
8
|
+
fill_in 'email', with: 'foo@bar.com'
|
9
9
|
end
|
10
10
|
|
11
11
|
assert warden.authenticated?(:user)
|
12
12
|
end
|
13
13
|
|
14
14
|
test 'sign in with email of different case should fail when email is NOT the list of case insensitive keys' do
|
15
|
-
swap Devise, :
|
16
|
-
create_user(:
|
15
|
+
swap Devise, case_insensitive_keys: [] do
|
16
|
+
create_user(email: 'Foo@Bar.com')
|
17
17
|
|
18
18
|
sign_in_as_user do
|
19
|
-
fill_in 'email', :
|
19
|
+
fill_in 'email', with: 'foo@bar.com'
|
20
20
|
end
|
21
21
|
|
22
22
|
assert_not warden.authenticated?(:user)
|
@@ -24,21 +24,21 @@ class DatabaseAuthenticationTest < ActionDispatch::IntegrationTest
|
|
24
24
|
end
|
25
25
|
|
26
26
|
test 'sign in with email including extra spaces should succeed when email is in the list of strip whitespace keys' do
|
27
|
-
create_user(:
|
27
|
+
create_user(email: ' foo@bar.com ')
|
28
28
|
|
29
29
|
sign_in_as_user do
|
30
|
-
fill_in 'email', :
|
30
|
+
fill_in 'email', with: 'foo@bar.com'
|
31
31
|
end
|
32
32
|
|
33
33
|
assert warden.authenticated?(:user)
|
34
34
|
end
|
35
35
|
|
36
36
|
test 'sign in with email including extra spaces should fail when email is NOT the list of strip whitespace keys' do
|
37
|
-
swap Devise, :
|
38
|
-
create_user(:
|
37
|
+
swap Devise, strip_whitespace_keys: [] do
|
38
|
+
create_user(email: 'foo@bar.com')
|
39
39
|
|
40
40
|
sign_in_as_user do
|
41
|
-
fill_in 'email', :
|
41
|
+
fill_in 'email', with: ' foo@bar.com '
|
42
42
|
end
|
43
43
|
|
44
44
|
assert_not warden.authenticated?(:user)
|
@@ -46,16 +46,16 @@ class DatabaseAuthenticationTest < ActionDispatch::IntegrationTest
|
|
46
46
|
end
|
47
47
|
|
48
48
|
test 'sign in should not authenticate if not using proper authentication keys' do
|
49
|
-
swap Devise, :
|
49
|
+
swap Devise, authentication_keys: [:username] do
|
50
50
|
sign_in_as_user
|
51
51
|
assert_not warden.authenticated?(:user)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
55
|
test 'sign in with invalid email should return to sign in form with error message' do
|
56
|
-
store_translations :en, :
|
56
|
+
store_translations :en, devise: { failure: { admin: { not_found_in_database: 'Invalid email address' } } } do
|
57
57
|
sign_in_as_admin do
|
58
|
-
fill_in 'email', :
|
58
|
+
fill_in 'email', with: 'wrongemail@test.com'
|
59
59
|
end
|
60
60
|
|
61
61
|
assert_contain 'Invalid email address'
|
@@ -65,7 +65,7 @@ class DatabaseAuthenticationTest < ActionDispatch::IntegrationTest
|
|
65
65
|
|
66
66
|
test 'sign in with invalid pasword should return to sign in form with error message' do
|
67
67
|
sign_in_as_admin do
|
68
|
-
fill_in 'password', :
|
68
|
+
fill_in 'password', with: 'abcdef'
|
69
69
|
end
|
70
70
|
|
71
71
|
assert_contain 'Invalid email or password'
|
@@ -73,9 +73,9 @@ class DatabaseAuthenticationTest < ActionDispatch::IntegrationTest
|
|
73
73
|
end
|
74
74
|
|
75
75
|
test 'error message is configurable by resource name' do
|
76
|
-
store_translations :en, :
|
76
|
+
store_translations :en, devise: { failure: { admin: { invalid: "Invalid credentials" } } } do
|
77
77
|
sign_in_as_admin do
|
78
|
-
fill_in 'password', :
|
78
|
+
fill_in 'password', with: 'abcdef'
|
79
79
|
end
|
80
80
|
|
81
81
|
assert_contain 'Invalid credentials'
|
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class HttpAuthenticationTest < ActionDispatch::IntegrationTest
|
4
4
|
test 'handles unverified requests gets rid of caches but continues signed in' do
|
5
|
-
swap ApplicationController, :
|
5
|
+
swap ApplicationController, allow_forgery_protection: true do
|
6
6
|
create_user
|
7
7
|
post exhibit_user_url(1), {}, "HTTP_AUTHORIZATION" => "Basic #{Base64.encode64("user@test.com:12345678")}"
|
8
8
|
assert warden.authenticated?(:user)
|
@@ -16,18 +16,18 @@ class HttpAuthenticationTest < ActionDispatch::IntegrationTest
|
|
16
16
|
assert_match '<email>user@test.com</email>', response.body
|
17
17
|
assert warden.authenticated?(:user)
|
18
18
|
|
19
|
-
get users_path(:
|
19
|
+
get users_path(format: :xml)
|
20
20
|
assert_response 200
|
21
21
|
end
|
22
22
|
|
23
23
|
test 'sign in should authenticate with http but not emit a cookie if skipping session storage' do
|
24
|
-
swap Devise, :
|
24
|
+
swap Devise, skip_session_storage: [:http_auth] do
|
25
25
|
sign_in_as_new_user_with_http
|
26
26
|
assert_response 200
|
27
27
|
assert_match '<email>user@test.com</email>', response.body
|
28
28
|
assert warden.authenticated?(:user)
|
29
29
|
|
30
|
-
get users_path(:
|
30
|
+
get users_path(format: :xml)
|
31
31
|
assert_response 401
|
32
32
|
end
|
33
33
|
end
|
@@ -42,11 +42,11 @@ class HttpAuthenticationTest < ActionDispatch::IntegrationTest
|
|
42
42
|
sign_in_as_new_user_with_http("unknown")
|
43
43
|
assert_equal 401, status
|
44
44
|
assert_equal "application/xml; charset=utf-8", headers["Content-Type"]
|
45
|
-
assert_match "<error>Invalid email or password.</error>", response.body
|
45
|
+
assert_match "<error>Invalid email address or password.</error>", response.body
|
46
46
|
end
|
47
47
|
|
48
48
|
test 'returns a custom response with www-authenticate and chosen realm' do
|
49
|
-
swap Devise, :
|
49
|
+
swap Devise, http_authentication_realm: "MyApp" do
|
50
50
|
sign_in_as_new_user_with_http("unknown")
|
51
51
|
assert_equal 401, status
|
52
52
|
assert_equal 'Basic realm="MyApp"', headers["WWW-Authenticate"]
|
@@ -54,7 +54,7 @@ class HttpAuthenticationTest < ActionDispatch::IntegrationTest
|
|
54
54
|
end
|
55
55
|
|
56
56
|
test 'sign in should authenticate with http even with specific authentication keys' do
|
57
|
-
swap Devise, :
|
57
|
+
swap Devise, authentication_keys: [:username] do
|
58
58
|
sign_in_as_new_user_with_http("usertest")
|
59
59
|
assert_response :success
|
60
60
|
assert_match '<email>user@test.com</email>', response.body
|
@@ -63,7 +63,7 @@ class HttpAuthenticationTest < ActionDispatch::IntegrationTest
|
|
63
63
|
end
|
64
64
|
|
65
65
|
test 'it uses appropriate authentication_keys when configured with hash' do
|
66
|
-
swap Devise, :
|
66
|
+
swap Devise, authentication_keys: ActiveSupport::OrderedHash[:username, false, :email, false] do
|
67
67
|
sign_in_as_new_user_with_http("usertest")
|
68
68
|
assert_response :success
|
69
69
|
assert_match '<email>user@test.com</email>', response.body
|
@@ -72,7 +72,7 @@ class HttpAuthenticationTest < ActionDispatch::IntegrationTest
|
|
72
72
|
end
|
73
73
|
|
74
74
|
test 'it uses the appropriate key when configured explicitly' do
|
75
|
-
swap Devise, :
|
75
|
+
swap Devise, authentication_keys: ActiveSupport::OrderedHash[:email, false, :username, false], http_authentication_key: :username do
|
76
76
|
sign_in_as_new_user_with_http("usertest")
|
77
77
|
assert_response :success
|
78
78
|
assert_match '<email>user@test.com</email>', response.body
|
@@ -81,7 +81,7 @@ class HttpAuthenticationTest < ActionDispatch::IntegrationTest
|
|
81
81
|
end
|
82
82
|
|
83
83
|
test 'test request with oauth2 header doesnt get mistaken for basic authentication' do
|
84
|
-
swap Devise, :
|
84
|
+
swap Devise, http_authenticatable: true do
|
85
85
|
add_oauth2_header
|
86
86
|
assert_equal 401, status
|
87
87
|
assert_equal 'Basic realm="Application"', headers["WWW-Authenticate"]
|
@@ -92,14 +92,14 @@ class HttpAuthenticationTest < ActionDispatch::IntegrationTest
|
|
92
92
|
|
93
93
|
def sign_in_as_new_user_with_http(username="user@test.com", password="12345678")
|
94
94
|
user = create_user
|
95
|
-
get users_path(:
|
95
|
+
get users_path(format: :xml), {}, "HTTP_AUTHORIZATION" => "Basic #{Base64.encode64("#{username}:#{password}")}"
|
96
96
|
user
|
97
97
|
end
|
98
98
|
|
99
99
|
# Sign in with oauth2 token. This is just to test that it isn't misinterpreted as basic authentication
|
100
100
|
def add_oauth2_header
|
101
101
|
user = create_user
|
102
|
-
get users_path(:
|
102
|
+
get users_path(format: :xml), {}, "HTTP_AUTHORIZATION" => "OAuth #{Base64.encode64("#{user.email}:12345678")}"
|
103
103
|
end
|
104
104
|
|
105
105
|
end
|