deviseOne 1.0.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.
Files changed (246) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.travis.yml +38 -0
  4. data/.yardopts +9 -0
  5. data/CHANGELOG.md +1117 -0
  6. data/CONTRIBUTING.md +14 -0
  7. data/Gemfile +29 -0
  8. data/Gemfile.lock +199 -0
  9. data/MIT-LICENSE +20 -0
  10. data/README.md +529 -0
  11. data/Rakefile +35 -0
  12. data/app/controllers/devise/confirmations_controller.rb +47 -0
  13. data/app/controllers/devise/omniauth_callbacks_controller.rb +30 -0
  14. data/app/controllers/devise/passwords_controller.rb +71 -0
  15. data/app/controllers/devise/registrations_controller.rb +143 -0
  16. data/app/controllers/devise/sessions_controller.rb +166 -0
  17. data/app/controllers/devise/unlocks_controller.rb +46 -0
  18. data/app/controllers/devise_controller.rb +193 -0
  19. data/app/helpers/devise_helper.rb +25 -0
  20. data/app/mailers/devise/mailer.rb +20 -0
  21. data/app/views/devise/confirmations/new.html.erb +16 -0
  22. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  23. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  24. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  25. data/app/views/devise/passwords/edit.html.erb +25 -0
  26. data/app/views/devise/passwords/new.html.erb +16 -0
  27. data/app/views/devise/registrations/edit.html.erb +39 -0
  28. data/app/views/devise/registrations/new.html.erb +29 -0
  29. data/app/views/devise/sessions/new.html.erb +27 -0
  30. data/app/views/devise/shared/_links.html.erb +21 -0
  31. data/app/views/devise/unlocks/new.html.erb +16 -0
  32. data/config/locales/en.yml +70 -0
  33. data/devise.gemspec +33 -0
  34. data/devise.png +0 -0
  35. data/gemfiles/Gemfile.rails-3.2-stable +29 -0
  36. data/gemfiles/Gemfile.rails-3.2-stable.lock +169 -0
  37. data/gemfiles/Gemfile.rails-4.0-stable +29 -0
  38. data/gemfiles/Gemfile.rails-4.0-stable.lock +165 -0
  39. data/gemfiles/Gemfile.rails-4.1-stable +29 -0
  40. data/gemfiles/Gemfile.rails-4.1-stable.lock +170 -0
  41. data/lib/devise.rb +499 -0
  42. data/lib/devise/controllers/helpers.rb +284 -0
  43. data/lib/devise/controllers/rememberable.rb +47 -0
  44. data/lib/devise/controllers/scoped_views.rb +17 -0
  45. data/lib/devise/controllers/sign_in_out.rb +102 -0
  46. data/lib/devise/controllers/store_location.rb +58 -0
  47. data/lib/devise/controllers/url_helpers.rb +69 -0
  48. data/lib/devise/delegator.rb +16 -0
  49. data/lib/devise/failure_app.rb +212 -0
  50. data/lib/devise/hooks/activatable.rb +10 -0
  51. data/lib/devise/hooks/csrf_cleaner.rb +7 -0
  52. data/lib/devise/hooks/forgetable.rb +9 -0
  53. data/lib/devise/hooks/lockable.rb +7 -0
  54. data/lib/devise/hooks/proxy.rb +21 -0
  55. data/lib/devise/hooks/rememberable.rb +7 -0
  56. data/lib/devise/hooks/timeoutable.rb +35 -0
  57. data/lib/devise/hooks/trackable.rb +9 -0
  58. data/lib/devise/mailers/helpers.rb +90 -0
  59. data/lib/devise/mapping.rb +175 -0
  60. data/lib/devise/models.rb +119 -0
  61. data/lib/devise/models/authenticatable.rb +290 -0
  62. data/lib/devise/models/confirmable.rb +305 -0
  63. data/lib/devise/models/database_authenticatable.rb +164 -0
  64. data/lib/devise/models/lockable.rb +196 -0
  65. data/lib/devise/models/omniauthable.rb +27 -0
  66. data/lib/devise/models/recoverable.rb +157 -0
  67. data/lib/devise/models/registerable.rb +25 -0
  68. data/lib/devise/models/rememberable.rb +142 -0
  69. data/lib/devise/models/timeoutable.rb +49 -0
  70. data/lib/devise/models/trackable.rb +38 -0
  71. data/lib/devise/models/validatable.rb +66 -0
  72. data/lib/devise/modules.rb +28 -0
  73. data/lib/devise/omniauth.rb +28 -0
  74. data/lib/devise/omniauth/config.rb +45 -0
  75. data/lib/devise/omniauth/url_helpers.rb +18 -0
  76. data/lib/devise/orm/active_record.rb +3 -0
  77. data/lib/devise/orm/mongoid.rb +3 -0
  78. data/lib/devise/parameter_filter.rb +40 -0
  79. data/lib/devise/parameter_sanitizer.rb +99 -0
  80. data/lib/devise/rails.rb +56 -0
  81. data/lib/devise/rails/routes.rb +495 -0
  82. data/lib/devise/rails/warden_compat.rb +22 -0
  83. data/lib/devise/strategies/authenticatable.rb +173 -0
  84. data/lib/devise/strategies/base.rb +20 -0
  85. data/lib/devise/strategies/database_authenticatable.rb +24 -0
  86. data/lib/devise/strategies/rememberable.rb +59 -0
  87. data/lib/devise/test_helpers.rb +132 -0
  88. data/lib/devise/time_inflector.rb +14 -0
  89. data/lib/devise/token_generator.rb +70 -0
  90. data/lib/devise/version.rb +3 -0
  91. data/lib/generators/active_record/devise_generator.rb +91 -0
  92. data/lib/generators/active_record/templates/migration.rb +18 -0
  93. data/lib/generators/active_record/templates/migration_existing.rb +25 -0
  94. data/lib/generators/devise/controllers_generator.rb +44 -0
  95. data/lib/generators/devise/devise_generator.rb +26 -0
  96. data/lib/generators/devise/install_generator.rb +29 -0
  97. data/lib/generators/devise/orm_helpers.rb +51 -0
  98. data/lib/generators/devise/views_generator.rb +135 -0
  99. data/lib/generators/mongoid/devise_generator.rb +55 -0
  100. data/lib/generators/templates/README +35 -0
  101. data/lib/generators/templates/controllers/README +14 -0
  102. data/lib/generators/templates/controllers/confirmations_controller.rb +28 -0
  103. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +28 -0
  104. data/lib/generators/templates/controllers/passwords_controller.rb +32 -0
  105. data/lib/generators/templates/controllers/registrations_controller.rb +60 -0
  106. data/lib/generators/templates/controllers/sessions_controller.rb +25 -0
  107. data/lib/generators/templates/controllers/unlocks_controller.rb +28 -0
  108. data/lib/generators/templates/devise.rb +263 -0
  109. data/lib/generators/templates/markerb/confirmation_instructions.markerb +5 -0
  110. data/lib/generators/templates/markerb/reset_password_instructions.markerb +8 -0
  111. data/lib/generators/templates/markerb/unlock_instructions.markerb +7 -0
  112. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +16 -0
  113. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +19 -0
  114. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +15 -0
  115. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +27 -0
  116. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +17 -0
  117. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +15 -0
  118. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +16 -0
  119. data/script/cached-bundle +49 -0
  120. data/script/s3-put +71 -0
  121. data/test/controllers/custom_registrations_controller_test.rb +35 -0
  122. data/test/controllers/custom_strategy_test.rb +62 -0
  123. data/test/controllers/helpers_test.rb +316 -0
  124. data/test/controllers/internal_helpers_test.rb +129 -0
  125. data/test/controllers/load_hooks_controller_test.rb +19 -0
  126. data/test/controllers/passwords_controller_test.rb +31 -0
  127. data/test/controllers/sessions_controller_test.rb +102 -0
  128. data/test/controllers/url_helpers_test.rb +65 -0
  129. data/test/delegator_test.rb +19 -0
  130. data/test/devise_test.rb +107 -0
  131. data/test/failure_app_test.rb +275 -0
  132. data/test/generators/active_record_generator_test.rb +109 -0
  133. data/test/generators/controllers_generator_test.rb +48 -0
  134. data/test/generators/devise_generator_test.rb +39 -0
  135. data/test/generators/install_generator_test.rb +13 -0
  136. data/test/generators/mongoid_generator_test.rb +23 -0
  137. data/test/generators/views_generator_test.rb +96 -0
  138. data/test/helpers/devise_helper_test.rb +49 -0
  139. data/test/integration/authenticatable_test.rb +731 -0
  140. data/test/integration/confirmable_test.rb +324 -0
  141. data/test/integration/database_authenticatable_test.rb +94 -0
  142. data/test/integration/http_authenticatable_test.rb +105 -0
  143. data/test/integration/lockable_test.rb +239 -0
  144. data/test/integration/omniauthable_test.rb +133 -0
  145. data/test/integration/recoverable_test.rb +334 -0
  146. data/test/integration/registerable_test.rb +361 -0
  147. data/test/integration/rememberable_test.rb +176 -0
  148. data/test/integration/timeoutable_test.rb +189 -0
  149. data/test/integration/trackable_test.rb +92 -0
  150. data/test/mailers/confirmation_instructions_test.rb +115 -0
  151. data/test/mailers/reset_password_instructions_test.rb +96 -0
  152. data/test/mailers/unlock_instructions_test.rb +91 -0
  153. data/test/mapping_test.rb +128 -0
  154. data/test/models/authenticatable_test.rb +23 -0
  155. data/test/models/confirmable_test.rb +461 -0
  156. data/test/models/database_authenticatable_test.rb +249 -0
  157. data/test/models/lockable_test.rb +328 -0
  158. data/test/models/omniauthable_test.rb +7 -0
  159. data/test/models/recoverable_test.rb +205 -0
  160. data/test/models/registerable_test.rb +7 -0
  161. data/test/models/rememberable_test.rb +198 -0
  162. data/test/models/serializable_test.rb +49 -0
  163. data/test/models/timeoutable_test.rb +51 -0
  164. data/test/models/trackable_test.rb +41 -0
  165. data/test/models/validatable_test.rb +127 -0
  166. data/test/models_test.rb +144 -0
  167. data/test/omniauth/config_test.rb +57 -0
  168. data/test/omniauth/url_helpers_test.rb +54 -0
  169. data/test/orm/active_record.rb +10 -0
  170. data/test/orm/mongoid.rb +13 -0
  171. data/test/parameter_sanitizer_test.rb +81 -0
  172. data/test/rails_app/Rakefile +6 -0
  173. data/test/rails_app/app/active_record/admin.rb +6 -0
  174. data/test/rails_app/app/active_record/shim.rb +2 -0
  175. data/test/rails_app/app/active_record/user.rb +6 -0
  176. data/test/rails_app/app/active_record/user_on_engine.rb +7 -0
  177. data/test/rails_app/app/active_record/user_on_main_app.rb +7 -0
  178. data/test/rails_app/app/controllers/admins/sessions_controller.rb +6 -0
  179. data/test/rails_app/app/controllers/admins_controller.rb +11 -0
  180. data/test/rails_app/app/controllers/application_controller.rb +12 -0
  181. data/test/rails_app/app/controllers/application_with_fake_engine.rb +30 -0
  182. data/test/rails_app/app/controllers/custom/registrations_controller.rb +21 -0
  183. data/test/rails_app/app/controllers/home_controller.rb +25 -0
  184. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +2 -0
  185. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +2 -0
  186. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +14 -0
  187. data/test/rails_app/app/controllers/users_controller.rb +31 -0
  188. data/test/rails_app/app/helpers/application_helper.rb +3 -0
  189. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +3 -0
  190. data/test/rails_app/app/mailers/users/mailer.rb +3 -0
  191. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +4 -0
  192. data/test/rails_app/app/mongoid/admin.rb +29 -0
  193. data/test/rails_app/app/mongoid/shim.rb +23 -0
  194. data/test/rails_app/app/mongoid/user.rb +39 -0
  195. data/test/rails_app/app/mongoid/user_on_engine.rb +39 -0
  196. data/test/rails_app/app/mongoid/user_on_main_app.rb +39 -0
  197. data/test/rails_app/app/views/admins/index.html.erb +1 -0
  198. data/test/rails_app/app/views/admins/sessions/new.html.erb +2 -0
  199. data/test/rails_app/app/views/home/admin_dashboard.html.erb +1 -0
  200. data/test/rails_app/app/views/home/index.html.erb +1 -0
  201. data/test/rails_app/app/views/home/join.html.erb +1 -0
  202. data/test/rails_app/app/views/home/private.html.erb +1 -0
  203. data/test/rails_app/app/views/home/user_dashboard.html.erb +1 -0
  204. data/test/rails_app/app/views/layouts/application.html.erb +24 -0
  205. data/test/rails_app/app/views/users/edit_form.html.erb +1 -0
  206. data/test/rails_app/app/views/users/index.html.erb +1 -0
  207. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +1 -0
  208. data/test/rails_app/app/views/users/sessions/new.html.erb +1 -0
  209. data/test/rails_app/bin/bundle +3 -0
  210. data/test/rails_app/bin/rails +4 -0
  211. data/test/rails_app/bin/rake +4 -0
  212. data/test/rails_app/config.ru +4 -0
  213. data/test/rails_app/config/application.rb +40 -0
  214. data/test/rails_app/config/boot.rb +14 -0
  215. data/test/rails_app/config/database.yml +18 -0
  216. data/test/rails_app/config/environment.rb +5 -0
  217. data/test/rails_app/config/environments/development.rb +30 -0
  218. data/test/rails_app/config/environments/production.rb +80 -0
  219. data/test/rails_app/config/environments/test.rb +36 -0
  220. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  221. data/test/rails_app/config/initializers/devise.rb +180 -0
  222. data/test/rails_app/config/initializers/inflections.rb +2 -0
  223. data/test/rails_app/config/initializers/secret_token.rb +8 -0
  224. data/test/rails_app/config/initializers/session_store.rb +1 -0
  225. data/test/rails_app/config/routes.rb +122 -0
  226. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +71 -0
  227. data/test/rails_app/db/schema.rb +55 -0
  228. data/test/rails_app/lib/shared_admin.rb +17 -0
  229. data/test/rails_app/lib/shared_user.rb +29 -0
  230. data/test/rails_app/lib/shared_user_without_omniauth.rb +13 -0
  231. data/test/rails_app/public/404.html +26 -0
  232. data/test/rails_app/public/422.html +26 -0
  233. data/test/rails_app/public/500.html +26 -0
  234. data/test/rails_app/public/favicon.ico +0 -0
  235. data/test/routes_test.rb +264 -0
  236. data/test/support/action_controller/record_identifier.rb +10 -0
  237. data/test/support/assertions.rb +39 -0
  238. data/test/support/helpers.rb +73 -0
  239. data/test/support/integration.rb +92 -0
  240. data/test/support/locale/en.yml +8 -0
  241. data/test/support/mongoid.yml +6 -0
  242. data/test/support/webrat/integrations/rails.rb +24 -0
  243. data/test/test_helper.rb +34 -0
  244. data/test/test_helpers_test.rb +163 -0
  245. data/test/test_models.rb +33 -0
  246. metadata +531 -0
