devbootsrap 0.0.1

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 (219) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +31 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +29 -0
  6. data/Rakefile +1 -0
  7. data/app/controllers/devise/confirmations_controller.rb +47 -0
  8. data/app/controllers/devise/omniauth_callbacks_controller.rb +30 -0
  9. data/app/controllers/devise/passwords_controller.rb +70 -0
  10. data/app/controllers/devise/registrations_controller.rb +137 -0
  11. data/app/controllers/devise/sessions_controller.rb +53 -0
  12. data/app/controllers/devise/unlocks_controller.rb +46 -0
  13. data/app/controllers/devise_controller.rb +176 -0
  14. data/app/helpers/devise_helper.rb +25 -0
  15. data/app/mailers/devise/mailer.rb +20 -0
  16. data/app/views/devise/confirmations/new.html.erb +12 -0
  17. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  18. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  19. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  20. data/app/views/devise/passwords/edit.html.erb +16 -0
  21. data/app/views/devise/passwords/new.html.erb +12 -0
  22. data/app/views/devise/registrations/edit.html.erb +29 -0
  23. data/app/views/devise/registrations/new.html.erb +18 -0
  24. data/app/views/devise/sessions/new.html.erb +17 -0
  25. data/app/views/devise/shared/_links.erb +25 -0
  26. data/app/views/devise/unlocks/new.html.erb +12 -0
  27. data/config/locales/en.yml +59 -0
  28. data/devbootsrap.gemspec +29 -0
  29. data/gemfiles/Gemfile.rails-3.2-stable +29 -0
  30. data/gemfiles/Gemfile.rails-4.0-stable +29 -0
  31. data/gemfiles/Gemfile.rails-head +29 -0
  32. data/lib/devbootsrap.rb +5 -0
  33. data/lib/devbootsrap/version.rb +3 -0
  34. data/lib/devise.rb +491 -0
  35. data/lib/devise/controllers/helpers.rb +213 -0
  36. data/lib/devise/controllers/rememberable.rb +47 -0
  37. data/lib/devise/controllers/scoped_views.rb +17 -0
  38. data/lib/devise/controllers/sign_in_out.rb +103 -0
  39. data/lib/devise/controllers/store_location.rb +50 -0
  40. data/lib/devise/controllers/url_helpers.rb +67 -0
  41. data/lib/devise/delegator.rb +16 -0
  42. data/lib/devise/failure_app.rb +205 -0
  43. data/lib/devise/hooks/activatable.rb +11 -0
  44. data/lib/devise/hooks/csrf_cleaner.rb +5 -0
  45. data/lib/devise/hooks/forgetable.rb +9 -0
  46. data/lib/devise/hooks/lockable.rb +7 -0
  47. data/lib/devise/hooks/proxy.rb +21 -0
  48. data/lib/devise/hooks/rememberable.rb +7 -0
  49. data/lib/devise/hooks/timeoutable.rb +28 -0
  50. data/lib/devise/hooks/trackable.rb +9 -0
  51. data/lib/devise/mailers/helpers.rb +90 -0
  52. data/lib/devise/mapping.rb +172 -0
  53. data/lib/devise/models.rb +119 -0
  54. data/lib/devise/models/authenticatable.rb +284 -0
  55. data/lib/devise/models/confirmable.rb +295 -0
  56. data/lib/devise/models/database_authenticatable.rb +164 -0
  57. data/lib/devise/models/lockable.rb +196 -0
  58. data/lib/devise/models/omniauthable.rb +27 -0
  59. data/lib/devise/models/recoverable.rb +131 -0
  60. data/lib/devise/models/registerable.rb +25 -0
  61. data/lib/devise/models/rememberable.rb +129 -0
  62. data/lib/devise/models/timeoutable.rb +49 -0
  63. data/lib/devise/models/trackable.rb +35 -0
  64. data/lib/devise/models/validatable.rb +66 -0
  65. data/lib/devise/modules.rb +28 -0
  66. data/lib/devise/omniauth.rb +28 -0
  67. data/lib/devise/omniauth/config.rb +45 -0
  68. data/lib/devise/omniauth/url_helpers.rb +18 -0
  69. data/lib/devise/orm/active_record.rb +3 -0
  70. data/lib/devise/orm/mongoid.rb +3 -0
  71. data/lib/devise/parameter_filter.rb +40 -0
  72. data/lib/devise/parameter_sanitizer.rb +99 -0
  73. data/lib/devise/rails.rb +56 -0
  74. data/lib/devise/rails/routes.rb +496 -0
  75. data/lib/devise/rails/warden_compat.rb +22 -0
  76. data/lib/devise/strategies/authenticatable.rb +167 -0
  77. data/lib/devise/strategies/base.rb +20 -0
  78. data/lib/devise/strategies/database_authenticatable.rb +23 -0
  79. data/lib/devise/strategies/rememberable.rb +55 -0
  80. data/lib/devise/test_helpers.rb +132 -0
  81. data/lib/devise/time_inflector.rb +14 -0
  82. data/lib/devise/token_generator.rb +70 -0
  83. data/lib/devise/version.rb +3 -0
  84. data/lib/generators/active_record/devise_generator.rb +73 -0
  85. data/lib/generators/active_record/templates/migration.rb +18 -0
  86. data/lib/generators/active_record/templates/migration_existing.rb +25 -0
  87. data/lib/generators/devise/devise_generator.rb +26 -0
  88. data/lib/generators/devise/install_generator.rb +29 -0
  89. data/lib/generators/devise/orm_helpers.rb +51 -0
  90. data/lib/generators/devise/views_generator.rb +135 -0
  91. data/lib/generators/mongoid/devise_generator.rb +55 -0
  92. data/lib/generators/templates/README +35 -0
  93. data/lib/generators/templates/devise.rb +260 -0
  94. data/lib/generators/templates/markerb/confirmation_instructions.markerb +5 -0
  95. data/lib/generators/templates/markerb/reset_password_instructions.markerb +8 -0
  96. data/lib/generators/templates/markerb/unlock_instructions.markerb +7 -0
  97. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +16 -0
  98. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +19 -0
  99. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +15 -0
  100. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +27 -0
  101. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +17 -0
  102. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +15 -0
  103. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +16 -0
  104. data/test/controllers/custom_registrations_controller_test.rb +35 -0
  105. data/test/controllers/custom_strategy_test.rb +62 -0
  106. data/test/controllers/helpers_test.rb +276 -0
  107. data/test/controllers/internal_helpers_test.rb +123 -0
  108. data/test/controllers/passwords_controller_test.rb +31 -0
  109. data/test/controllers/sessions_controller_test.rb +103 -0
  110. data/test/controllers/url_helpers_test.rb +59 -0
  111. data/test/delegator_test.rb +19 -0
  112. data/test/devise_test.rb +94 -0
  113. data/test/failure_app_test.rb +232 -0
  114. data/test/generators/active_record_generator_test.rb +103 -0
  115. data/test/generators/devise_generator_test.rb +39 -0
  116. data/test/generators/install_generator_test.rb +13 -0
  117. data/test/generators/mongoid_generator_test.rb +23 -0
  118. data/test/generators/views_generator_test.rb +96 -0
  119. data/test/helpers/devise_helper_test.rb +51 -0
  120. data/test/integration/authenticatable_test.rb +713 -0
  121. data/test/integration/confirmable_test.rb +284 -0
  122. data/test/integration/database_authenticatable_test.rb +84 -0
  123. data/test/integration/http_authenticatable_test.rb +105 -0
  124. data/test/integration/lockable_test.rb +239 -0
  125. data/test/integration/omniauthable_test.rb +133 -0
  126. data/test/integration/recoverable_test.rb +334 -0
  127. data/test/integration/registerable_test.rb +349 -0
  128. data/test/integration/rememberable_test.rb +167 -0
  129. data/test/integration/timeoutable_test.rb +183 -0
  130. data/test/integration/trackable_test.rb +92 -0
  131. data/test/mailers/confirmation_instructions_test.rb +115 -0
  132. data/test/mailers/reset_password_instructions_test.rb +96 -0
  133. data/test/mailers/unlock_instructions_test.rb +91 -0
  134. data/test/mapping_test.rb +127 -0
  135. data/test/models/authenticatable_test.rb +13 -0
  136. data/test/models/confirmable_test.rb +454 -0
  137. data/test/models/database_authenticatable_test.rb +249 -0
  138. data/test/models/lockable_test.rb +316 -0
  139. data/test/models/omniauthable_test.rb +7 -0
  140. data/test/models/recoverable_test.rb +184 -0
  141. data/test/models/registerable_test.rb +7 -0
  142. data/test/models/rememberable_test.rb +183 -0
  143. data/test/models/serializable_test.rb +49 -0
  144. data/test/models/timeoutable_test.rb +51 -0
  145. data/test/models/trackable_test.rb +13 -0
  146. data/test/models/validatable_test.rb +127 -0
  147. data/test/models_test.rb +144 -0
  148. data/test/omniauth/config_test.rb +57 -0
  149. data/test/omniauth/url_helpers_test.rb +54 -0
  150. data/test/orm/active_record.rb +10 -0
  151. data/test/orm/mongoid.rb +13 -0
  152. data/test/parameter_sanitizer_test.rb +81 -0
  153. data/test/rails_app/Rakefile +6 -0
  154. data/test/rails_app/app/active_record/admin.rb +6 -0
  155. data/test/rails_app/app/active_record/shim.rb +2 -0
  156. data/test/rails_app/app/active_record/user.rb +6 -0
  157. data/test/rails_app/app/controllers/admins/sessions_controller.rb +6 -0
  158. data/test/rails_app/app/controllers/admins_controller.rb +11 -0
  159. data/test/rails_app/app/controllers/application_controller.rb +9 -0
  160. data/test/rails_app/app/controllers/custom/registrations_controller.rb +21 -0
  161. data/test/rails_app/app/controllers/home_controller.rb +25 -0
  162. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +2 -0
  163. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +2 -0
  164. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +14 -0
  165. data/test/rails_app/app/controllers/users_controller.rb +31 -0
  166. data/test/rails_app/app/helpers/application_helper.rb +3 -0
  167. data/test/rails_app/app/mailers/users/mailer.rb +12 -0
  168. data/test/rails_app/app/mongoid/admin.rb +29 -0
  169. data/test/rails_app/app/mongoid/shim.rb +23 -0
  170. data/test/rails_app/app/mongoid/user.rb +39 -0
  171. data/test/rails_app/app/views/admins/index.html.erb +1 -0
  172. data/test/rails_app/app/views/admins/sessions/new.html.erb +2 -0
  173. data/test/rails_app/app/views/home/admin_dashboard.html.erb +1 -0
  174. data/test/rails_app/app/views/home/index.html.erb +1 -0
  175. data/test/rails_app/app/views/home/join.html.erb +1 -0
  176. data/test/rails_app/app/views/home/private.html.erb +1 -0
  177. data/test/rails_app/app/views/home/user_dashboard.html.erb +1 -0
  178. data/test/rails_app/app/views/layouts/application.html.erb +24 -0
  179. data/test/rails_app/app/views/users/edit_form.html.erb +1 -0
  180. data/test/rails_app/app/views/users/index.html.erb +1 -0
  181. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +1 -0
  182. data/test/rails_app/app/views/users/sessions/new.html.erb +1 -0
  183. data/test/rails_app/bin/bundle +3 -0
  184. data/test/rails_app/bin/rails +4 -0
  185. data/test/rails_app/bin/rake +4 -0
  186. data/test/rails_app/config.ru +4 -0
  187. data/test/rails_app/config/application.rb +40 -0
  188. data/test/rails_app/config/boot.rb +14 -0
  189. data/test/rails_app/config/database.yml +18 -0
  190. data/test/rails_app/config/environment.rb +5 -0
  191. data/test/rails_app/config/environments/development.rb +30 -0
  192. data/test/rails_app/config/environments/production.rb +80 -0
  193. data/test/rails_app/config/environments/test.rb +36 -0
  194. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  195. data/test/rails_app/config/initializers/devise.rb +181 -0
  196. data/test/rails_app/config/initializers/inflections.rb +2 -0
  197. data/test/rails_app/config/initializers/secret_token.rb +8 -0
  198. data/test/rails_app/config/initializers/session_store.rb +1 -0
  199. data/test/rails_app/config/routes.rb +108 -0
  200. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +71 -0
  201. data/test/rails_app/db/schema.rb +55 -0
  202. data/test/rails_app/lib/shared_admin.rb +17 -0
  203. data/test/rails_app/lib/shared_user.rb +29 -0
  204. data/test/rails_app/public/404.html +26 -0
  205. data/test/rails_app/public/422.html +26 -0
  206. data/test/rails_app/public/500.html +26 -0
  207. data/test/rails_app/public/favicon.ico +0 -0
  208. data/test/routes_test.rb +262 -0
  209. data/test/support/action_controller/record_identifier.rb +10 -0
  210. data/test/support/assertions.rb +40 -0
  211. data/test/support/helpers.rb +70 -0
  212. data/test/support/integration.rb +92 -0
  213. data/test/support/locale/en.yml +8 -0
  214. data/test/support/mongoid.yml +6 -0
  215. data/test/support/webrat/integrations/rails.rb +24 -0
  216. data/test/test_helper.rb +27 -0
  217. data/test/test_helpers_test.rb +173 -0
  218. data/test/test_models.rb +33 -0
  219. metadata +480 -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,40 @@
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_not_blank(assertion)
13
+ assert !assertion.blank?
14
+ end
15
+ alias :assert_present :assert_not_blank
16
+
17
+ def assert_email_sent(address = nil, &block)
18
+ assert_difference('ActionMailer::Base.deliveries.size', &block)
19
+ if address.present?
20
+ assert_equal address, ActionMailer::Base.deliveries.last['to'].to_s
21
+ end
22
+ end
23
+
24
+ def assert_email_not_sent(&block)
25
+ assert_no_difference('ActionMailer::Base.deliveries.size', &block)
26
+ end
27
+
28
+ def assert_same_content(result, expected)
29
+ assert expected.size == result.size, "the arrays doesn't have the same size"
30
+ expected.each do |element|
31
+ assert result.include?(element), "The array doesn't include '#{element}'."
32
+ end
33
+ end
34
+
35
+ def assert_raise_with_message(exception_klass, message, &block)
36
+ exception = assert_raise exception_klass, &block
37
+ assert_equal exception.message, message,
38
+ "The expected message was #{message} but your exception throwed #{exception.message}"
39
+ end
40
+ end
@@ -0,0 +1,70 @@
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
+ begin
12
+ I18n.backend.store_translations(locale, translations)
13
+ yield
14
+ ensure
15
+ I18n.reload!
16
+ end
17
+ end
18
+
19
+ def generate_unique_email
20
+ @@email_count ||= 0
21
+ @@email_count += 1
22
+ "test#{@@email_count}@example.com"
23
+ end
24
+
25
+ def valid_attributes(attributes={})
26
+ { username: "usertest",
27
+ email: generate_unique_email,
28
+ password: '12345678',
29
+ password_confirmation: '12345678' }.update(attributes)
30
+ end
31
+
32
+ def new_user(attributes={})
33
+ User.new(valid_attributes(attributes))
34
+ end
35
+
36
+ def create_user(attributes={})
37
+ User.create!(valid_attributes(attributes))
38
+ end
39
+
40
+ def create_admin(attributes={})
41
+ valid_attributes = valid_attributes(attributes)
42
+ valid_attributes.delete(:username)
43
+ Admin.create!(valid_attributes)
44
+ end
45
+
46
+ # Execute the block setting the given values and restoring old values after
47
+ # the block is executed.
48
+ def swap(object, new_values)
49
+ old_values = {}
50
+ new_values.each do |key, value|
51
+ old_values[key] = object.send key
52
+ object.send :"#{key}=", value
53
+ end
54
+ clear_cached_variables(new_values)
55
+ yield
56
+ ensure
57
+ clear_cached_variables(new_values)
58
+ old_values.each do |key, value|
59
+ object.send :"#{key}=", value
60
+ end
61
+ end
62
+
63
+ def clear_cached_variables(options)
64
+ if options.key?(:case_insensitive_keys) || options.key?(:strip_whitespace_keys)
65
+ Devise.mappings.each do |_, mapping|
66
+ mapping.to.instance_variable_set(:@devise_parameter_filter, nil)
67
+ end
68
+ end
69
+ end
70
+ 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 'Sign 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 'Sign 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,27 @@
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
+ # Add support to load paths so we can overwrite broken webrat setup
21
+ $:.unshift File.expand_path('../support', __FILE__)
22
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
23
+
24
+ # For generators
25
+ require "rails/generators/test_case"
26
+ require "generators/devise/install_generator"
27
+ require "generators/devise/views_generator"
@@ -0,0 +1,173 @@
1
+ require 'test_helper'
2
+
3
+ class TestHelpersTest < ActionController::TestCase
4
+ tests UsersController
5
+ include Devise::TestHelpers
6
+
7
+ class CustomFailureApp < Devise::FailureApp
8
+ def redirect
9
+ self.status = 306
10
+ end
11
+ end
12
+
13
+ test "redirects if attempting to access a page unauthenticated" do
14
+ get :index
15
+ assert_redirected_to new_user_session_path
16
+ assert_equal "You need to sign in or sign up before continuing.", flash[:alert]
17
+ end
18
+
19
+ test "redirects if attempting to access a page with an unconfirmed account" do
20
+ swap Devise, allow_unconfirmed_access_for: 0.days do
21
+ user = create_user
22
+ assert !user.active_for_authentication?
23
+
24
+ sign_in user
25
+ get :index
26
+ assert_redirected_to new_user_session_path
27
+ end
28
+ end
29
+
30
+ test "returns nil if accessing current_user with an unconfirmed account" do
31
+ swap Devise, allow_unconfirmed_access_for: 0.days do
32
+ user = create_user
33
+ assert !user.active_for_authentication?
34
+
35
+ sign_in user
36
+ get :accept, id: user
37
+ assert_nil assigns(:current_user)
38
+ end
39
+ end
40
+
41
+ test "does not redirect with valid user" do
42
+ user = create_user
43
+ user.confirm!
44
+
45
+ sign_in user
46
+ get :index
47
+ assert_response :success
48
+ end
49
+
50
+ test "does not redirect with valid user after failed first attempt" do
51
+ get :index
52
+ assert_response :redirect
53
+
54
+ user = create_user
55
+ user.confirm!
56
+
57
+ sign_in user
58
+ get :index
59
+ assert_response :success
60
+ end
61
+
62
+ test "redirects if valid user signed out" do
63
+ user = create_user
64
+ user.confirm!
65
+
66
+ sign_in user
67
+ get :index
68
+
69
+ sign_out user
70
+ get :index
71
+ assert_redirected_to new_user_session_path
72
+ end
73
+
74
+ test "respects custom failure app" do
75
+ begin
76
+ Devise.warden_config.failure_app = CustomFailureApp
77
+ get :index
78
+ assert_response 306
79
+ ensure
80
+ Devise.warden_config.failure_app = Devise::FailureApp
81
+ end
82
+ end
83
+
84
+ test "returns the body of a failure app" do
85
+ get :index
86
+ assert_equal response.body, "<html><body>You are being <a href=\"http://test.host/users/sign_in\">redirected</a>.</body></html>"
87
+ end
88
+
89
+ test "defined Warden after_authentication callback should not be called when sign_in is called" do
90
+ begin
91
+ Warden::Manager.after_authentication do |user, auth, opts|
92
+ flunk "callback was called while it should not"
93
+ end
94
+
95
+ user = create_user
96
+ user.confirm!
97
+ sign_in user
98
+ ensure
99
+ Warden::Manager._after_set_user.pop
100
+ end
101
+ end
102
+
103
+ test "defined Warden before_logout callback should not be called when sign_out is called" do
104
+ begin
105
+ Warden::Manager.before_logout do |user, auth, opts|
106
+ flunk "callback was called while it should not"
107
+ end
108
+ user = create_user
109
+ user.confirm!
110
+
111
+ sign_in user
112
+ sign_out user
113
+ ensure
114
+ Warden::Manager._before_logout.pop
115
+ end
116
+ end
117
+
118
+ test "before_failure call should work" do
119
+ begin
120
+ executed = false
121
+ Warden::Manager.before_failure do |env,opts|
122
+ executed = true
123
+ end
124
+
125
+ user = create_user
126
+ sign_in user
127
+
128
+ get :index
129
+ assert executed
130
+ ensure
131
+ Warden::Manager._before_failure.pop
132
+ end
133
+ end
134
+
135
+ test "allows to sign in with different users" do
136
+ first_user = create_user
137
+ first_user.confirm!
138
+
139
+ sign_in first_user
140
+ get :index
141
+ assert_match /User ##{first_user.id}/, @response.body
142
+ sign_out first_user
143
+
144
+ second_user = create_user
145
+ second_user.confirm!
146
+
147
+ sign_in second_user
148
+ get :index
149
+ assert_match /User ##{second_user.id}/, @response.body
150
+ 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
+ end