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/test/routes_test.rb
CHANGED
@@ -4,107 +4,107 @@ ExpectedRoutingError = Devise.rails4? ? MiniTest::Assertion : ActionController::
|
|
4
4
|
|
5
5
|
class DefaultRoutingTest < ActionController::TestCase
|
6
6
|
test 'map new user session' do
|
7
|
-
assert_recognizes({:
|
7
|
+
assert_recognizes({controller: 'devise/sessions', action: 'new'}, {path: 'users/sign_in', method: :get})
|
8
8
|
assert_named_route "/users/sign_in", :new_user_session_path
|
9
9
|
end
|
10
10
|
|
11
11
|
test 'map create user session' do
|
12
|
-
assert_recognizes({:
|
12
|
+
assert_recognizes({controller: 'devise/sessions', action: 'create'}, {path: 'users/sign_in', method: :post})
|
13
13
|
assert_named_route "/users/sign_in", :user_session_path
|
14
14
|
end
|
15
15
|
|
16
16
|
test 'map destroy user session' do
|
17
|
-
assert_recognizes({:
|
17
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: 'users/sign_out', method: :get})
|
18
18
|
assert_named_route "/users/sign_out", :destroy_user_session_path
|
19
19
|
end
|
20
20
|
|
21
21
|
test 'map new user confirmation' do
|
22
|
-
assert_recognizes({:
|
22
|
+
assert_recognizes({controller: 'devise/confirmations', action: 'new'}, 'users/confirmation/new')
|
23
23
|
assert_named_route "/users/confirmation/new", :new_user_confirmation_path
|
24
24
|
end
|
25
25
|
|
26
26
|
test 'map create user confirmation' do
|
27
|
-
assert_recognizes({:
|
27
|
+
assert_recognizes({controller: 'devise/confirmations', action: 'create'}, {path: 'users/confirmation', method: :post})
|
28
28
|
assert_named_route "/users/confirmation", :user_confirmation_path
|
29
29
|
end
|
30
30
|
|
31
31
|
test 'map show user confirmation' do
|
32
|
-
assert_recognizes({:
|
32
|
+
assert_recognizes({controller: 'devise/confirmations', action: 'show'}, {path: 'users/confirmation', method: :get})
|
33
33
|
end
|
34
34
|
|
35
35
|
test 'map new user password' do
|
36
|
-
assert_recognizes({:
|
36
|
+
assert_recognizes({controller: 'devise/passwords', action: 'new'}, 'users/password/new')
|
37
37
|
assert_named_route "/users/password/new", :new_user_password_path
|
38
38
|
end
|
39
39
|
|
40
40
|
test 'map create user password' do
|
41
|
-
assert_recognizes({:
|
41
|
+
assert_recognizes({controller: 'devise/passwords', action: 'create'}, {path: 'users/password', method: :post})
|
42
42
|
assert_named_route "/users/password", :user_password_path
|
43
43
|
end
|
44
44
|
|
45
45
|
test 'map edit user password' do
|
46
|
-
assert_recognizes({:
|
46
|
+
assert_recognizes({controller: 'devise/passwords', action: 'edit'}, 'users/password/edit')
|
47
47
|
assert_named_route "/users/password/edit", :edit_user_password_path
|
48
48
|
end
|
49
49
|
|
50
50
|
test 'map update user password' do
|
51
|
-
assert_recognizes({:
|
51
|
+
assert_recognizes({controller: 'devise/passwords', action: 'update'}, {path: 'users/password', method: :put})
|
52
52
|
end
|
53
53
|
|
54
54
|
test 'map new user unlock' do
|
55
|
-
assert_recognizes({:
|
55
|
+
assert_recognizes({controller: 'devise/unlocks', action: 'new'}, 'users/unlock/new')
|
56
56
|
assert_named_route "/users/unlock/new", :new_user_unlock_path
|
57
57
|
end
|
58
58
|
|
59
59
|
test 'map create user unlock' do
|
60
|
-
assert_recognizes({:
|
60
|
+
assert_recognizes({controller: 'devise/unlocks', action: 'create'}, {path: 'users/unlock', method: :post})
|
61
61
|
assert_named_route "/users/unlock", :user_unlock_path
|
62
62
|
end
|
63
63
|
|
64
64
|
test 'map show user unlock' do
|
65
|
-
assert_recognizes({:
|
65
|
+
assert_recognizes({controller: 'devise/unlocks', action: 'show'}, {path: 'users/unlock', method: :get})
|
66
66
|
end
|
67
67
|
|
68
68
|
test 'map new user registration' do
|
69
|
-
assert_recognizes({:
|
69
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, 'users/sign_up')
|
70
70
|
assert_named_route "/users/sign_up", :new_user_registration_path
|
71
71
|
end
|
72
72
|
|
73
73
|
test 'map create user registration' do
|
74
|
-
assert_recognizes({:
|
74
|
+
assert_recognizes({controller: 'devise/registrations', action: 'create'}, {path: 'users', method: :post})
|
75
75
|
assert_named_route "/users", :user_registration_path
|
76
76
|
end
|
77
77
|
|
78
78
|
test 'map edit user registration' do
|
79
|
-
assert_recognizes({:
|
79
|
+
assert_recognizes({controller: 'devise/registrations', action: 'edit'}, {path: 'users/edit', method: :get})
|
80
80
|
assert_named_route "/users/edit", :edit_user_registration_path
|
81
81
|
end
|
82
82
|
|
83
83
|
test 'map update user registration' do
|
84
|
-
assert_recognizes({:
|
84
|
+
assert_recognizes({controller: 'devise/registrations', action: 'update'}, {path: 'users', method: :put})
|
85
85
|
end
|
86
86
|
|
87
87
|
test 'map destroy user registration' do
|
88
|
-
assert_recognizes({:
|
88
|
+
assert_recognizes({controller: 'devise/registrations', action: 'destroy'}, {path: 'users', method: :delete})
|
89
89
|
end
|
90
90
|
|
91
91
|
test 'map cancel user registration' do
|
92
|
-
assert_recognizes({:
|
92
|
+
assert_recognizes({controller: 'devise/registrations', action: 'cancel'}, {path: 'users/cancel', method: :get})
|
93
93
|
assert_named_route "/users/cancel", :cancel_user_registration_path
|
94
94
|
end
|
95
95
|
|
96
96
|
test 'map omniauth callbacks' do
|
97
|
-
assert_recognizes({:
|
98
|
-
assert_recognizes({:
|
97
|
+
assert_recognizes({controller: 'users/omniauth_callbacks', action: 'facebook'}, {path: 'users/auth/facebook/callback', method: :get})
|
98
|
+
assert_recognizes({controller: 'users/omniauth_callbacks', action: 'facebook'}, {path: 'users/auth/facebook/callback', method: :post})
|
99
99
|
assert_named_route "/users/auth/facebook/callback", :user_omniauth_callback_path, :facebook
|
100
100
|
|
101
101
|
# named open_id
|
102
|
-
assert_recognizes({:
|
103
|
-
assert_recognizes({:
|
102
|
+
assert_recognizes({controller: 'users/omniauth_callbacks', action: 'google'}, {path: 'users/auth/google/callback', method: :get})
|
103
|
+
assert_recognizes({controller: 'users/omniauth_callbacks', action: 'google'}, {path: 'users/auth/google/callback', method: :post})
|
104
104
|
assert_named_route "/users/auth/google/callback", :user_omniauth_callback_path, :google
|
105
105
|
|
106
106
|
assert_raise ExpectedRoutingError do
|
107
|
-
assert_recognizes({:
|
107
|
+
assert_recognizes({controller: 'ysers/omniauth_callbacks', action: 'twitter'}, {path: 'users/auth/twitter/callback', method: :get})
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
@@ -117,134 +117,148 @@ end
|
|
117
117
|
|
118
118
|
class CustomizedRoutingTest < ActionController::TestCase
|
119
119
|
test 'map admin with :path option' do
|
120
|
-
assert_recognizes({:
|
120
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: 'admin_area/sign_up', method: :get})
|
121
121
|
end
|
122
122
|
|
123
123
|
test 'map admin with :controllers option' do
|
124
|
-
assert_recognizes({:
|
124
|
+
assert_recognizes({controller: 'admins/sessions', action: 'new'}, {path: 'admin_area/sign_in', method: :get})
|
125
125
|
end
|
126
126
|
|
127
127
|
test 'does not map admin password' do
|
128
128
|
assert_raise ExpectedRoutingError do
|
129
|
-
assert_recognizes({:
|
129
|
+
assert_recognizes({controller: 'devise/passwords', action: 'new'}, 'admin_area/password/new')
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
133
133
|
test 'subdomain admin' do
|
134
|
-
assert_recognizes({"host"=>"sub.example.com", :
|
134
|
+
assert_recognizes({"host"=>"sub.example.com", controller: 'devise/sessions', action: 'new'}, {host: "sub.example.com", path: '/sub_admin/sign_in', method: :get})
|
135
135
|
end
|
136
136
|
|
137
137
|
test 'does only map reader password' do
|
138
138
|
assert_raise ExpectedRoutingError do
|
139
|
-
assert_recognizes({:
|
139
|
+
assert_recognizes({controller: 'devise/sessions', action: 'new'}, 'reader/sessions/new')
|
140
140
|
end
|
141
|
-
assert_recognizes({:
|
141
|
+
assert_recognizes({controller: 'devise/passwords', action: 'new'}, 'reader/password/new')
|
142
142
|
end
|
143
143
|
|
144
144
|
test 'map account with custom path name for session sign in' do
|
145
|
-
assert_recognizes({:
|
145
|
+
assert_recognizes({controller: 'devise/sessions', action: 'new', locale: 'en'}, '/en/accounts/login')
|
146
146
|
end
|
147
147
|
|
148
148
|
test 'map account with custom path name for session sign out' do
|
149
|
-
assert_recognizes({:
|
149
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy', locale: 'en'}, '/en/accounts/logout')
|
150
150
|
end
|
151
151
|
|
152
152
|
test 'map account with custom path name for password' do
|
153
|
-
assert_recognizes({:
|
153
|
+
assert_recognizes({controller: 'devise/passwords', action: 'new', locale: 'en'}, '/en/accounts/secret/new')
|
154
154
|
end
|
155
155
|
|
156
156
|
test 'map account with custom path name for registration' do
|
157
|
-
assert_recognizes({:
|
157
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new', locale: 'en'}, '/en/accounts/management/register')
|
158
|
+
end
|
159
|
+
|
160
|
+
test 'map account with custom path name for edit registration' do
|
161
|
+
assert_recognizes({controller: 'devise/registrations', action: 'edit', locale: 'en'}, '/en/accounts/management/edit/profile')
|
158
162
|
end
|
159
163
|
|
160
164
|
test 'map account with custom path name for cancel registration' do
|
161
|
-
assert_recognizes({:
|
165
|
+
assert_recognizes({controller: 'devise/registrations', action: 'cancel', locale: 'en'}, '/en/accounts/management/giveup')
|
162
166
|
end
|
163
167
|
|
164
168
|
test 'map deletes with :sign_out_via option' do
|
165
|
-
assert_recognizes({:
|
169
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/deletes/sign_out', method: :delete})
|
166
170
|
assert_raise ExpectedRoutingError do
|
167
|
-
assert_recognizes({:
|
171
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/deletes/sign_out', method: :get})
|
168
172
|
end
|
169
173
|
end
|
170
174
|
|
171
175
|
test 'map posts with :sign_out_via option' do
|
172
|
-
assert_recognizes({:
|
176
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/posts/sign_out', method: :post})
|
173
177
|
assert_raise ExpectedRoutingError do
|
174
|
-
assert_recognizes({:
|
178
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/posts/sign_out', method: :get})
|
175
179
|
end
|
176
180
|
end
|
177
181
|
|
178
182
|
test 'map delete_or_posts with :sign_out_via option' do
|
179
|
-
assert_recognizes({:
|
180
|
-
assert_recognizes({:
|
183
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/delete_or_posts/sign_out', method: :post})
|
184
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/delete_or_posts/sign_out', method: :delete})
|
181
185
|
assert_raise ExpectedRoutingError do
|
182
|
-
assert_recognizes({:
|
186
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/delete_or_posts/sign_out', method: :get})
|
183
187
|
end
|
184
188
|
end
|
185
189
|
|
186
190
|
test 'map with constraints defined in hash' do
|
187
|
-
assert_recognizes({:
|
191
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: 'http://192.168.1.100/headquarters/sign_up', method: :get})
|
188
192
|
assert_raise ExpectedRoutingError do
|
189
|
-
assert_recognizes({:
|
193
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: 'http://10.0.0.100/headquarters/sign_up', method: :get})
|
190
194
|
end
|
191
195
|
end
|
192
196
|
|
193
197
|
test 'map with constraints defined in block' do
|
194
|
-
assert_recognizes({:
|
198
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: 'http://192.168.1.100/homebase/sign_up', method: :get})
|
195
199
|
assert_raise ExpectedRoutingError do
|
196
|
-
assert_recognizes({:
|
200
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: 'http://10.0.0.100//homebase/sign_up', method: :get})
|
197
201
|
end
|
198
202
|
end
|
199
203
|
|
200
204
|
test 'map with format false for sessions' do
|
201
|
-
assert_recognizes({:
|
205
|
+
assert_recognizes({controller: 'devise/sessions', action: 'new'}, {path: '/htmlonly_admin/sign_in', method: :get})
|
202
206
|
assert_raise ExpectedRoutingError do
|
203
|
-
assert_recognizes({:
|
207
|
+
assert_recognizes({controller: 'devise/sessions', action: 'new'}, {path: '/htmlonly_admin/sign_in.xml', method: :get})
|
204
208
|
end
|
205
209
|
end
|
206
210
|
|
207
211
|
test 'map with format false for passwords' do
|
208
|
-
assert_recognizes({:
|
212
|
+
assert_recognizes({controller: 'devise/passwords', action: 'create'}, {path: '/htmlonly_admin/password', method: :post})
|
209
213
|
assert_raise ExpectedRoutingError do
|
210
|
-
assert_recognizes({:
|
214
|
+
assert_recognizes({controller: 'devise/passwords', action: 'create'}, {path: '/htmlonly_admin/password.xml', method: :post})
|
211
215
|
end
|
212
216
|
end
|
213
217
|
|
214
218
|
test 'map with format false for registrations' do
|
215
|
-
assert_recognizes({:
|
219
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: '/htmlonly_admin/sign_up', method: :get})
|
216
220
|
assert_raise ExpectedRoutingError do
|
217
|
-
assert_recognizes({:
|
221
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: '/htmlonly_admin/sign_up.xml', method: :get})
|
218
222
|
end
|
219
223
|
end
|
220
224
|
|
221
225
|
test 'map with format false for confirmations' do
|
222
|
-
assert_recognizes({:
|
226
|
+
assert_recognizes({controller: 'devise/confirmations', action: 'show'}, {path: '/htmlonly_users/confirmation', method: :get})
|
223
227
|
assert_raise ExpectedRoutingError do
|
224
|
-
assert_recognizes({:
|
228
|
+
assert_recognizes({controller: 'devise/confirmations', action: 'show'}, {path: '/htmlonly_users/confirmation.xml', method: :get})
|
225
229
|
end
|
226
230
|
end
|
227
231
|
|
228
232
|
test 'map with format false for unlocks' do
|
229
|
-
assert_recognizes({:
|
233
|
+
assert_recognizes({controller: 'devise/unlocks', action: 'show'}, {path: '/htmlonly_users/unlock', method: :get})
|
230
234
|
assert_raise ExpectedRoutingError do
|
231
|
-
assert_recognizes({:
|
235
|
+
assert_recognizes({controller: 'devise/unlocks', action: 'show'}, {path: '/htmlonly_users/unlock.xml', method: :get})
|
232
236
|
end
|
233
237
|
end
|
234
238
|
|
235
239
|
test 'map with format false is not permanent' do
|
236
240
|
assert_equal "/set.xml", @routes.url_helpers.set_path(:xml)
|
237
241
|
end
|
242
|
+
|
243
|
+
test 'checks if mapping has proper configuration for omniauth callback' do
|
244
|
+
e = assert_raise ArgumentError do
|
245
|
+
routes = ActionDispatch::Routing::RouteSet.new
|
246
|
+
routes.draw do
|
247
|
+
devise_for :not_omniauthable, class_name: 'Admin', controllers: {omniauth_callbacks: "users/omniauth_callbacks"}
|
248
|
+
end
|
249
|
+
end
|
250
|
+
assert_match "Mapping omniauth_callbacks on a resource that is not omniauthable", e.message
|
251
|
+
end
|
238
252
|
end
|
239
253
|
|
240
254
|
class ScopedRoutingTest < ActionController::TestCase
|
241
255
|
test 'map publisher account' do
|
242
|
-
assert_recognizes({:
|
256
|
+
assert_recognizes({controller: 'publisher/registrations', action: 'new'}, {path: '/publisher/accounts/sign_up', method: :get})
|
243
257
|
assert_equal '/publisher/accounts/sign_up', @routes.url_helpers.new_publisher_account_registration_path
|
244
258
|
end
|
245
259
|
|
246
260
|
test 'map publisher account merges path names' do
|
247
|
-
assert_recognizes({:
|
261
|
+
assert_recognizes({controller: 'publisher/sessions', action: 'new'}, {path: '/publisher/accounts/get_in', method: :get})
|
248
262
|
assert_equal '/publisher/accounts/get_in', @routes.url_helpers.new_publisher_account_session_path
|
249
263
|
end
|
250
264
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Since webrat uses ActionController::RecordIdentifier class that was moved to
|
2
|
+
# ActionView namespace in Rails 4.1+
|
3
|
+
|
4
|
+
unless defined?(ActionController::RecordIdentifier)
|
5
|
+
require 'action_view/record_identifier'
|
6
|
+
|
7
|
+
module ActionController
|
8
|
+
RecordIdentifier = ActionView::RecordIdentifier
|
9
|
+
end
|
10
|
+
end
|
data/test/support/assertions.rb
CHANGED
@@ -9,10 +9,9 @@ class ActiveSupport::TestCase
|
|
9
9
|
assert assertion.blank?
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
assert
|
12
|
+
def assert_present(assertion)
|
13
|
+
assert assertion.present?
|
14
14
|
end
|
15
|
-
alias :assert_present :assert_not_blank
|
16
15
|
|
17
16
|
def assert_email_sent(address = nil, &block)
|
18
17
|
assert_difference('ActionMailer::Base.deliveries.size', &block)
|
data/test/support/helpers.rb
CHANGED
@@ -23,10 +23,10 @@ class ActiveSupport::TestCase
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def valid_attributes(attributes={})
|
26
|
-
{ :
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
26
|
+
{ username: "usertest",
|
27
|
+
email: generate_unique_email,
|
28
|
+
password: '12345678',
|
29
|
+
password_confirmation: '12345678' }.update(attributes)
|
30
30
|
end
|
31
31
|
|
32
32
|
def new_user(attributes={})
|
data/test/support/integration.rb
CHANGED
@@ -8,11 +8,11 @@ class ActionDispatch::IntegrationTest
|
|
8
8
|
def create_user(options={})
|
9
9
|
@user ||= begin
|
10
10
|
user = User.create!(
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
11
|
+
username: 'usertest',
|
12
|
+
email: options[:email] || 'user@test.com',
|
13
|
+
password: options[:password] || '12345678',
|
14
|
+
password_confirmation: options[:password] || '12345678',
|
15
|
+
created_at: Time.now.utc
|
16
16
|
)
|
17
17
|
user.update_attribute(:confirmation_sent_at, options[:confirmation_sent_at]) if options[:confirmation_sent_at]
|
18
18
|
user.confirm! unless options[:confirm] == false
|
@@ -24,9 +24,9 @@ class ActionDispatch::IntegrationTest
|
|
24
24
|
def create_admin(options={})
|
25
25
|
@admin ||= begin
|
26
26
|
admin = Admin.create!(
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
27
|
+
email: options[:email] || 'admin@test.com',
|
28
|
+
password: '123456', password_confirmation: '123456',
|
29
|
+
active: options[:active]
|
30
30
|
)
|
31
31
|
admin.confirm! unless options[:confirm] == false
|
32
32
|
admin
|
@@ -36,21 +36,21 @@ class ActionDispatch::IntegrationTest
|
|
36
36
|
def sign_in_as_user(options={}, &block)
|
37
37
|
user = create_user(options)
|
38
38
|
visit_with_option options[:visit], new_user_session_path
|
39
|
-
fill_in 'email', :
|
40
|
-
fill_in 'password', :
|
39
|
+
fill_in 'email', with: options[:email] || 'user@test.com'
|
40
|
+
fill_in 'password', with: options[:password] || '12345678'
|
41
41
|
check 'remember me' if options[:remember_me] == true
|
42
42
|
yield if block_given?
|
43
|
-
click_button '
|
43
|
+
click_button 'Log In'
|
44
44
|
user
|
45
45
|
end
|
46
46
|
|
47
47
|
def sign_in_as_admin(options={}, &block)
|
48
48
|
admin = create_admin(options)
|
49
49
|
visit_with_option options[:visit], new_admin_session_path
|
50
|
-
fill_in 'email', :
|
51
|
-
fill_in 'password', :
|
50
|
+
fill_in 'email', with: 'admin@test.com'
|
51
|
+
fill_in 'password', with: '123456'
|
52
52
|
yield if block_given?
|
53
|
-
click_button '
|
53
|
+
click_button 'Log In'
|
54
54
|
admin
|
55
55
|
end
|
56
56
|
|
data/test/test_helper.rb
CHANGED
@@ -4,13 +4,6 @@ DEVISE_ORM = (ENV["DEVISE_ORM"] || :active_record).to_sym
|
|
4
4
|
$:.unshift File.dirname(__FILE__)
|
5
5
|
puts "\n==> Devise.orm = #{DEVISE_ORM.inspect}"
|
6
6
|
|
7
|
-
module Devise
|
8
|
-
# Detection for minor differences between Rails 3.2 and 4 in tests.
|
9
|
-
def self.rails4?
|
10
|
-
Rails.version.start_with? '4'
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
7
|
require "rails_app/config/environment"
|
15
8
|
require "rails/test_help"
|
16
9
|
require "orm/#{DEVISE_ORM}"
|
@@ -24,6 +17,8 @@ Webrat.configure do |config|
|
|
24
17
|
config.open_error_files = false
|
25
18
|
end
|
26
19
|
|
20
|
+
OmniAuth.config.logger = Logger.new('/dev/null')
|
21
|
+
|
27
22
|
# Add support to load paths so we can overwrite broken webrat setup
|
28
23
|
$:.unshift File.expand_path('../support', __FILE__)
|
29
24
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
data/test/test_helpers_test.rb
CHANGED
@@ -4,12 +4,6 @@ class TestHelpersTest < ActionController::TestCase
|
|
4
4
|
tests UsersController
|
5
5
|
include Devise::TestHelpers
|
6
6
|
|
7
|
-
class CustomFailureApp < Devise::FailureApp
|
8
|
-
def redirect
|
9
|
-
self.status = 306
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
7
|
test "redirects if attempting to access a page unauthenticated" do
|
14
8
|
get :index
|
15
9
|
assert_redirected_to new_user_session_path
|
@@ -17,7 +11,7 @@ class TestHelpersTest < ActionController::TestCase
|
|
17
11
|
end
|
18
12
|
|
19
13
|
test "redirects if attempting to access a page with an unconfirmed account" do
|
20
|
-
swap Devise, :
|
14
|
+
swap Devise, allow_unconfirmed_access_for: 0.days do
|
21
15
|
user = create_user
|
22
16
|
assert !user.active_for_authentication?
|
23
17
|
|
@@ -28,12 +22,12 @@ class TestHelpersTest < ActionController::TestCase
|
|
28
22
|
end
|
29
23
|
|
30
24
|
test "returns nil if accessing current_user with an unconfirmed account" do
|
31
|
-
swap Devise, :
|
25
|
+
swap Devise, allow_unconfirmed_access_for: 0.days do
|
32
26
|
user = create_user
|
33
27
|
assert !user.active_for_authentication?
|
34
28
|
|
35
29
|
sign_in user
|
36
|
-
get :accept, :
|
30
|
+
get :accept, id: user
|
37
31
|
assert_nil assigns(:current_user)
|
38
32
|
end
|
39
33
|
end
|
@@ -72,12 +66,30 @@ class TestHelpersTest < ActionController::TestCase
|
|
72
66
|
end
|
73
67
|
|
74
68
|
test "respects custom failure app" do
|
75
|
-
|
76
|
-
|
69
|
+
custom_failure_app = Class.new(Devise::FailureApp) do
|
70
|
+
def redirect
|
71
|
+
self.status = 306
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
swap Devise.warden_config, failure_app: custom_failure_app do
|
77
76
|
get :index
|
78
77
|
assert_response 306
|
79
|
-
|
80
|
-
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
test "passes given headers from the failure app to the response" do
|
82
|
+
custom_failure_app = Class.new(Devise::FailureApp) do
|
83
|
+
def respond
|
84
|
+
self.status = 401
|
85
|
+
self.response.headers["CUSTOMHEADER"] = 1
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
swap Devise.warden_config, failure_app: custom_failure_app do
|
90
|
+
sign_in create_user
|
91
|
+
get :index
|
92
|
+
assert_equal 1, @response.headers["CUSTOMHEADER"]
|
81
93
|
end
|
82
94
|
end
|
83
95
|
|
@@ -148,26 +160,4 @@ class TestHelpersTest < ActionController::TestCase
|
|
148
160
|
get :index
|
149
161
|
assert_match /User ##{second_user.id}/, @response.body
|
150
162
|
end
|
151
|
-
|
152
|
-
|
153
|
-
test "passes given headers from the failure app to the response" do
|
154
|
-
|
155
|
-
begin
|
156
|
-
old_failure_app = Devise.warden_config[:failure_app]
|
157
|
-
class CustomTestFailureApp < Devise::FailureApp
|
158
|
-
def respond
|
159
|
-
self.status = 401
|
160
|
-
self.response.headers["CUSTOMHEADER"] = 1
|
161
|
-
end
|
162
|
-
end
|
163
|
-
Devise.warden_config[:failure_app] = CustomTestFailureApp
|
164
|
-
user = create_user
|
165
|
-
sign_in user
|
166
|
-
get :index
|
167
|
-
assert_equal 1, @response.headers["CUSTOMHEADER"]
|
168
|
-
ensure
|
169
|
-
Devise.warden_config[:failure_app] = old_failure_app
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
163
|
end
|
data/test/test_models.rb
CHANGED
@@ -1,20 +1,27 @@
|
|
1
1
|
class Configurable < User
|
2
2
|
devise :database_authenticatable, :confirmable, :rememberable, :timeoutable, :lockable,
|
3
|
-
:
|
4
|
-
:
|
3
|
+
stretches: 15, pepper: 'abcdef', allow_unconfirmed_access_for: 5.days,
|
4
|
+
remember_for: 7.days, timeout_in: 15.minutes, unlock_in: 10.days
|
5
5
|
end
|
6
6
|
|
7
7
|
class WithValidation < Admin
|
8
|
-
devise :database_authenticatable, :validatable, :
|
8
|
+
devise :database_authenticatable, :validatable, password_length: 2..6
|
9
9
|
end
|
10
10
|
|
11
11
|
class UserWithValidation < User
|
12
12
|
validates_presence_of :username
|
13
13
|
end
|
14
14
|
|
15
|
+
class UserWithCustomEncryption < User
|
16
|
+
protected
|
17
|
+
def password_digest(password)
|
18
|
+
password.reverse
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
15
22
|
class UserWithVirtualAttributes < User
|
16
|
-
devise :
|
17
|
-
validates :email, :
|
23
|
+
devise case_insensitive_keys: [ :email, :email_confirmation ]
|
24
|
+
validates :email, presence: true, confirmation: {on: :create}
|
18
25
|
end
|
19
26
|
|
20
27
|
class Several < Admin
|