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.

Files changed (187) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +18 -3
  3. data/CHANGELOG.md +82 -9
  4. data/CONTRIBUTING.md +2 -2
  5. data/Gemfile +7 -9
  6. data/Gemfile.lock +102 -96
  7. data/MIT-LICENSE +1 -1
  8. data/README.md +94 -42
  9. data/Rakefile +1 -1
  10. data/app/controllers/devise/confirmations_controller.rb +5 -3
  11. data/app/controllers/devise/omniauth_callbacks_controller.rb +2 -2
  12. data/app/controllers/devise/passwords_controller.rb +5 -3
  13. data/app/controllers/devise/registrations_controller.rb +26 -10
  14. data/app/controllers/devise/sessions_controller.rb +39 -14
  15. data/app/controllers/devise/unlocks_controller.rb +4 -2
  16. data/app/controllers/devise_controller.rb +6 -6
  17. data/app/helpers/devise_helper.rb +2 -2
  18. data/app/views/devise/confirmations/new.html.erb +2 -2
  19. data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
  20. data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
  21. data/app/views/devise/mailer/unlock_instructions.html.erb +1 -1
  22. data/app/views/devise/passwords/edit.html.erb +3 -3
  23. data/app/views/devise/passwords/new.html.erb +2 -2
  24. data/app/views/devise/registrations/edit.html.erb +6 -6
  25. data/app/views/devise/registrations/new.html.erb +5 -5
  26. data/app/views/devise/sessions/new.html.erb +5 -5
  27. data/app/views/devise/shared/_links.erb +1 -1
  28. data/app/views/devise/unlocks/new.html.erb +2 -2
  29. data/config/locales/en.yml +17 -16
  30. data/devise.gemspec +2 -2
  31. data/gemfiles/{Gemfile.rails-3.2.x → Gemfile.rails-3.2-stable} +8 -10
  32. data/gemfiles/Gemfile.rails-3.2-stable.lock +166 -0
  33. data/gemfiles/Gemfile.rails-4.0-stable +29 -0
  34. data/gemfiles/Gemfile.rails-4.0-stable.lock +162 -0
  35. data/gemfiles/Gemfile.rails-head +32 -0
  36. data/gemfiles/Gemfile.rails-head.lock +190 -0
  37. data/lib/devise/controllers/helpers.rb +84 -29
  38. data/lib/devise/controllers/rememberable.rb +3 -3
  39. data/lib/devise/controllers/scoped_views.rb +1 -1
  40. data/lib/devise/controllers/sign_in_out.rb +9 -10
  41. data/lib/devise/controllers/store_location.rb +56 -0
  42. data/lib/devise/controllers/url_helpers.rb +3 -1
  43. data/lib/devise/failure_app.rb +12 -10
  44. data/lib/devise/hooks/activatable.rb +5 -6
  45. data/lib/devise/hooks/csrf_cleaner.rb +3 -1
  46. data/lib/devise/hooks/lockable.rb +1 -1
  47. data/lib/devise/hooks/proxy.rb +2 -2
  48. data/lib/devise/hooks/rememberable.rb +2 -2
  49. data/lib/devise/hooks/timeoutable.rb +10 -3
  50. data/lib/devise/hooks/trackable.rb +1 -1
  51. data/lib/devise/mailers/helpers.rb +8 -8
  52. data/lib/devise/mapping.rb +4 -1
  53. data/lib/devise/models/authenticatable.rb +5 -5
  54. data/lib/devise/models/confirmable.rb +14 -14
  55. data/lib/devise/models/database_authenticatable.rb +18 -5
  56. data/lib/devise/models/lockable.rb +14 -11
  57. data/lib/devise/models/omniauthable.rb +1 -1
  58. data/lib/devise/models/recoverable.rb +23 -7
  59. data/lib/devise/models/rememberable.rb +6 -6
  60. data/lib/devise/models/timeoutable.rb +2 -2
  61. data/lib/devise/models/trackable.rb +5 -2
  62. data/lib/devise/models/validatable.rb +6 -6
  63. data/lib/devise/modules.rb +10 -10
  64. data/lib/devise/omniauth/url_helpers.rb +2 -2
  65. data/lib/devise/orm/active_record.rb +1 -1
  66. data/lib/devise/orm/mongoid.rb +1 -1
  67. data/lib/devise/rails/routes.rb +107 -78
  68. data/lib/devise/rails.rb +7 -1
  69. data/lib/devise/strategies/authenticatable.rb +11 -4
  70. data/lib/devise/strategies/base.rb +1 -1
  71. data/lib/devise/strategies/database_authenticatable.rb +7 -4
  72. data/lib/devise/test_helpers.rb +2 -2
  73. data/lib/devise/time_inflector.rb +2 -2
  74. data/lib/devise/version.rb +1 -1
  75. data/lib/devise.rb +15 -10
  76. data/lib/generators/active_record/devise_generator.rb +27 -10
  77. data/lib/generators/active_record/templates/migration.rb +4 -4
  78. data/lib/generators/active_record/templates/migration_existing.rb +4 -4
  79. data/lib/generators/devise/devise_generator.rb +5 -3
  80. data/lib/generators/devise/install_generator.rb +5 -0
  81. data/lib/generators/devise/views_generator.rb +31 -18
  82. data/lib/generators/mongoid/devise_generator.rb +20 -19
  83. data/lib/generators/templates/README +4 -4
  84. data/lib/generators/templates/devise.rb +20 -11
  85. data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
  86. data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
  87. data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
  88. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +2 -2
  89. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +4 -4
  90. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +2 -2
  91. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +6 -6
  92. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +4 -4
  93. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +4 -4
  94. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +2 -2
  95. data/script/cached-bundle +49 -0
  96. data/script/s3-put +71 -0
  97. data/test/controllers/custom_registrations_controller_test.rb +35 -0
  98. data/test/controllers/helpers_test.rb +89 -31
  99. data/test/controllers/internal_helpers_test.rb +11 -8
  100. data/test/controllers/passwords_controller_test.rb +1 -1
  101. data/test/controllers/sessions_controller_test.rb +29 -25
  102. data/test/controllers/url_helpers_test.rb +4 -4
  103. data/test/delegator_test.rb +1 -1
  104. data/test/devise_test.rb +21 -8
  105. data/test/failure_app_test.rb +61 -25
  106. data/test/generators/active_record_generator_test.rb +10 -4
  107. data/test/generators/devise_generator_test.rb +2 -2
  108. data/test/generators/mongoid_generator_test.rb +3 -3
  109. data/test/generators/views_generator_test.rb +30 -1
  110. data/test/helpers/devise_helper_test.rb +14 -13
  111. data/test/integration/authenticatable_test.rb +61 -45
  112. data/test/integration/confirmable_test.rb +95 -55
  113. data/test/integration/database_authenticatable_test.rb +16 -16
  114. data/test/integration/http_authenticatable_test.rb +12 -12
  115. data/test/integration/lockable_test.rb +43 -43
  116. data/test/integration/omniauthable_test.rb +3 -3
  117. data/test/integration/recoverable_test.rb +53 -53
  118. data/test/integration/registerable_test.rb +90 -80
  119. data/test/integration/rememberable_test.rb +15 -15
  120. data/test/integration/timeoutable_test.rb +27 -16
  121. data/test/integration/trackable_test.rb +4 -4
  122. data/test/mailers/confirmation_instructions_test.rb +7 -7
  123. data/test/mailers/reset_password_instructions_test.rb +6 -6
  124. data/test/mailers/unlock_instructions_test.rb +5 -5
  125. data/test/mapping_test.rb +3 -3
  126. data/test/models/authenticatable_test.rb +3 -3
  127. data/test/models/confirmable_test.rb +32 -32
  128. data/test/models/database_authenticatable_test.rb +32 -27
  129. data/test/models/lockable_test.rb +57 -33
  130. data/test/models/recoverable_test.rb +34 -22
  131. data/test/models/rememberable_test.rb +29 -14
  132. data/test/models/serializable_test.rb +8 -8
  133. data/test/models/timeoutable_test.rb +1 -1
  134. data/test/models/trackable_test.rb +28 -0
  135. data/test/models/validatable_test.rb +13 -13
  136. data/test/omniauth/config_test.rb +4 -4
  137. data/test/omniauth/url_helpers_test.rb +3 -3
  138. data/test/orm/mongoid.rb +1 -1
  139. data/test/parameter_sanitizer_test.rb +1 -1
  140. data/test/rails_app/app/active_record/shim.rb +1 -1
  141. data/test/rails_app/app/active_record/user_on_engine.rb +7 -0
  142. data/test/rails_app/app/active_record/user_on_main_app.rb +7 -0
  143. data/test/rails_app/app/controllers/admins/sessions_controller.rb +1 -1
  144. data/test/rails_app/app/controllers/admins_controller.rb +1 -1
  145. data/test/rails_app/app/controllers/application_controller.rb +5 -2
  146. data/test/rails_app/app/controllers/application_with_fake_engine.rb +30 -0
  147. data/test/rails_app/app/controllers/custom/registrations_controller.rb +21 -0
  148. data/test/rails_app/app/controllers/home_controller.rb +1 -1
  149. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +1 -1
  150. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +1 -1
  151. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +4 -4
  152. data/test/rails_app/app/controllers/users_controller.rb +6 -6
  153. data/test/rails_app/app/mailers/users/mailer.rb +4 -4
  154. data/test/rails_app/app/mongoid/admin.rb +11 -11
  155. data/test/rails_app/app/mongoid/shim.rb +2 -2
  156. data/test/rails_app/app/mongoid/user.rb +19 -19
  157. data/test/rails_app/app/mongoid/user_on_engine.rb +39 -0
  158. data/test/rails_app/app/mongoid/user_on_main_app.rb +39 -0
  159. data/test/rails_app/app/views/admins/sessions/new.html.erb +1 -1
  160. data/test/rails_app/app/views/home/admin_dashboard.html.erb +1 -1
  161. data/test/rails_app/app/views/home/index.html.erb +1 -1
  162. data/test/rails_app/app/views/home/join.html.erb +1 -1
  163. data/test/rails_app/app/views/home/user_dashboard.html.erb +1 -1
  164. data/test/rails_app/app/views/layouts/application.html.erb +1 -1
  165. data/test/rails_app/config/application.rb +2 -2
  166. data/test/rails_app/config/boot.rb +7 -1
  167. data/test/rails_app/config/environments/development.rb +0 -4
  168. data/test/rails_app/config/environments/production.rb +0 -4
  169. data/test/rails_app/config/initializers/devise.rb +7 -5
  170. data/test/rails_app/config/initializers/secret_token.rb +1 -1
  171. data/test/rails_app/config/routes.rb +60 -42
  172. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +7 -7
  173. data/test/rails_app/db/schema.rb +21 -17
  174. data/test/rails_app/lib/shared_admin.rb +4 -4
  175. data/test/rails_app/lib/shared_user.rb +1 -1
  176. data/test/rails_app/lib/shared_user_without_omniauth.rb +13 -0
  177. data/test/routes_test.rb +72 -58
  178. data/test/support/action_controller/record_identifier.rb +10 -0
  179. data/test/support/assertions.rb +2 -3
  180. data/test/support/helpers.rb +4 -4
  181. data/test/support/integration.rb +14 -14
  182. data/test/support/mongoid.yml +6 -0
  183. data/test/test_helper.rb +2 -7
  184. data/test/test_helpers_test.rb +25 -35
  185. data/test/test_models.rb +12 -5
  186. metadata +53 -38
  187. 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({:controller => 'devise/sessions', :action => 'new'}, {:path => 'users/sign_in', :method => :get})
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({:controller => 'devise/sessions', :action => 'create'}, {:path => 'users/sign_in', :method => :post})
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({:controller => 'devise/sessions', :action => 'destroy'}, {:path => 'users/sign_out', :method => :get})
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({:controller => 'devise/confirmations', :action => 'new'}, 'users/confirmation/new')
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({:controller => 'devise/confirmations', :action => 'create'}, {:path => 'users/confirmation', :method => :post})
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({:controller => 'devise/confirmations', :action => 'show'}, {:path => 'users/confirmation', :method => :get})
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({:controller => 'devise/passwords', :action => 'new'}, 'users/password/new')
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({:controller => 'devise/passwords', :action => 'create'}, {:path => 'users/password', :method => :post})
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({:controller => 'devise/passwords', :action => 'edit'}, 'users/password/edit')
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({:controller => 'devise/passwords', :action => 'update'}, {:path => 'users/password', :method => :put})
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({:controller => 'devise/unlocks', :action => 'new'}, 'users/unlock/new')
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({:controller => 'devise/unlocks', :action => 'create'}, {:path => 'users/unlock', :method => :post})
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({:controller => 'devise/unlocks', :action => 'show'}, {:path => 'users/unlock', :method => :get})
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({:controller => 'devise/registrations', :action => 'new'}, 'users/sign_up')
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({:controller => 'devise/registrations', :action => 'create'}, {:path => 'users', :method => :post})
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({:controller => 'devise/registrations', :action => 'edit'}, {:path => 'users/edit', :method => :get})
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({:controller => 'devise/registrations', :action => 'update'}, {:path => 'users', :method => :put})
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({:controller => 'devise/registrations', :action => 'destroy'}, {:path => 'users', :method => :delete})
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({:controller => 'devise/registrations', :action => 'cancel'}, {:path => 'users/cancel', :method => :get})
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({: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})
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({: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})
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({:controller => 'ysers/omniauth_callbacks', :action => 'twitter'}, {:path => 'users/auth/twitter/callback', :method => :get})
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({:controller => 'devise/registrations', :action => 'new'}, {:path => 'admin_area/sign_up', :method => :get})
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({:controller => 'admins/sessions', :action => 'new'}, {:path => 'admin_area/sign_in', :method => :get})
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({:controller => 'devise/passwords', :action => 'new'}, 'admin_area/password/new')
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", :controller => 'devise/sessions', :action => 'new'}, {:host => "sub.example.com", :path => '/sub_admin/sign_in', :method => :get})
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({:controller => 'devise/sessions', :action => 'new'}, 'reader/sessions/new')
139
+ assert_recognizes({controller: 'devise/sessions', action: 'new'}, 'reader/sessions/new')
140
140
  end
