Compare commits

...

37 Commits
v1.5.0 ... v1.5

Author SHA1 Message Date
Rafael Mendonça França
87922e6ea2 Use the Ruby 1.8 hash syntax.
Yes we still support Ruby 1.8 😢

Conflicts:
	Gemfile.lock
2013-01-28 13:43:16 -02:00
José Valim
1a8a252770 Release v1.5.4 2013-01-26 11:59:19 -07:00
José Valim
5a158f8b24 Require string conversion for all values 2013-01-26 11:58:19 -07:00
José Valim
de05cecdcd Merge pull request #2036 from patrickdavey/1.5.3_doc_update
adding regression notice for warden 1.2.1 with devise 1.5.3
2012-08-22 05:04:57 -07:00
Patrick Davey
7fa0a248b7 adding regression notice for warden 1.2.1 2012-08-22 10:38:46 +12:00
José Valim
59cd9e72b9 Release 1.5.3. 2011-12-19 12:56:56 +01:00
José Valim
fbb5c2af5c Update CHANGELOG. 2011-12-12 11:36:19 +01:00
José Valim
e137e9d5d1 PathChecker should not attempt to validate invalid routes, closes #1505 2011-12-12 11:35:57 +01:00
José Valim
5bc96f294f Update CHANGELOG. 2011-12-12 09:26:14 +01:00
José Valim
cd8af3c00c Fix a bug where passing :format => false to devise_for was permanent, closes #1504 2011-12-12 09:25:43 +01:00
José Valim
f5c643946b Update CHANGELOG 2011-12-07 13:19:53 +01:00
Dmitriy Kiriyenko
86d4ec223d Fix taking associated failure app from the scope in the given env.
There is a delegator to get failure app, introduced in 4629bee and tuned
in 24b26026. The latter commit introduced a bit of logic, however, no
tests are included into commit. Needless to say this resulted in a
broken code.

The point is that `env["warden.options"][:scope]` returns a string.
However, `Devise.mappings` is a hash with symbol keys.

Adding tests and converting scope to symbol here.

Signed-off-by: José Valim <jose.valim@gmail.com>
2011-12-07 13:14:22 +01:00
Rodrigo Flores
4243791b47 Bumping to 1.5.2 2011-11-30 07:19:12 -02:00
Rodrigo Flores
b79c69140d Adding myself to the team! w00t! 2011-11-30 07:19:12 -02:00
José Valim
ede004169c Merge pull request #1462 from lest/timeout-in-method
implement dynamic value for timeout_in as a model method instead of a proc
2011-11-25 00:27:18 -08:00
lest
37dad2172b implement dynamic value for timeout_in as a model method instead of a proc 2011-11-25 11:01:42 +03:00
José Valim
c8c471a128 Merge pull request #1461 from lest/fix-readme-mongodb-version
fix mongodb version required to run tests in readme
2011-11-24 14:48:26 -08:00
lest
f72ff72c0c fix mongodb version required to run tests in readme 2011-11-24 22:10:42 +03:00
Rodrigo Flores
dc3bfac876 Merge pull request #1460 from lest/dynamic-timeout-in
timeout_in option can be a Proc object
2011-11-24 11:10:08 -08:00
lest
426223dda0 timeout_in option can be a Proc object 2011-11-24 21:42:58 +03:00
José Valim
5909d6a0c5 Fix up previous commit and update CHANGELOG. 2011-11-24 09:24:06 +00:00
José Valim
5570929b56 Merge pull request #1458 from kirs/update-attrubutes-as
Added support for rails 3.1 new mass assignment conventions
2011-11-24 00:59:13 -08:00
Kir
5ba6670164 Added support for rails 3.1 new mass assignment conventions 2011-11-24 12:51:03 +04:00
José Valim
589442b09b Update lib/devise/omniauth/config.rb 2011-11-24 08:32:48 +00:00
José Valim
0c67cff2a0 Merge pull request #1455 from AstonJ/readme-installation-update
Adding reminder to restart server in the installation guide
2011-11-23 00:43:48 -08:00
José Valim
9c3d5705b5 Update lib/generators/templates/devise.rb 2011-11-23 08:42:45 +00:00
AstonJ
2f2662e7a5 Adding reminder to restart server in the installation guide 2011-11-23 01:31:20 +00:00
Rodrigo Flores
99040535d7 Bumping to 1.5.1 2011-11-22 13:12:21 -02:00
José Valim
582f00ed95 Devise should not attempt to load OmniAuth strategies. Strategies should be loaded before hand by the developer or explicitly given to Devise. 2011-11-20 19:42:02 +00:00
José Valim
1d2f906af1 Tidy up Gemfile. 2011-11-20 19:22:38 +00:00
José Valim
dfb8ff372d Revert "Fixed require_strategy for google_oauth2 omniauth strategy."
This reverts commit 065963f6d3.
2011-11-20 19:21:08 +00:00
José Valim
1e37e42239 Do not use stored location for sign out. 2011-11-20 19:19:41 +00:00
José Valim
ce1bd142e2 Merge pull request #1438 from hinrik/master
Allow specifying a resource_return_to for sign out
2011-11-20 11:17:44 -08:00
Rafael Mendonça França
35015e5ceb Add me as notification recipient 2011-11-14 16:37:39 -02:00
Rafael Mendonça França
03b56ffd1f Merge pull request #1441 from buggle/master
fixed require for google_oauth2 strategy
2011-11-14 10:24:32 -08:00
Christian Buggle
065963f6d3 Fixed require_strategy for google_oauth2 omniauth strategy. 2011-11-14 19:14:28 +01:00
Hinrik Örn Sigurðsson
9ea7249368 Allow specifying a resource_return_to for sign out
It was impossible to accomplish this by providing a
custom #after_sign_out_path_for in ApplicationController because the
session gets destroyed before it is called. Furthermore,
resource_return_to is now used by default if it exists, so users won't
have to provide a custom #after_sign_out_path_for in that case.
2011-11-13 20:27:08 +00:00
29 changed files with 216 additions and 107 deletions

