ramon-devise 0.4.2

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 (92) hide show
  1. data/CHANGELOG.rdoc +109 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +243 -0
  4. data/Rakefile +45 -0
  5. data/TODO +8 -0
  6. data/app/controllers/confirmations_controller.rb +33 -0
  7. data/app/controllers/passwords_controller.rb +41 -0
  8. data/app/controllers/sessions_controller.rb +33 -0
  9. data/app/models/devise_mailer.rb +53 -0
  10. data/app/views/confirmations/new.html.erb +16 -0
  11. data/app/views/devise_mailer/confirmation_instructions.html.erb +5 -0
  12. data/app/views/devise_mailer/reset_password_instructions.html.erb +8 -0
  13. data/app/views/passwords/edit.html.erb +20 -0
  14. data/app/views/passwords/new.html.erb +16 -0
  15. data/app/views/sessions/new.html.erb +23 -0
  16. data/generators/devise/USAGE +5 -0
  17. data/generators/devise/devise_generator.rb +25 -0
  18. data/generators/devise/lib/route_devise.rb +32 -0
  19. data/generators/devise/templates/README +22 -0
  20. data/generators/devise/templates/migration.rb +20 -0
  21. data/generators/devise/templates/model.rb +5 -0
  22. data/generators/devise_install/USAGE +3 -0
  23. data/generators/devise_install/devise_install_generator.rb +9 -0
  24. data/generators/devise_install/templates/devise.rb +40 -0
  25. data/generators/devise_views/USAGE +3 -0
  26. data/generators/devise_views/devise_views_generator.rb +24 -0
  27. data/init.rb +2 -0
  28. data/lib/devise.rb +79 -0
  29. data/lib/devise/controllers/filters.rb +111 -0
  30. data/lib/devise/controllers/helpers.rb +130 -0
  31. data/lib/devise/controllers/url_helpers.rb +49 -0
  32. data/lib/devise/failure.rb +38 -0
  33. data/lib/devise/hooks/confirmable.rb +11 -0
  34. data/lib/devise/hooks/rememberable.rb +27 -0
  35. data/lib/devise/locales/en.yml +18 -0
  36. data/lib/devise/mapping.rb +120 -0
  37. data/lib/devise/migrations.rb +51 -0
  38. data/lib/devise/models.rb +105 -0
  39. data/lib/devise/models/authenticatable.rb +97 -0
  40. data/lib/devise/models/confirmable.rb +156 -0
  41. data/lib/devise/models/recoverable.rb +88 -0
  42. data/lib/devise/models/rememberable.rb +95 -0
  43. data/lib/devise/models/validatable.rb +36 -0
  44. data/lib/devise/rails.rb +17 -0
  45. data/lib/devise/rails/routes.rb +109 -0
  46. data/lib/devise/rails/warden_compat.rb +26 -0
  47. data/lib/devise/strategies/authenticatable.rb +46 -0
  48. data/lib/devise/strategies/base.rb +24 -0
  49. data/lib/devise/strategies/rememberable.rb +35 -0
  50. data/lib/devise/version.rb +3 -0
  51. data/lib/devise/warden.rb +24 -0
  52. data/test/controllers/filters_test.rb +103 -0
  53. data/test/controllers/helpers_test.rb +55 -0
  54. data/test/controllers/url_helpers_test.rb +47 -0
  55. data/test/devise_test.rb +72 -0
  56. data/test/failure_test.rb +34 -0
  57. data/test/integration/authenticatable_test.rb +187 -0
  58. data/test/integration/confirmable_test.rb +89 -0
  59. data/test/integration/recoverable_test.rb +131 -0
  60. data/test/integration/rememberable_test.rb +65 -0
  61. data/test/mailers/confirmation_instructions_test.rb +59 -0
  62. data/test/mailers/reset_password_instructions_test.rb +62 -0
  63. data/test/mapping_test.rb +101 -0
  64. data/test/models/authenticatable_test.rb +118 -0
  65. data/test/models/confirmable_test.rb +237 -0
  66. data/test/models/recoverable_test.rb +141 -0
  67. data/test/models/rememberable_test.rb +130 -0
  68. data/test/models/validatable_test.rb +99 -0
  69. data/test/models_test.rb +111 -0
  70. data/test/rails_app/app/controllers/admins_controller.rb +6 -0
  71. data/test/rails_app/app/controllers/application_controller.rb +10 -0
  72. data/test/rails_app/app/controllers/home_controller.rb +4 -0
  73. data/test/rails_app/app/controllers/users_controller.rb +7 -0
  74. data/test/rails_app/app/helpers/application_helper.rb +3 -0
  75. data/test/rails_app/app/models/account.rb +3 -0
  76. data/test/rails_app/app/models/admin.rb +3 -0
  77. data/test/rails_app/app/models/organizer.rb +3 -0
  78. data/test/rails_app/app/models/user.rb +3 -0
  79. data/test/rails_app/config/boot.rb +110 -0
  80. data/test/rails_app/config/environment.rb +41 -0
  81. data/test/rails_app/config/environments/development.rb +17 -0
  82. data/test/rails_app/config/environments/production.rb +28 -0
  83. data/test/rails_app/config/environments/test.rb +28 -0
  84. data/test/rails_app/config/initializers/new_rails_defaults.rb +21 -0
  85. data/test/rails_app/config/initializers/session_store.rb +15 -0
  86. data/test/rails_app/config/routes.rb +18 -0
  87. data/test/routes_test.rb +79 -0
  88. data/test/support/assertions_helper.rb +22 -0
  89. data/test/support/integration_tests_helper.rb +66 -0
  90. data/test/support/model_tests_helper.rb +51 -0
  91. data/test/test_helper.rb +40 -0
  92. metadata +154 -0