141
- assert_recognizes({:controller => 'devise/passwords', :action => 'new'}, 'reader/password/new')
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({:controller => 'devise/sessions', :action => 'new', :locale => 'en'}, '/en/accounts/login')
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({:controller => 'devise/sessions', :action => 'destroy', :locale => 'en'}, '/en/accounts/logout')
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({:controller => 'devise/passwords', :action => 'new', :locale => 'en'}, '/en/accounts/secret/new')
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({:controller => 'devise/registrations', :action => 'new', :locale => 'en'}, '/en/accounts/management/register')
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({:controller => 'devise/registrations', :action => 'cancel', :locale => 'en'}, '/en/accounts/management/giveup')
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({:controller => 'devise/sessions', :action => 'destroy'}, {:path => '/sign_out_via/deletes/sign_out', :method => :delete})
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({:controller => 'devise/sessions', :action => 'destroy'}, {:path => '/sign_out_via/deletes/sign_out', :method => :get})
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({:controller => 'devise/sessions', :action => 'destroy'}, {:path => '/sign_out_via/posts/sign_out', :method => :post})
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({:controller => 'devise/sessions', :action => 'destroy'}, {:path => '/sign_out_via/posts/sign_out', :method => :get})
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({:controller => 'devise/sessions', :action => 'destroy'}, {:path => '/sign_out_via/delete_or_posts/sign_out', :method => :post})
180
- assert_recognizes({:controller => 'devise/sessions', :action => 'destroy'}, {:path => '/sign_out_via/delete_or_posts/sign_out', :method => :delete})
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({:controller => 'devise/sessions', :action => 'destroy'}, {:path => '/sign_out_via/delete_or_posts/sign_out', :method => :get})
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({:controller => 'devise/registrations', :action => 'new'}, {:path => 'http://192.168.1.100/headquarters/sign_up', :method => :get})
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({:controller => 'devise/registrations', :action => 'new'}, {:path => 'http://10.0.0.100/headquarters/sign_up', :method => :get})
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({:controller => 'devise/registrations', :action => 'new'}, {:path => 'http://192.168.1.100/homebase/sign_up', :method => :get})
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({:controller => 'devise/registrations', :action => 'new'}, {:path => 'http://10.0.0.100//homebase/sign_up', :method => :get})
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({:controller => 'devise/sessions', :action => 'new'}, {:path => '/htmlonly_admin/sign_in', :method => :get})
205
+ assert_recognizes({controller: 'devise/sessions', action: 'new'}, {path: '/htmlonly_admin/sign_in', method: :get})
202
206
  assert_raise ExpectedRoutingError do