@@ -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
@@ -0,0 +1,39 @@
1
+ require 'active_support/test_case'
2
+
3
+ class ActiveSupport::TestCase
4
+ def assert_not(assertion)
5
+ assert !assertion
6
+ end
7
+
8
+ def assert_blank(assertion)
9
+ assert assertion.blank?
10
+ end
11
+
12
+ def assert_present(assertion)
13
+ assert assertion.present?
14
+ end
15
+
16
+ def assert_email_sent(address = nil, &block)
17
+ assert_difference('ActionMailer::Base.deliveries.size', &block)
18
+ if address.present?
19
+ assert_equal address, ActionMailer::Base.deliveries.last['to'].to_s
20
+ end
21
+ end
22
+
23
+ def assert_email_not_sent(&block)
24
+ assert_no_difference('ActionMailer::Base.deliveries.size', &block)
25
+ end
26
+
27
+ def assert_same_content(result, expected)
28
+ assert expected.size == result.size, "the arrays doesn't have the same size"
29
+ expected.each do |element|
30
+ assert result.include?(element), "The array doesn't include '#{element}'."
31
+ end
32
+ end
33
+
34
+ def assert_raise_with_message(exception_klass, message, &block)
35
+ exception = assert_raise exception_klass, &block
36
+ assert_equal exception.message, message,
37
+ "The expected message was #{message} but your exception throwed #{exception.message}"
38
+ end
39
+ end
@@ -0,0 +1,73 @@
1
+ require 'active_support/test_case'
2
+
3
+ class ActiveSupport::TestCase
4
+ VALID_AUTHENTICATION_TOKEN = 'AbCdEfGhIjKlMnOpQrSt'.freeze
5
+
6
+ def setup_mailer
7
+ ActionMailer::Base.deliveries = []
8
+ end
9
+
10
+ def store_translations(locale, translations, &block)
11
+ # Calling 'available_locales' before storing the translations to ensure
12
+ # that the I18n backend will be initialized before we store our custom
13
+ # translations, so they will always override the translations for the
14
+ # YML file.
15
+ I18n.available_locales
16
+ I18n.backend.store_translations(locale, translations)
17
+ yield
18
+ ensure
19
+ I18n.reload!
20
+ end
21
+
22
+ def generate_unique_email
23
+ @@email_count ||= 0
24
+ @@email_count += 1
25
+ "test#{@@email_count}@example.com"
26
+ end
27
+
28
+ def valid_attributes(attributes={})
29
+ { username: "usertest",
30
+ email: generate_unique_email,
31
+ password: '12345678',
32
+ password_confirmation: '12345678' }.update(attributes)
33
+ end
34
+
35
+ def new_user(attributes={})
36
+ User.new(valid_attributes(attributes))
37
+ end
38
+
39
+ def create_user(attributes={})
40
+ User.create!(valid_attributes(attributes))
41
+ end
42
+
43
+ def create_admin(attributes={})
44
+ valid_attributes = valid_attributes(attributes)
45
+ valid_attributes.delete(:username)
46
+ Admin.create!(valid_attributes)
47
+ end
48
+
49
+ # Execute the block setting the given values and restoring old values after
50
+ # the block is executed.
51
+ def swap(object, new_values)
52
+ old_values = {}
53
+ new_values.each do |key, value|
54
+ old_values[key] = object.send key
55
+ object.send :"#{key}=", value
56
+ end
57
+ clear_cached_variables(new_values)
58
+ yield
59
+ ensure
60
+ clear_cached_variables(new_values)
61
+ old_values.each do |key, value|
62
+ object.send :"#{key}=", value
63
+ end
64
+ end
65
+
66
+ def clear_cached_variables(options)
67
+ if options.key?(:case_insensitive_keys) || options.key?(:strip_whitespace_keys)
68
+ Devise.mappings.each do |_, mapping|
69
+ mapping.to.instance_variable_set(:@devise_parameter_filter, nil)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,92 @@
1
+ require 'action_dispatch/testing/integration'
2
+
3
+ class ActionDispatch::IntegrationTest
4
+ def warden
5
+ request.env['warden']
6
+ end
7
+
8
+ def create_user(options={})
9
+ @user ||= begin
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
16
+ )
17
+ user.update_attribute(:confirmation_sent_at, options[:confirmation_sent_at]) if options[:confirmation_sent_at]
18
+ user.confirm! unless options[:confirm] == false
19
+ user.lock_access! if options[:locked] == true
20
+ user
21
+ end
22
+ end
23
+
24
+ def create_admin(options={})
25
+ @admin ||= begin
26
+ admin = Admin.create!(
27
+ email: options[:email] || 'admin@test.com',
28
+ password: '123456', password_confirmation: '123456',
29
+ active: options[:active]
30
+ )
31
+ admin.confirm! unless options[:confirm] == false
32
+ admin
33
+ end
34
+ end
35
+
36
+ def sign_in_as_user(options={}, &block)
37
+ user = create_user(options)
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'
41
+ check 'remember me' if options[:remember_me] == true
42
+ yield if block_given?
43
+ click_button 'Log In'
44
+ user
45
+ end
46
+
47
+ def sign_in_as_admin(options={}, &block)
48
+ admin = create_admin(options)
49
+ visit_with_option options[:visit], new_admin_session_path
50
+ fill_in 'email', with: 'admin@test.com'
51
+ fill_in 'password', with: '123456'
52
+ yield if block_given?
53
+ click_button 'Log In'
54
+ admin
55
+ end
56
+
57
+ # Fix assert_redirect_to in integration sessions because they don't take into
58
+ # account Middleware redirects.
59
+ #
60
+ def assert_redirected_to(url)
61
+ assert [301, 302].include?(@integration_session.status),
62
+ "Expected status to be 301 or 302, got #{@integration_session.status}"
63
+
64
+ assert_url url, @integration_session.headers["Location"]
65
+ end
66
+
67
+ def assert_current_url(expected)
68
+ assert_url expected, current_url
69
+ end
70
+
71
+ def assert_url(expected, actual)
72
+ assert_equal prepend_host(expected), prepend_host(actual)
73
+ end
74
+
75
+ protected
76
+
77
+ def visit_with_option(given, default)
78
+ case given
79
+ when String
80
+ visit given
81
+ when FalseClass
82
+ # Do nothing
83
+ else
84
+ visit default
85
+ end
86
+ end
87
+
88
+ def prepend_host(url)
89
+ url = "http://#{request.host}#{url}" if url[0] == ?/
90
+ url
91
+ end
92
+ end
@@ -0,0 +1,8 @@
1
+ en:
2
+ devise:
3
+ failure:
4
+ user:
5
+ does_not_exist: "User %{name} does not exist"
6
+ errors:
7
+ messages:
8
+ taken: "has already been taken"
@@ -0,0 +1,6 @@
1
+ test:
2
+ sessions:
3
+ default:
4
+ database: devise-test-suite
5
+ hosts:
6
+ - localhost:<%= ENV['MONGODB_PORT'] || '27017' %>
@@ -0,0 +1,24 @@
1
+ require 'webrat/core/elements/form'
2
+ require 'action_dispatch/testing/integration'
3
+
4
+ module Webrat
5
+ Form.class_eval do
6
+ def self.parse_rails_request_params(params)
7
+ Rack::Utils.parse_nested_query(params)
8
+ end
9
+ end
10
+
11
+ module Logging
12
+ # Avoid RAILS_DEFAULT_LOGGER deprecation warning
13
+ def logger # :nodoc:
14
+ ::Rails.logger
15
+ end
16
+ end
17
+ end
18
+
19
+ module ActionDispatch #:nodoc:
20
+ IntegrationTest.class_eval do
21
+ include Webrat::Methods
22
+ include Webrat::Matchers
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ DEVISE_ORM = (ENV["DEVISE_ORM"] || :active_record).to_sym
3
+
4
+ $:.unshift File.dirname(__FILE__)
5
+ puts "\n==> Devise.orm = #{DEVISE_ORM.inspect}"
6
+
7
+ require "rails_app/config/environment"
8
+ require "rails/test_help"
9
+ require "orm/#{DEVISE_ORM}"
10
+
11
+ I18n.load_path << File.expand_path("../support/locale/en.yml", __FILE__)
12
+
13
+ require 'mocha/setup'
14
+ require 'webrat'
15
+ Webrat.configure do |config|
16
+ config.mode = :rails
17
+ config.open_error_files = false
18
+ end
19
+
20
+ if ActiveSupport.respond_to?(:test_order)
21
+ ActiveSupport.test_order = :random
22
+ end
23
+
24
+ OmniAuth.config.logger = Logger.new('/dev/null')
25
+
26
+ # Add support to load paths so we can overwrite broken webrat setup
27
+ $:.unshift File.expand_path('../support', __FILE__)
28
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
29
+
30
+ # For generators
31
+ require "rails/generators/test_case"
32
+ require "generators/devise/install_generator"
33
+ require "generators/devise/views_generator"
34
+ require "generators/devise/controllers_generator"
@@ -0,0 +1,163 @@
1
+ require 'test_helper'
2
+
3
+ class TestHelpersTest < ActionController::TestCase
4
+ tests UsersController
5
+ include Devise::TestHelpers
6
+
7
+ test "redirects if attempting to access a page unauthenticated" do
8
+ get :index
9
+ assert_redirected_to new_user_session_path
10
+ assert_equal "You need to sign in or sign up before continuing.", flash[:alert]
11
+ end
12
+
13
+ test "redirects if attempting to access a page with an unconfirmed account" do
14
+ swap Devise, allow_unconfirmed_access_for: 0.days do
15
+ user = create_user
16
+ assert !user.active_for_authentication?
17
+
18
+ sign_in user
19
+ get :index
20
+ assert_redirected_to new_user_session_path
21
+ end
22
+ end
23
+
24
+ test "returns nil if accessing current_user with an unconfirmed account" do
25
+ swap Devise, allow_unconfirmed_access_for: 0.days do
26
+ user = create_user
27
+ assert !user.active_for_authentication?
28
+
29
+ sign_in user
30
+ get :accept, id: user
31
+ assert_nil assigns(:current_user)
32
+ end
33
+ end
34
+
35
+ test "does not redirect with valid user" do
36
+ user = create_user
37
+ user.confirm!
38
+
39
+ sign_in user
40
+ get :index
41
+ assert_response :success
42
+ end
43
+
44
+ test "does not redirect with valid user after failed first attempt" do
45
+ get :index
46
+ assert_response :redirect
47
+
48
+ user = create_user
49
+ user.confirm!
50
+
51
+ sign_in user
52
+ get :index
53
+ assert_response :success
54
+ end
55
+
56
+ test "redirects if valid user signed out" do
57
+ user = create_user
58
+ user.confirm!
59
+
60
+ sign_in user
61
+ get :index
62
+
63
+ sign_out user
64
+ get :index
65
+ assert_redirected_to new_user_session_path
66
+ end
67
+
68
+ test "respects custom failure app" do
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
76
+ get :index
77
+ assert_response 306
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"]
93
+ end
94
+ end
95
+
96
+ test "returns the body of a failure app" do
97
+ get :index
98
+ assert_equal response.body, "<html><body>You are being <a href=\"http://test.host/users/sign_in\">redirected</a>.</body></html>"
99
+ end
100
+
101
+ test "defined Warden after_authentication callback should not be called when sign_in is called" do
102
+ begin
103
+ Warden::Manager.after_authentication do |user, auth, opts|
104
+ flunk "callback was called while it should not"
105
+ end
106
+
107
+ user = create_user
108
+ user.confirm!
109
+ sign_in user
110
+ ensure
111
+ Warden::Manager._after_set_user.pop
112
+ end
113
+ end
114
+
115
+ test "defined Warden before_logout callback should not be called when sign_out is called" do
116
+ begin
117
+ Warden::Manager.before_logout do |user, auth, opts|
118
+ flunk "callback was called while it should not"
119
+ end
120
+ user = create_user
121
+ user.confirm!
122
+
123
+ sign_in user
124
+ sign_out user
125
+ ensure
126
+ Warden::Manager._before_logout.pop
127
+ end
128
+ end
129
+
130
+ test "before_failure call should work" do
131
+ begin
132
+ executed = false
133
+ Warden::Manager.before_failure do |env,opts|
134
+ executed = true
135
+ end
136
+
137
+ user = create_user
138
+ sign_in user
139
+
140
+ get :index
141
+ assert executed
142
+ ensure
143
+ Warden::Manager._before_failure.pop
144
+ end
145
+ end
146
+
147
+ test "allows to sign in with different users" do
148
+ first_user = create_user
149
+ first_user.confirm!
150
+
151
+ sign_in first_user
152
+ get :index
153
+ assert_match /User ##{first_user.id}/, @response.body
154
+ sign_out first_user
155
+
156
+ second_user = create_user
157
+ second_user.confirm!
158
+
159
+ sign_in second_user
160
+ get :index
161
+ assert_match /User ##{second_user.id}/, @response.body
162
+ end
163
+ end