View File

@@ -10,3 +10,4 @@ notifications:
- jose.valim@plataformatec.com.br
- carlos@plataformatec.com.br
- rodrigo.flores@plataformatec.com.br
- rafael.franca@plataformatec.com.br

View File

@@ -1,3 +1,31 @@
== 1.5.4
* bug fix
* Require string conversion for all values
== 1.5.3
* bug fix
* Ensure delegator converts scope to symbol (by github.com/dmitriy-kiriyenko)
* Ensure passing :format => false to devise_for is not permanent
* Ensure path checker does not check invalid routes
* warden regression
* using warden 1.2.1 with Devise 1.5.3 introduces a regression for some types of functional tests (see github.com/plataformatec/devise/issues/1928). Can peg warden to 1.2.0 in your Gemfile to fix this.
== 1.5.2
* enhancements
* Add support for rails 3.1 new mass assignment conventions (by github.com/kirs)
* Add timeout_in method to Timeoutable, it can be overriden in a model (by github.com/lest)
* bug fix
* OmniAuth error message now shows the proper option (:strategy_class instead of :klass)
== 1.5.1
* bug fix
* Devise should not attempt to load OmniAuth strategies. Strategies should be loaded before hand by the developer or explicitly given to Devise.
== 1.5.0
* enhancements

27
Gemfile
View File

@@ -3,28 +3,25 @@ source "http://rubygems.org"
gemspec
gem "rails", "~> 3.1.0"
gem 'omniauth', '~> 1.0.0'
gem 'omniauth-oauth2', '~> 1.0.0'
gem "omniauth", "~> 1.0.0"
gem "omniauth-oauth2", "~> 1.0.0"
gem "rdoc"
group :test do
gem 'omniauth-facebook'
gem 'omniauth-openid', '~> 1.0.1'
gem "omniauth-facebook"
gem "omniauth-openid", "~> 1.0.1"
gem "webrat", "0.7.2", :require => false
gem "mocha", :require => false
gem "mocha", "~> 0.10.0", :require => false
platforms :mri_18 do
gem "ruby-debug", ">= 0.10.3"
end
end
platforms :jruby do
gem 'activerecord-jdbc-adapter'
gem 'activerecord-jdbcsqlite3-adapter'
gem 'jruby-openssl'
end
platforms :mri_18 do
group :test do
gem "ruby-debug", ">= 0.10.3"
end
gem "activerecord-jdbc-adapter"
gem "activerecord-jdbcsqlite3-adapter"
gem "jruby-openssl"
end
platforms :ruby do