203
- assert_recognizes({:controller => 'devise/sessions', :action => 'new'}, {:path => '/htmlonly_admin/sign_in.xml', :method => :get})
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({:controller => 'devise/passwords', :action => 'create'}, {:path => '/htmlonly_admin/password', :method => :post})
212
+ assert_recognizes({controller: 'devise/passwords', action: 'create'}, {path: '/htmlonly_admin/password', method: :post})
209
213
  assert_raise ExpectedRoutingError do
210
- assert_recognizes({:controller => 'devise/passwords', :action => 'create'}, {:path => '/htmlonly_admin/password.xml', :method => :post})
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({:controller => 'devise/registrations', :action => 'new'}, {:path => '/htmlonly_admin/sign_up', :method => :get})
219
+ assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: '/htmlonly_admin/sign_up', method: :get})
216
220
  assert_raise ExpectedRoutingError do
217
- assert_recognizes({:controller => 'devise/registrations', :action => 'new'}, {:path => '/htmlonly_admin/sign_up.xml', :method => :get})
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({:controller => 'devise/confirmations', :action => 'show'}, {:path => '/htmlonly_users/confirmation', :method => :get})
226
+ assert_recognizes({controller: 'devise/confirmations', action: 'show'}, {path: '/htmlonly_users/confirmation', method: :get})
223
227
  assert_raise ExpectedRoutingError do
