Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 29th, 2012  |  syntax: None  |  size: 2.51 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How do I get Devise session#create test to pass
  2. class SessionsControllerTest < ActionController::TestCase
  3.   setup do
  4.     @request.env["devise.mapping"] = Devise.mappings[:user]
  5.     @u = Factory :user, :password => :mypass, :password_confirmation => :mypass
  6.   end
  7.   test 'log in page loads' do
  8.     get :new
  9.     assert :success
  10.   end
  11.   test 'log in with devise password' do
  12.  
  13.     post :create, :user => {:email => @u.email, :password => 'mypass'}
  14.     ap session
  15.   end
  16.  
  17. end
  18.        
  19. Loaded suite test/functional/sessions_controller_test
  20. Started
  21. .{
  22.         "action" => "create",
  23.         "locale" => "en",
  24.     "controller" => "sessions",
  25.           "user" => {
  26.         "password" => "mypass",
  27.            "email" => "458286@email.com"
  28.     }
  29. }
  30. {
  31.     "flash" => {
  32.         :alert => "Invalid email or password."
  33.     }
  34. }
  35. .
  36. Finished in 0.49123 seconds.
  37.        
  38. #this is an extension of the devise controller for sessions
  39. class SessionsController < Devise::SessionsController
  40.   before_filter :set_title_h1, :only => :new
  41.   before_filter :debug, :only => :create
  42.   before_filter :old_password_system_fix, :only => :create
  43.  
  44.   private
  45.  
  46.   def set_title_h1
  47.     @layout[:show_h1] = false
  48.     title 'Sign in Or Register'
  49.   end
  50.   def after_sign_in_path_for(resource)
  51.   #override Devise default sign in path /opt/local/lib/ruby/gems/1.8/gems/devise-1.1.2/lib/devise/controllers/helpers.rb
  52.     #edit_user_registration_path
  53.     '/en/main/index' #forces locale to be defined
  54.   end
  55.  
  56.   def after_sign_out_path_for(resource)
  57.   #override Devise default sign out path /opt/local/lib/ruby/gems/1.8/gems/devise-1.1.2/lib/devise/controllers/helpers.rb
  58.     main_index_path
  59.   end
  60.   def old_password_system_fix
  61.   #purpose is to bring old users into the new system by setting their old password to the new format
  62.  
  63.     require 'digest/md5'
  64.  
  65.     email = params[:user][:email]
  66.     pw    = params[:user][:password]
  67.  
  68.     #get user
  69.     u = User.find_by_email email
  70.  
  71.     return if u.nil?
  72.  
  73.     #if they don't have a devise-style pw, authenticate with old
  74.     if u.encrypted_password.blank? && u.old_password.present?
  75.  
  76.       #if [params pw] == md5 [old pw] then create devise-style pw & salt, store it, and let them through to devise auth action
  77.       if u.old_password == Digest::MD5.hexdigest(pw)
  78.  
  79.         set_devise_style_pw(u, pw)
  80.  
  81.       #if no match, give "invalid email or pw" message.
  82.       else
  83.         #flash[:notice] = "Sign in failed."
  84.         flash[:notice] = t 'devise.failure.invalid'
  85.         #render :new
  86.         redirect_to new_user_session_path
  87.       end
  88.  
  89.     end
  90.   end
  91.   def debug
  92.     ap params
  93.   end
  94. end