@@ -0,0 +1,95 @@
1
+ require 'digest/sha1'
2
+ require 'devise/hooks/rememberable'
3
+ require 'devise/strategies/rememberable'
4
+
5
+ module Devise
6
+ module Models
7
+
8
+ # Rememberable manages generating and clearing token for remember the user
9
+ # from a saved cookie. Rememberable also has utility methods for dealing
10
+ # with serializing the user into the cookie and back from the cookie, trying
11
+ # to lookup the record based on the saved information.
12
+ # You probably wouldn't use rememberable methods directly, they are used
13
+ # mostly internally for handling the remember token.
14
+ #
15
+ # Configuration:
16
+ #
17
+ # remember_for: the time you want the user will be remembered without
18
+ # asking for credentials. After this time the user will be
19
+ # blocked and will have to enter his credentials again.
20
+ # This configuration is also used to calculate the expires
21
+ # time for the cookie created to remember the user.
22
+ # By default remember_for is 2.weeks.
23
+ #
24
+ # Examples:
25
+ #
26
+ # User.find(1).remember_me! # regenerating the token
27
+ # User.find(1).forget_me! # clearing the token
28
+ #
29
+ # # generating info to put into cookies
30
+ # User.serialize_into_cookie(user)
31
+ #
32
+ # # lookup the user based on the incoming cookie information
33
+ # User.serialize_from_cookie(cookie_string)
34
+ module Rememberable
35
+
36
+ def self.included(base)
37
+ base.class_eval do
38
+ extend ClassMethods
39
+
40
+ # Remember me option available in after_authentication hook.
41
+ attr_accessor :remember_me
42
+ end
43
+ end
44
+
45
+ # Generate a new remember token and save the record without validations.
46
+ def remember_me!
47
+ self.remember_token = friendly_token
48
+ self.remember_created_at = Time.now.utc
49
+ save(false)
50
+ end
51
+
52
+ # Removes the remember token only if it exists, and save the record
53
+ # without validations.
54
+ def forget_me!
55
+ if remember_token?
56
+ self.remember_token = nil
57
+ self.remember_created_at = nil
58
+ save(false)
59
+ end
60
+ end
61
+
62
+ # Checks whether the incoming token matches or not with the record token.
63
+ def valid_remember_token?(token)
64
+ remember_token? && !remember_expired? && remember_token == token
65
+ end
66
+
67
+ # Remember token should be expired if expiration time not overpass now.
68
+ def remember_expired?
69
+ remember_expires_at <= Time.now.utc
70
+ end
71
+
72
+ # Remember token expires at created time + remember_for configuration
73
+ def remember_expires_at
74
+ remember_created_at + remember_for
75
+ end
76
+
77
+ module ClassMethods
78
+
79
+ # Create the cookie key using the record id and remember_token
80
+ def serialize_into_cookie(rememberable)
81
+ "#{rememberable.id}::#{rememberable.remember_token}"
82
+ end
83
+
84
+ # Recreate the user based on the stored cookie
85
+ def serialize_from_cookie(cookie)
86
+ rememberable_id, remember_token = cookie.split('::')
87
+ rememberable = find_by_id(rememberable_id) if rememberable_id
88
+ rememberable if rememberable.try(:valid_remember_token?, remember_token)
89
+ end
90
+ end
91
+
92
+ Devise::Models.config(self, :remember_for, 2.weeks)
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,36 @@
1
+ module Devise
2
+ module Models
3
+
4
+ # Validatable creates all needed validations for a user email and password.
5
+ # It's optional, given you may want to create the validations by yourself.
6
+ # Automatically validate if the email is present, unique and it's format is
7
+ # valid. Also tests presence of password, confirmation and length
8
+ module Validatable
9
+
10
+ # Email regex used to validate email formats. Retrieved from authlogic.
11
+ EMAIL_REGEX = /\A[\w\.%\+\-]+@(?:[A-Z0-9\-]+\.)+(?:[A-Z]{2,4}|museum|travel)\z/i
12
+
13
+ def self.included(base)
14
+ base.class_eval do
15
+
16
+ validates_presence_of :email
17
+ validates_uniqueness_of :email, :allow_blank => true
18
+ validates_format_of :email, :with => EMAIL_REGEX, :allow_blank => true
19
+
20
+ validates_presence_of :password, :if => :password_required?
21
+ validates_confirmation_of :password, :if => :password_required?
22
+ validates_length_of :password, :within => 6..20, :allow_blank => true, :if => :password_required?
23
+ end
24
+ end
25
+
26
+ protected
27
+
28
+ # Checks whether a password is needed or not. For validations only.
29
+ # Passwords are always required if it's a new record, or if the password
30
+ # or confirmation are being set somewhere.
31
+ def password_required?
32
+ new_record? || !password.nil? || !password_confirmation.nil?
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,17 @@
1
+ require 'devise/rails/routes'
2
+ require 'devise/rails/warden_compat'
3
+
4
+ Rails.configuration.after_initialize do
5
+ if defined?(ActiveRecord)
6
+ ActiveRecord::Base.extend Devise::Models
7
+ ActiveRecord::ConnectionAdapters::TableDefinition.send :include, Devise::Migrations
8
+ end
9
+
10
+ # Adds Warden Manager to Rails middleware stack, configuring default devise
11
+ # strategy and also the failure app.
12
+ Rails.configuration.middleware.use Warden::Manager do |manager|
13
+ Devise.configure_warden_manager(manager)
14
+ end
15
+
16
+ I18n.load_path.unshift File.expand_path(File.join(File.dirname(__FILE__), 'locales', 'en.yml'))
17
+ end
@@ -0,0 +1,109 @@
1
+ module ActionController::Routing
2
+ class RouteSet #:nodoc:
3
+
4
+ # Ensure Devise modules are included only after loading routes, because we
5
+ # need devise_for mappings already declared to create magic filters and
6
+ # helpers.
7
+ def load_routes_with_devise!
8
+ load_routes_without_devise!
9
+
10
+ ActionController::Base.send :include, Devise::Controllers::Filters
11
+ ActionController::Base.send :include, Devise::Controllers::UrlHelpers
12
+
13
+ ActionView::Base.send :include, Devise::Controllers::UrlHelpers
14
+ end
15
+ alias_method_chain :load_routes!, :devise
16
+
17
+ class Mapper #:doc:
18
+ # Includes devise_for method for routes. This method is responsible to
19
+ # generate all needed routes for devise, based on what modules you have
20
+ # defined in your model.
21
+ # Examples: Let's say you have an User model configured to use
22
+ # authenticatable, confirmable and recoverable modules. After creating this
23
+ # inside your routes:
24
+ #
25
+ # map.devise_for :users
26
+ #
27
+ # this method is going to look inside your User model and create the
28
+ # needed routes:
29
+ #
30
+ # # Session routes for Authenticatable (default)
31
+ # new_user_session GET /users/sign_in {:controller=>"sessions", :action=>"new"}
32
+ # user_session POST /users/sign_in {:controller=>"sessions", :action=>"create"}
33
+ # destroy_user_session GET /users/sign_out {:controller=>"sessions", :action=>"destroy"}
34
+ #
35
+ # # Password routes for Recoverable, if User model has :recoverable configured
36
+ # new_user_password GET /users/password/new(.:format) {:controller=>"passwords", :action=>"new"}
37
+ # edit_user_password GET /users/password/edit(.:format) {:controller=>"passwords", :action=>"edit"}
38
+ # user_password PUT /users/password(.:format) {:controller=>"passwords", :action=>"update"}
39
+ # POST /users/password(.:format) {:controller=>"passwords", :action=>"create"}
40
+ #
41
+ # # Confirmation routes for Confirmable, if User model has :confirmable configured
42
+ # new_user_confirmation GET /users/confirmation/new(.:format) {:controller=>"confirmations", :action=>"new"}
43
+ # user_confirmation GET /users/confirmation(.:format) {:controller=>"confirmations", :action=>"show"}
44
+ # POST /users/confirmation(.:format) {:controller=>"confirmations", :action=>"create"}
45
+ #
46
+ # You can configure your routes with some options:
47
+ # * :class_name => setup a different class to be looked up by devise, if it cannot be correctly find by the route name.
48
+ #
49
+ # map.devise_for :users, :class_name => 'Account'
50
+ #
51
+ # * :as => allows you to setup path name that will be used, as rails routes does. The following route configuration would setup your route as /accounts instead of /users:
52
+ #
53
+ # map.devise_for :users, :as => 'accounts'
54
+ #
55
+ # * :singular => setup the name used to create named routes. By default, for a :users key, it is going to be the singularized version, :user. To configure a named route like account_session_path instead of user_session_path just do:
56
+ #
57
+ # map.devise_for :users, :singular => :account
58
+ #
59
+ # * :path_names => configure different path names to overwrite defaults :sign_in, :sign_out, :password and :confirmation.
60
+ #
61
+ # map.devise_for :users, :path_names => { :sign_in => 'login', :sign_out => 'logout', :password => 'secret', :confirmation => 'verification' }
62
+ #
63
+ # * :path_prefix => the path prefix to be used in all routes.
64
+ #
65
+ # map.devise_for :users, :path_prefix => "/:locale"
66
+ #
67
+ # If you are using a dynamic prefix, like :locale above, you need to configure default_url_options through Devise. You can do that in config/initializers/devise.rb or setting a Devise.default_url_options:
68
+ #
69
+ # Devise.default_url_options do
70
+ # { :locale => I18n.locale }
71
+ # end
72
+ #
73
+ def devise_for(*resources)
74
+ options = resources.extract_options!
75
+
76
+ resources.map!(&:to_sym)
77
+ resources.each do |resource|
78
+ mapping = Devise::Mapping.new(resource, options)
79
+ Devise.mappings[mapping.name] = mapping
80
+
81
+ with_options(:path_prefix => mapping.raw_path, :name_prefix => "#{mapping.name}_") do |routes|
82
+ mapping.for.each do |strategy|
83
+ send(strategy, routes, mapping) if self.respond_to?(strategy, true)
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ protected
90
+
91
+ def authenticatable(routes, mapping)
92
+ routes.with_options(:controller => 'sessions', :name_prefix => nil) do |session|
93
+ session.send(:"new_#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'new', :conditions => { :method => :get })
94
+ session.send(:"#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'create', :conditions => { :method => :post })
95
+ session.send(:"destroy_#{mapping.name}_session", mapping.path_names[:sign_out], :action => 'destroy', :conditions => { :method => :get })
96
+ end
97
+ end
98
+
99
+ def recoverable(routes, mapping)
100
+ routes.resource :password, :only => [:new, :create, :edit, :update], :as => mapping.path_names[:password]
101
+ end
102
+
103
+ def confirmable(routes, mapping)
104
+ routes.resource :confirmation, :only => [:new, :create, :show], :as => mapping.path_names[:confirmation]
105
+ end
106
+
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,26 @@
1
+ # Taken from RailsWarden, thanks to Hassox. http://github.com/hassox/rails_warden
2
+ module Warden::Mixins::Common
3
+ # Gets the rails request object by default if it's available
4
+ def request
5
+ return @request if @request
6
+ if env['action_controller.rescue.request']
7
+ @request = env['action_controller.rescue.request']
8
+ else
9
+ Rack::Request.new(env)
10
+ end
11
+ end
12
+
13
+ def raw_session
14
+ request.session
15
+ end
16
+
17
+ def reset_session!
18
+ raw_session.inspect # why do I have to inspect it to get it to clear?
19
+ raw_session.clear
20
+ end
21
+
22
+ # Proxy to request cookies
23
+ def cookies
24
+ request.cookies
25
+ end
26
+ end
@@ -0,0 +1,46 @@
1
+ module Devise
2
+ module Strategies
3
+ # Default strategy for signing in a user, based on his email and password.
4
+ # Redirects to sign_in page if it's not authenticated
5
+ class Authenticatable < Devise::Strategies::Base
6
+
7
+ # Authenticate a user based on email and password params, returning to warden
8
+ # success and the authenticated user if everything is okay. Otherwise redirect
9
+ # to sign in page.
10
+ #
11
+ # Please notice the semantic difference between calling fail! and throw :warden.
12
+ # The first does not perform any action when calling authenticate, just
13
+ # when authenticate! is invoked. The second always perform the action.
14
+ def authenticate!
15
+ if valid_attributes? && resource = mapping.to.authenticate(attributes)
16
+ success!(resource)
17
+ else
18
+ store_location
19
+ fail!(:unauthenticated)
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ # Find the attributes for the current mapping.
26
+ def attributes
27
+ @attributes ||= params[scope]
28
+ end
29
+
30
+ # Check for the right keys.
31
+ def valid_attributes?
32
+ attributes && attributes[:email].present? && attributes[:password].present?
33
+ end
34
+
35
+ # Stores requested uri to redirect the user after signing in. We cannot use
36
+ # scoped session provided by warden here, since the user is not authenticated
37
+ # yet, but we still need to store the uri based on scope, so different scopes
38
+ # would never use the same uri to redirect.
39
+ def store_location
40
+ session[:"#{mapping.name}.return_to"] = request.request_uri if request.get?
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ Warden::Strategies.add(:authenticatable, Devise::Strategies::Authenticatable)
@@ -0,0 +1,24 @@
1
+ module Devise
2
+ module Strategies
3
+ # Base strategy for Devise. Responsible for verifying correct scope and
4
+ # mapping.
5
+ class Base < Warden::Strategies::Base
6
+
7
+ # Validate strategy. By default will raise an error if no scope or an
8
+ # invalid mapping is found.
9
+ def valid?
10
+ mapping.for.include?(self.class.name.split("::").last.underscore.to_sym)
11
+ end
12
+
13
+ # Checks if a valid scope was given for devise and find mapping based on
14
+ # this scope.
15
+ def mapping
16
+ @mapping ||= begin
17
+ raise "You need to give a scope for Devise authentication" unless scope
18
+ raise "You need to give a valid Devise mapping" unless mapping = Devise.mappings[scope]
19
+ mapping
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ module Devise
2
+ module Strategies
3
+ # Remember the user through the remember token. This strategy is responsible
4
+ # to verify whether there is a cookie with the remember token, and to
5
+ # recreate the user from this cookie if it exists. Must be called *before*
6
+ # authenticatable.
7
+ class Rememberable < Devise::Strategies::Base
8
+
9
+ # A valid strategy for rememberable needs a remember token in the cookies.
10
+ def valid?
11
+ super && remember_me_cookie.present?
12
+ end
13
+
14
+ # To authenticate a user we deserialize the cookie and attempt finding
15
+ # the record in the database. If the attempt fails, we pass to another
16
+ # strategy handle the authentication.
17
+ def authenticate!
18
+ if resource = mapping.to.serialize_from_cookie(remember_me_cookie)
19
+ success!(resource)
20
+ else
21
+ pass
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ # Accessor for remember cookie
28
+ def remember_me_cookie
29
+ cookies['remember_token']
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ Warden::Strategies.add(:rememberable, Devise::Strategies::Rememberable)
@@ -0,0 +1,3 @@
1
+ module Devise
2
+ VERSION = "0.4.2".freeze
3
+ end
@@ -0,0 +1,24 @@
1
+ begin
2
+ require 'warden'
3
+ rescue
4
+ gem 'warden'
5
+ require 'warden'
6
+ end
7
+
8
+ # Session Serialization in. This block determines how the user will be stored
9
+ # in the session. If you're using a complex object like an ActiveRecord model,
10
+ # it is not a good idea to store the complete object. An ID is sufficient.
11
+ Warden::Manager.serialize_into_session{ |user| [user.class, user.id] }
12
+
13
+ # Session Serialization out. This block gets the user out of the session.
14
+ # It should be the reverse of serializing the object into the session
15
+ Warden::Manager.serialize_from_session do |klass, id|
16
+ begin
17
+ klass.find(id)
18
+ rescue ActiveRecord::RecordNotFound
19
+ throw(:warden)
20
+ end
21
+ end
22
+
23
+ # Setup devise strategies for Warden
24
+ require 'devise/strategies/base'
@@ -0,0 +1,103 @@
1
+ require 'test/test_helper'
2
+ require 'ostruct'
3
+
4
+ class MockController < ApplicationController
5
+ attr_accessor :env
6
+
7
+ def request
8
+ self
9
+ end
10
+
11
+ def path
12
+ ''
13
+ end
14
+ end
15
+
16
+ class ControllerAuthenticableTest < ActionController::TestCase
17
+
18
+ def setup
19
+ @controller = MockController.new
20
+ @mock_warden = OpenStruct.new
21
+ @controller.env = { 'warden' => @mock_warden }
22
+ end
23
+
24
+ test 'setup warden' do
25
+ assert_not_nil @controller.warden
26
+ end
27
+
28
+ test 'provide access to warden instance' do
29
+ assert_equal @controller.warden, @controller.env['warden']
30
+ end
31
+
32
+ test 'run authenticate? with scope on warden' do
33
+ @mock_warden.expects(:authenticated?).with(:my_scope)
34
+ @controller.signed_in?(:my_scope)
35
+ end
36
+
37
+ test 'proxy signed_in? to authenticated' do
38
+ @mock_warden.expects(:authenticated?).with(:my_scope)
39
+ @controller.signed_in?(:my_scope)
40
+ end
41
+
42
+ test 'run user with scope on warden' do
43
+ @mock_warden.expects(:user).with(:admin).returns(true)
44
+ @controller.current_admin
45
+
46
+ @mock_warden.expects(:user).with(:user).returns(true)
47
+ @controller.current_user
48
+ end
49
+
50
+ test 'proxy logout to warden' do
51
+ @mock_warden.expects(:user).with(:user).returns(true)
52
+ @mock_warden.expects(:logout).with(:user).returns(true)
53
+ @controller.sign_out(:user)
54
+ end
55
+
56
+ test 'proxy user_authenticate! to authenticate with user scope' do
57
+ @mock_warden.expects(:authenticate!).with(:scope => :user)
58
+ @controller.authenticate_user!
59
+ end
60
+
61
+ test 'proxy admin_authenticate! to authenticate with admin scope' do
62
+ @mock_warden.expects(:authenticate!).with(:scope => :admin)
63
+ @controller.authenticate_admin!
64
+ end
65
+
66
+ test 'proxy user_authenticated? to authenticate with user scope' do
67
+ @mock_warden.expects(:authenticated?).with(:user)
68
+ @controller.user_signed_in?
69
+ end
70
+
71
+ test 'proxy admin_authenticated? to authenticate with admin scope' do
72
+ @mock_warden.expects(:authenticated?).with(:admin)
73
+ @controller.admin_signed_in?
74
+ end
75
+
76
+ test 'proxy user_session to session scope in warden' do
77
+ @mock_warden.expects(:session).with(:user).returns({})
78
+ @controller.user_session
79
+ end
80
+
81
+ test 'proxy admin_session to session scope in warden' do
82
+ @mock_warden.expects(:session).with(:admin).returns({})
83
+ @controller.admin_session
84
+ end
85
+
86
+ test 'sign in automatically proxy to set user on warden' do
87
+ @mock_warden.expects(:set_user).with(user = mock, :scope => :user).returns(true)
88
+ @controller.sign_in(:user, user)
89
+ end
90
+
91
+ test 'is not a devise controller' do
92
+ assert_not @controller.devise_controller?
93
+ end
94
+
95
+ test 'default url options are retrieved from devise' do
96
+ begin
97
+ Devise.default_url_options {{ :locale => I18n.locale }}
98
+ assert_equal({ :locale => :en }, @controller.send(:default_url_options))
99
+ ensure
100
+ Devise.default_url_options {{ }}
101
+ end
102
+ end
103
+ end