224
- assert_recognizes({:controller => 'devise/confirmations', :action => 'show'}, {:path => '/htmlonly_users/confirmation.xml', :method => :get})
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({:controller => 'devise/unlocks', :action => 'show'}, {:path => '/htmlonly_users/unlock', :method => :get})
233
+ assert_recognizes({controller: 'devise/unlocks', action: 'show'}, {path: '/htmlonly_users/unlock', method: :get})
230
234
  assert_raise ExpectedRoutingError do
231
- assert_recognizes({:controller => 'devise/unlocks', :action => 'show'}, {:path => '/htmlonly_users/unlock.xml', :method => :get})
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({:controller => 'publisher/registrations', :action => 'new'}, {:path => '/publisher/accounts/sign_up', :method => :get})
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({:controller => 'publisher/sessions', :action => 'new'}, {:path => '/publisher/accounts/get_in', :method => :get})
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
@@ -9,10 +9,9 @@ class ActiveSupport::TestCase
9
9
  assert assertion.blank?
10
10
  end
11
11
 
12
- def assert_not_blank(assertion)
13
- assert !assertion.blank?
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)
@@ -23,10 +23,10 @@ class ActiveSupport::TestCase
23
23
  end
24
24
 
25
25
  def valid_attributes(attributes={})
26
- { :username => "usertest",
27
- :email => generate_unique_email,
28
- :password => '12345678',
29
- :password_confirmation => '12345678' }.update(attributes)
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={})
@@ -8,11 +8,11 @@ class ActionDispatch::IntegrationTest
8
8
  def create_user(options={})
