1
0
Fork 0
mirror of https://github.com/heartcombo/devise.git synced 2022-11-09 12:18:31 -05:00
heartcombo--devise/test/integration/rememberable_test.rb

179 lines
5.5 KiB
Ruby
Raw Normal View History

require 'test_helper'
2010-01-14 09:47:14 -05:00
class RememberMeTest < Devise::IntegrationTest
2010-01-14 09:47:14 -05:00
def create_user_and_remember(add_to_token='')
user = create_user
user.remember_me!
raw_cookie = User.serialize_into_cookie(user).tap { |a| a[1] << add_to_token }
cookies['remember_user_token'] = generate_signed_cookie(raw_cookie)
2010-01-14 09:47:14 -05:00
user
end
def generate_signed_cookie(raw_cookie)
request = Devise.rails5? ? ActionDispatch::TestRequest.create : ActionDispatch::TestRequest.new
request.cookie_jar.signed['raw_cookie'] = raw_cookie
request.cookie_jar['raw_cookie']
end
def signed_cookie(key)
controller.send(:cookies).signed[key]
end
def cookie_expires(key)
cookie = response.headers["Set-Cookie"].split("\n").grep(/^#{key}/).first
expires = cookie.split(";").map(&:strip).grep(/^expires=/).first
Time.parse(expires).utc
end
2013-12-02 04:02:17 -05:00
test 'do not remember the user if they have not checked remember me option' do
2013-04-18 00:54:38 -04:00
sign_in_as_user
assert_nil request.cookies["remember_user_cookie"]
2010-01-14 09:47:14 -05:00
end
test 'handle unverified requests gets rid of caches' do
2014-02-25 11:42:55 -05:00
swap ApplicationController, allow_forgery_protection: true do
post exhibit_user_url(1)
assert_not warden.authenticated?(:user)
create_user_and_remember
post exhibit_user_url(1)
assert_equal "User is not authenticated", response.body
assert_not warden.authenticated?(:user)
end
end
test 'handle unverified requests does not create cookies on sign in' do
2014-02-25 11:42:55 -05:00
swap ApplicationController, allow_forgery_protection: true do
get new_user_session_path
assert request.session[:_csrf_token]
post user_session_path, params: {
authenticity_token: "oops",
user: { email: "jose.valim@gmail.com", password: "123456", remember_me: "1" }
}
assert_not warden.authenticated?(:user)
assert_not request.cookies['remember_user_token']
end
end
2010-01-14 09:47:14 -05:00
test 'generate remember token after sign in' do
2014-02-25 11:42:55 -05:00
sign_in_as_user remember_me: true
assert request.cookies['remember_user_token']
end
test 'generate remember token after sign in setting cookie options' do
# We test this by asserting the cookie is not sent after the redirect
# since we changed the domain. This is the only difference with the
# previous test.
2014-02-25 11:42:55 -05:00
swap Devise, rememberable_options: { domain: "omg.somewhere.com" } do
sign_in_as_user remember_me: true
assert_nil request.cookies["remember_user_token"]
end
end
test 'generate remember token with a custom key' do
2014-02-25 11:42:55 -05:00
swap Devise, rememberable_options: { key: "v1lat_token" } do
sign_in_as_user remember_me: true
assert request.cookies["v1lat_token"]
end
2010-01-14 09:47:14 -05:00
end
test 'generate remember token after sign in setting session options' do
begin
Rails.configuration.session_options[:domain] = "omg.somewhere.com"
2014-02-25 11:42:55 -05:00
sign_in_as_user remember_me: true
assert_nil request.cookies["remember_user_token"]
ensure
Rails.configuration.session_options.delete(:domain)
end
end
2010-01-14 09:47:14 -05:00
test 'remember the user before sign in' do
user = create_user_and_remember
get users_path
assert_response :success
assert warden.authenticated?(:user)
assert warden.user(:user) == user
2011-05-23 12:22:32 -04:00
assert_match /remember_user_token[^\n]*HttpOnly/, response.headers["Set-Cookie"], "Expected Set-Cookie header in response to set HttpOnly flag on remember_user_token cookie."
2010-01-14 09:47:14 -05:00
end
2013-12-02 04:02:17 -05:00
test 'remember the user before sign up and redirect them to their home' do
2013-04-18 00:54:38 -04:00
create_user_and_remember
get new_user_registration_path
assert warden.authenticated?(:user)
assert_redirected_to root_path
end
test 'does not extend remember period through sign in' do
2014-02-25 11:42:55 -05:00
swap Devise, extend_remember_period: true, remember_for: 1.year do
user = create_user
user.remember_me!
user.remember_created_at = old = 10.days.ago
user.save
2014-02-25 11:42:55 -05:00
sign_in_as_user remember_me: true
user.reload
assert warden.user(:user) == user
2010-07-26 14:25:02 -04:00
assert_equal old.to_i, user.remember_created_at.to_i
end
end
test 'do not remember other scopes' do
2013-04-18 00:54:38 -04:00
create_user_and_remember
get root_path
assert_response :success
assert warden.authenticated?(:user)
assert_not warden.authenticated?(:admin)
end
2010-01-14 09:47:14 -05:00
test 'do not remember with invalid token' do
2013-04-18 00:54:38 -04:00
create_user_and_remember('add')
2010-01-14 09:47:14 -05:00
get users_path
assert_not warden.authenticated?(:user)
assert_redirected_to new_user_session_path
2010-01-14 09:47:14 -05:00
end
test 'do not remember with expired token' do
2013-04-18 00:54:38 -04:00
create_user_and_remember
swap Devise, remember_for: 0.days do
get users_path
assert_not warden.authenticated?(:user)
assert_redirected_to new_user_session_path
end
2010-01-14 09:47:14 -05:00
end
test 'do not remember the user anymore after forget' do
2013-04-18 00:54:38 -04:00
create_user_and_remember
2010-01-14 09:47:14 -05:00
get users_path
assert warden.authenticated?(:user)
2010-01-14 09:47:14 -05:00
get destroy_user_session_path
assert_not warden.authenticated?(:user)
assert_nil warden.cookies['remember_user_token']
get users_path
assert_not warden.authenticated?(:user)
2010-01-14 09:47:14 -05:00
end
test 'changing user password expires remember me token' do
2010-01-14 09:47:14 -05:00
user = create_user_and_remember
user.password = "another_password"
user.password_confirmation = "another_password"
user.save!
2010-01-14 09:47:14 -05:00
get users_path
assert_not warden.authenticated?(:user)
end
test 'valid sign in calls after_remembered callback' do
user = create_user_and_remember
User.expects(:serialize_from_cookie).returns user
user.expects :after_remembered
get new_user_registration_path
end
end