View File

@@ -72,7 +72,7 @@ We hope that you will consider contributing to Devise. Please read this short ov
https://github.com/plataformatec/devise/wiki/Contributing
You will usually want to write tests for your changes. To run the test suite, `cd` into Devise's top-level directory and run `bundle install` and `rake`. For the tests to pass, you will need to have a MongoDB server (version 1.6 or newer) running on your system.
You will usually want to write tests for your changes. To run the test suite, `cd` into Devise's top-level directory and run `bundle install` and `rake`. For the tests to pass, you will need to have a MongoDB server (version 2.0 or newer) running on your system.
== Installation
@@ -88,7 +88,7 @@ The generator will install an initializer which describes ALL Devise's configura
rails generate devise MODEL
Replace MODEL by the class name used for the applications users, it's frequently 'User' but could also be 'Admin'. This will create a model (if one does not exist) and configure it with default Devise modules. Next, you'll usually run db:migrate as the generator will have created a migration file (if your ORM supports them). This generator also configures your config/routes.rb file, continue reading this file to understand exactly what the generator produces and how to use it.
Replace MODEL by the class name used for the applications users, it's frequently 'User' but could also be 'Admin'. This will create a model (if one does not exist) and configure it with default Devise modules. Next, you'll usually run db:migrate as the generator will have created a migration file (if your ORM supports them). This generator also configures your config/routes.rb file, continue reading this file to understand exactly what the generator produces and how to use it. Finally, if your server was already running, then restart it as Rails doesn't automatically load methods from a new gem.
Support for Rails 2.3.x can be found by installing Devise 1.0.x from the v1.0 branch.
@@ -359,6 +359,7 @@ https://github.com/plataformatec/devise/contributors
* José Valim (https://github.com/josevalim)
* Carlos Antônio da Silva (https://github.com/carlosantoniodasilva)
* Rodrigo Flores (https://github.com/rodrigoflores)
== License

View File

@@ -21,13 +21,14 @@ class Devise::SessionsController < ApplicationController
# DELETE /resource/sign_out
def destroy
signed_in = signed_in?(resource_name)
redirect_path = after_sign_out_path_for(resource_name)
Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
set_flash_message :notice, :signed_out if signed_in
# We actually need to hardcode this, as Rails default responder doesn't
# We actually need to hardcode this as Rails default responder doesn't
# support returning empty response on GET request
respond_to do |format|
format.any(*navigational_formats) { redirect_to after_sign_out_path_for(resource_name) }
format.any(*navigational_formats) { redirect_to redirect_path }
format.all do
method = "to_#{request_format}"
text = {}.respond_to?(method) ? {}.send(method) : ""

View File

@@ -207,7 +207,7 @@ module Devise
# scope. Notice that differently from +after_sign_in_path_for+ this method
# receives a symbol with the scope, and not the resource.
#
# By default is the root_path.
# By default it is the root_path.
def after_sign_out_path_for(resource_or_scope)
root_path
end
@@ -236,8 +236,9 @@ module Devise
# after_sign_out_path_for.
def sign_out_and_redirect(resource_or_scope)
scope = Devise::Mapping.find_scope!(resource_or_scope)
redirect_path = after_sign_out_path_for(scope)
Devise.sign_out_all_scopes ? sign_out : sign_out(scope)
redirect_to after_sign_out_path_for(scope)
redirect_to redirect_path
end
# Overwrite Rails' handle unverified request to sign out all scopes,

View File

@@ -8,9 +8,9 @@ module Devise
def failure_app(env)
app = env["warden.options"] &&
(scope = env["warden.options"][:scope]) &&
Devise.mappings[scope].failure_app
Devise.mappings[scope.to_sym].failure_app
app || Devise::FailureApp
end
end
end
end

View File

@@ -23,8 +23,7 @@ module Devise
#
class Mapping #:nodoc:
attr_reader :singular, :scoped_path, :path, :controllers, :path_names,
:class_name, :sign_out_via, :format, :used_routes, :used_helpers,
:constraints, :defaults, :failure_app
:class_name, :sign_out_via, :format, :used_routes, :used_helpers, :failure_app
alias :name :singular
@@ -64,8 +63,6 @@ module Devise
default_failure_app(options)
default_controllers(options)
default_path_names(options)
default_constraints(options)
default_defaults(options)
default_used_route(options)
default_used_helpers(options)
end

View File

@@ -106,17 +106,20 @@ module Devise
# namedscope to filter records while authenticating.
# Example:
#
# def self.find_for_authentication(conditions={})
# conditions[:active] = true
# super
# def self.find_for_authentication(tainted_conditions)
# find_first_by_auth_conditions(tainted_conditions, :active => true)
# end
#
def find_for_authentication(conditions)
find_first_by_auth_conditions(conditions)
# Finally, notice that Devise also queries for users in other scenarios
# besides authentication, for example when retrieving an user to send
# an e-mail for password reset. In such cases, find_for_authentication
# is not called.
def find_for_authentication(tainted_conditions)
find_first_by_auth_conditions(tainted_conditions)
end
def find_first_by_auth_conditions(conditions)
to_adapter.find_first devise_param_filter.filter(conditions)
def find_first_by_auth_conditions(tainted_conditions, opts={})
to_adapter.find_first(devise_param_filter.filter(tainted_conditions).merge(opts))
end
# Find an initialize a record setting an error if it can't be found.
@@ -162,4 +165,4 @@ module Devise
end
end
end
end
end

View File

@@ -51,7 +51,7 @@ module Devise
# Update record attributes when :current_password matches, otherwise returns
# error on :current_password. It also automatically rejects :password and
# :password_confirmation if they are blank.
def update_with_password(params={})
def update_with_password(params, *options)
current_password = params.delete(:current_password)
if params[:password].blank?
@@ -60,7 +60,7 @@ module Devise
end
result = if valid_password?(current_password)
update_attributes(params)
update_attributes(params, *options)
else
self.attributes = params
self.valid?
@@ -84,15 +84,15 @@ module Devise
# super(params)
# end
#
def update_without_password(params={})
def update_without_password(params, *options)
params.delete(:password)
params.delete(:password_confirmation)
result = update_attributes(params)
result = update_attributes(params, *options)
clean_up_passwords
result
end
def after_database_authentication
end
@@ -107,7 +107,7 @@ module Devise
def downcase_keys
(self.class.case_insensitive_keys || []).each { |k| self[k].try(:downcase!) }
end
def strip_whitespace
(self.class.strip_whitespace_keys || []).each { |k| self[k].try(:strip!) }
end

View File

@@ -23,18 +23,22 @@ module Devise
# Checks whether the user session has expired based on configured time.
def timedout?(last_access)
return false if remember_exists_and_not_expired?
last_access && last_access <= self.class.timeout_in.ago
!timeout_in.nil? && last_access && last_access <= timeout_in.ago
end
def timeout_in
self.class.timeout_in
end
private
def remember_exists_and_not_expired?
return false unless respond_to?(:remember_expired?)
remember_created_at && !remember_expired?
end
module ClassMethods
Devise::Models.config(self, :timeout_in)
end

View File

@@ -1,6 +1,6 @@
begin
require "omniauth"
require 'omniauth/version'
require "omniauth/version"
rescue LoadError => e
warn "Could not load 'omniauth'. Please ensure you have the omniauth gem >= 1.0.0 installed and listed in your Gemfile."
raise

View File

@@ -1,23 +1,28 @@
module Devise
module OmniAuth
class StrategyNotFound < NameError
def initialize(strategy)
@strategy = strategy
super("Could not find a strategy with name `#{strategy}'. " \
"Please ensure it is required or explicitly set it using the :strategy_class option.")
end
end
class Config
attr_accessor :strategy
attr_reader :args, :options, :provider
attr_reader :args, :options, :provider, :strategy_name
def initialize(provider, args)
@provider = provider
@args = args
@strategy = nil
@options = @args.last.is_a?(Hash) ? @args.last : {}
end
# open_id strategy can have configurable name
def strategy_name
options[:name] || @provider
@provider = provider
@args = args
@options = @args.last.is_a?(Hash) ? @args.last : {}
@strategy = nil
@strategy_name = options[:name] || @provider
@strategy_class = options.delete(:strategy_class)
end
def strategy_class
find_strategy || require_strategy
@strategy_class ||= find_strategy || autoload_strategy
end
def find_strategy
@@ -27,20 +32,14 @@ module Devise
end
end
def require_strategy
if [:facebook, :github, :twitter].include?(provider.to_sym)
require "omniauth/strategies/#{provider}"
elsif options[:require]
require options[:require]
else
require "omniauth-#{provider}"
end
find_strategy || autoload_strategy
end
def autoload_strategy
::OmniAuth::Strategies.const_get(::OmniAuth::Utils.camelize(provider.to_s))
name = ::OmniAuth::Utils.camelize(provider.to_s)
if ::OmniAuth::Strategies.const_defined?(name)
::OmniAuth::Strategies.const_get(name)
else
raise StrategyNotFound, name
end
end
end
end
end
end

View File

@@ -33,9 +33,8 @@ module Devise
private
# Determine which values should be transformed to string or passed as-is to the query builder underneath
def param_requires_string_conversion?(value)
true unless value.is_a?(TrueClass) || value.is_a?(FalseClass) || value.is_a?(Fixnum)
true
end
end
end

View File

@@ -12,7 +12,8 @@ module Devise
end
def signing_out?
@current_path == send("destroy_#{@scope}_session_path")
route = "destroy_#{@scope}_session_path"
respond_to?(route) && @current_path == send(route)
end
end
end

View File

@@ -185,7 +185,7 @@ module ActionDispatch::Routing
options[:path_names] = (@scope[:path_names] || {}).merge(options[:path_names] || {})
options[:constraints] = (@scope[:constraints] || {}).merge(options[:constraints] || {})
options[:defaults] = (@scope[:defaults] || {}).merge(options[:defaults] || {})
@scope[:options] = (@scope[:options] || {}).merge({:format => false}) if options[:format] == false
options[:options] = (@scope[:options] || {}).merge({:format => false}) if options[:format] == false
resources.map!(&:to_sym)
@@ -208,7 +208,7 @@ module ActionDispatch::Routing
devise_scope mapping.name do
yield if block_given?
with_devise_exclusive_scope mapping.fullpath, mapping.name, mapping.constraints, mapping.defaults do
with_devise_exclusive_scope mapping.fullpath, mapping.name, options do
routes.each { |mod| send("devise_#{mod}", mapping, mapping.controllers) }
end
end
@@ -368,12 +368,15 @@ module ActionDispatch::Routing
@scope[:path] = path
end
def with_devise_exclusive_scope(new_path, new_as, new_constraints, new_defaults) #:nodoc:
old_as, old_path, old_module, old_constraints, old_defaults = @scope[:as], @scope[:path], @scope[:module], @scope[:constraints], @scope[:defaults]
@scope[:as], @scope[:path], @scope[:module], @scope[:constraints], @scope[:defaults] = new_as, new_path, nil, new_constraints, new_defaults
def with_devise_exclusive_scope(new_path, new_as, options) #:nodoc:
old_as, old_path, old_module, old_constraints, old_defaults, old_options =
*@scope.values_at(:as, :path, :module, :constraints, :defaults, :options)
@scope[:as], @scope[:path], @scope[:module], @scope[:constraints], @scope[:defaults], @scope[:options] =
new_as, new_path, nil, *options.values_at(:constraints, :defaults, :options)
yield
ensure
@scope[:as], @scope[:path], @scope[:module], @scope[:constraints], @scope[:defaults] = old_as, old_path, old_module, old_constraints, old_defaults
@scope[:as], @scope[:path], @scope[:module], @scope[:constraints], @scope[:defaults], @scope[:options] =
old_as, old_path, old_module, old_constraints, old_defaults, old_options
end
def raise_no_devise_method_error!(klass) #:nodoc:

View File

@@ -1,3 +1,3 @@
module Devise
VERSION = "1.5.0".freeze
VERSION = "1.5.4".freeze
end

View File

@@ -1,5 +1,5 @@
# Use this hook to configure devise mailer, warden hooks and so forth. The first
# four configuration values can also be set straight in your models.
# Use this hook to configure devise mailer, warden hooks and so forth.
# Many of these configuration options can be set straight in your model.
Devise.setup do |config|
# ==> Mailer Configuration
# Configure the e-mail address which will be shown in Devise::Mailer,

19
test/delegator_test.rb Normal file
View File

@@ -0,0 +1,19 @@
require 'test_helper'
class DelegatorTest < ActiveSupport::TestCase
def delegator
Devise::Delegator.new
end
test 'failure_app returns default failure app if no warden options in env' do
assert_equal Devise::FailureApp, delegator.failure_app({})
end
test 'failure_app returns default failure app if no scope in warden options' do
assert_equal Devise::FailureApp, delegator.failure_app({"warden.options" => {}})
end
test 'failure_app returns associated failure app by scope in the given environment' do
assert_kind_of Proc, delegator.failure_app({"warden.options" => {:scope => "manager"}})
end
end

View File

@@ -407,7 +407,7 @@ class AuthenticationOthersTest < ActionController::IntegrationTest
test 'sign in stub in xml format' do
get new_user_session_path(:format => 'xml')
assert_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>\n <email></email>\n <password nil=\"true\"></password>\n</user>\n", response.body
assert_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>\n <email></email>\n <password nil=\"true\"/>\n</user>\n", response.body
end
test 'sign in stub in json format' do

View File

@@ -0,0 +1,9 @@
require 'test_helper'
class AuthenticatableTest < ActiveSupport::TestCase
test 'find_first_by_auth_conditions allows custom filtering parameters' do
user = User.create!(:email => "example@example.com", :password => "123456")
assert_equal User.find_first_by_auth_conditions({ :email => "example@example.com" }), user
assert_equal User.find_first_by_auth_conditions({ :email => "example@example.com" }, :id => user.id + 1), nil
end
end

View File

@@ -11,7 +11,7 @@ class DatabaseAuthenticatableTest < ActiveSupport::TestCase
user.save!
assert_equal email.downcase, user.email
end
test 'should remove whitespace from strip whitespace keys when saving' do
# strip_whitespace_keys is set to :email by default.
email = ' foo@bar.com '
@@ -23,9 +23,9 @@ class DatabaseAuthenticatableTest < ActiveSupport::TestCase
end
test "param filter should not convert booleans and integer to strings" do
conditions = { 'login' => 'foo@bar.com', "bool1" => true, "bool2" => false, "fixnum" => 123, "will_be_converted" => (1..10) }
conditions = { "login" => "foo@bar.com", "bool1" => true, "bool2" => false, "fixnum" => 123, "will_be_converted" => (1..10) }
conditions = Devise::ParamFilter.new([], []).filter(conditions)
assert_equal( { 'login' => 'foo@bar.com', "bool1" => true, "bool2" => false, "fixnum" => 123, "will_be_converted" => "1..10" }, conditions)
assert_equal( { "login" => "foo@bar.com", "bool1" => "true", "bool2" => "false", "fixnum" => "123", "will_be_converted" => "1..10" }, conditions)
end
test 'should respond to password and password confirmation' do
@@ -86,7 +86,14 @@ class DatabaseAuthenticatableTest < ActiveSupport::TestCase
:password => 'pass321', :password_confirmation => 'pass321')
assert user.reload.valid_password?('pass321')
end
test 'should update password with valid current password and :as option' do
user = create_user
assert user.update_with_password(:current_password => '123456',
:password => 'pass321', :password_confirmation => 'pass321', :as => :admin)
assert user.reload.valid_password?('pass321')
end
test 'should add an error to current password when it is invalid' do
user = create_user
assert_not user.update_with_password(:current_password => 'other',
@@ -139,6 +146,12 @@ class DatabaseAuthenticatableTest < ActiveSupport::TestCase
assert_equal 'new@example.com', user.email
end
test 'should update the user without password with :as option' do
user = create_user
user.update_without_password(:email => 'new@example.com', :as => :admin)
assert_equal 'new@example.com', user.email
end
test 'should not update password without password' do
user = create_user
user.update_without_password(:password => 'pass321', :password_confirmation => 'pass321')

View File

@@ -14,6 +14,20 @@ class TimeoutableTest < ActiveSupport::TestCase
assert_not new_user.timedout?(nil)
end
test 'should use timeout_in method' do
user = new_user
user.instance_eval { def timeout_in; 10.minutes end }
assert user.timedout?(12.minutes.ago)
assert_not user.timedout?(8.minutes.ago)
end
test 'should not be expired when timeout_in method returns nil' do
user = new_user
user.instance_eval { def timeout_in; nil end }
assert_not user.timedout?(10.hours.ago)
end
test 'fallback to Devise config option' do
swap Devise, :timeout_in => 1.minute do
user = new_user

View File

@@ -1,8 +1,8 @@
require 'test_helper'
class OmniAuthConfigTest < ActiveSupport::TestCase
setup do
$: << File.dirname(__FILE__)
class MyStrategy
include OmniAuth::Strategy
end
test 'strategy_name returns provider if no options given' do
@@ -42,15 +42,16 @@ class OmniAuthConfigTest < ActiveSupport::TestCase
assert_equal UnNamedTestStrategy, config.strategy_class
end
test 'attempts to load an as-yet not loaded plugin' do
config = Devise::OmniAuth::Config.new :my_strategy, [{}]
config_class = config.strategy_class
assert_equal MyStrategy, config_class
test 'raises an error if strategy cannot be found' do
config = Devise::OmniAuth::Config.new :my_other_strategy, [{}]
assert_raise Devise::OmniAuth::StrategyNotFound do
config.strategy_class
end
end
test 'allows the user to define a custom require path' do
config = Devise::OmniAuth::Config.new :my_other_strategy, [{:require => 'my_other_strategy'}]
config = Devise::OmniAuth::Config.new :my_strategy, [{:strategy_class => MyStrategy}]
config_class = config.strategy_class
assert_equal MyOtherStrategy, config_class
assert_equal MyStrategy, config_class
end
end

View File

@@ -1,5 +0,0 @@
require 'omniauth'
class MyOtherStrategy
include OmniAuth::Strategy
end

View File

@@ -1,5 +0,0 @@
require 'omniauth'
class MyStrategy
include OmniAuth::Strategy
end

21
test/path_checker_test.rb Normal file
View File

@@ -0,0 +1,21 @@
require 'test_helper'
class PathCheckerTest < ActiveSupport::TestCase
test 'check if sign out path matches' do
path_checker = Devise::PathChecker.new({"PATH_INFO" => "/users/sign_out"}, :user)
assert path_checker.signing_out?
path_checker = Devise::PathChecker.new({"PATH_INFO" => "/users/sign_in"}, :user)
assert_not path_checker.signing_out?
end
test 'considers script name' do
path_checker = Devise::PathChecker.new({"SCRIPT_NAME" => "/users", "PATH_INFO" => "/sign_out"}, :user)
assert path_checker.signing_out?
end
test 'ignores invalid routes' do
path_checker = Devise::PathChecker.new({"PATH_INFO" => "/users/sign_in"}, :omg)
assert_not path_checker.signing_out?
end
end

View File

@@ -1,3 +1,6 @@
require "omniauth-facebook"
require "omniauth-openid"
# Use this hook to configure devise mailer, warden hooks and so forth. The first
# four configuration values can also be set straight in your models.
Devise.setup do |config|

View File

@@ -225,6 +225,10 @@ class CustomizedRoutingTest < ActionController::TestCase
assert_recognizes({:controller => 'devise/unlocks', :action => 'show'}, {:path => '/htmlonly_users/unlock.xml', :method => :get})
end
end
test 'map with format false is not permanent' do
assert_equal "/set.xml", @routes.url_helpers.set_path(:xml)
end
end
class ScopedRoutingTest < ActionController::TestCase