9
9
  @user ||= begin
10
10
  user = User.create!(
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
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
- :email => options[:email] || 'admin@test.com',
28
- :password => '123456', :password_confirmation => '123456',
29
- :active => options[:active]
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', :with => options[:email] || 'user@test.com'
40
- fill_in 'password', :with => options[:password] || '12345678'
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 'Sign In'
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', :with => 'admin@test.com'
51
- fill_in 'password', :with => '123456'
50
+ fill_in 'email', with: 'admin@test.com'
51
+ fill_in 'password', with: '123456'
52
52
  yield if block_given?
53
- click_button 'Sign In'
53
+ click_button 'Log In'
54
54
  admin
55
55
  end
56
56
 
@@ -0,0 +1,6 @@
1
+ test:
2
+ sessions:
3
+ default:
4
+ database: devise-test-suite
5
+ hosts:
6
+ - localhost:<%= ENV['MONGODB_PORT'] || '27017' %>
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 }
@@ -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, :allow_unconfirmed_access_for => 0 do
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, :allow_unconfirmed_access_for => 0 do
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, :id => user
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
- begin
76
- Devise.warden_config.failure_app = CustomFailureApp
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
- ensure
80
- Devise.warden_config.failure_app = Devise::FailureApp
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
- :stretches => 15, :pepper => 'abcdef', :allow_unconfirmed_access_for => 5.days,
4
- :remember_for => 7.days, :timeout_in => 15.minutes, :unlock_in => 10.days
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, :password_length => 2..6
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 :case_insensitive_keys => [ :email, :email_confirmation ]
17
- validates :email, :presence => true, :confirmation => {:on => :create}
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