accounts_controller_spec.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:9k
源码类别:

Ajax

开发平台:

Others

  1. require File.dirname(__FILE__) + '/../spec_helper'
  2. describe AccountsController do
  3.   before(:each) do
  4.     User.salt = 'change-me'
  5.   end
  6.   describe "A successful login with 'Remember me' checked" do
  7.     def make_request
  8.       post 'login', {:user => {:login => 'bob', :password => 'test'},
  9.         :remember_me => '1'}
  10.     end
  11.     it 'should not cause password to change' do
  12.       User.authenticate('bob', 'test').should == users(:bob)
  13.       make_request
  14.       request.session[:user_id].should == users(:bob).id
  15.       User.authenticate('bob', 'test').should == users(:bob)
  16.     end
  17.   end
  18. end
  19. describe 'A successfully authenticated login' do
  20.   controller_name :accounts
  21.   before(:each) do
  22.     User.stub!(:salt).and_return('change-me')
  23.   end
  24.   def make_request
  25.     post 'login', {:user => {:login => 'bob', :password => 'test'}}
  26.   end
  27.   it 'session gets a user' do
  28.     make_request
  29.     request.session[:user_id].should == users(:bob).id
  30.   end
  31.   it 'sets typo_user_profile cookie' do
  32.     make_request
  33.     cookies[:typo_user_profile].should == 'admin'
  34.   end
  35.   it 'redirects to /bogus/location' do
  36.     request.session[:return_to] = '/bogus/location'
  37.     make_request
  38.     response.should redirect_to('/bogus/location')
  39.   end
  40.   
  41.   it 'redirects to /admin if no return' do
  42.     make_request
  43.     response.should redirect_to(:controller => 'admin')
  44.   end
  45.   it 'redirects to /admin if no return and your are logged' do
  46.     session[:user_id] = session[:user] = users(:bob).id
  47.     make_request
  48.     response.should redirect_to(:controller => 'admin')
  49.   end
  50.   it "should redirect to signup if no users" do
  51.     User.stub!(:count).and_return(0)
  52.     make_request
  53.     response.should redirect_to('/accounts/signup')
  54.   end  
  55. end
  56. describe 'User is inactive' do
  57.   controller_name :accounts
  58.   before(:each) do
  59.     User.stub!(:authenticate).and_return(nil)
  60.     User.stub!(:count).and_return(1)
  61.   end
  62.  
  63.   def make_request
  64.     post 'login', {:user => {:login => 'inactive', :password => 'longtest'}}
  65.   end
  66.   
  67.   it 'no user id goes in the session' do
  68.     make_request
  69.     response.session[:user_id].should be_nil
  70.   end
  71.   
  72.   it 'login should == "inactive"' do
  73.     make_request
  74.     assigns[:login].should == 'inactive'
  75.   end
  76.   it 'typo_user_profile cookie should be blank' do
  77.     make_request
  78.     cookies[:typo_user_profile].should be_blank
  79.   end
  80.   it 'should render login action' do
  81.     make_request
  82.     response.should render_template(:login)
  83.   end
  84.   
  85. end
  86. describe 'Login with nil user and password' do
  87.   controller_name :accounts
  88.   before(:each) do
  89.     User.stub!(:count).and_return(1)
  90.   end
  91.   
  92.   def make_request
  93.    post 'login', {:user => {:login => nil, :password => nil}}
  94.   end
  95.   it 'should render login action' do
  96.     make_request
  97.     response.should render_template(:login)
  98.   end
  99. end
  100. describe 'Login gets the wrong password' do
  101.   controller_name :accounts
  102.   before(:each) do
  103.     User.stub!(:authenticate).and_return(nil)
  104.     User.stub!(:count).and_return(1)
  105.   end
  106.   def make_request
  107.    post 'login', {:user => {:login => 'bob', :password => 'test'}}
  108.   end
  109.   it 'no user in goes in the session' do
  110.     make_request
  111.     response.session[:user_id].should be_nil
  112.   end
  113.   it 'login should == "bob"' do
  114.     make_request
  115.     assigns[:login].should == 'bob'
  116.   end
  117.   it 'typo_user_profile cookie should be blank' do
  118.     make_request
  119.     cookies[:typo_user_profile].should be_blank
  120.   end
  121.   it 'should render login action' do
  122.     make_request
  123.     response.should render_template(:login)
  124.   end
  125. end
  126. describe 'GET /login' do
  127.   controller_name :accounts
  128.   before(:each) do
  129.     User.stub!(:count).and_return(1)
  130.   end
  131.   it 'should render action :login' do
  132.     get 'login'
  133.     response.should render_template(:login)
  134.     assigns[:login].should be_nil
  135.   end
  136. end
  137. describe 'GET /login with 0 existing users' do
  138.   controller_name :accounts
  139.   before(:each) do
  140.     User.stub!(:count).and_return(0)
  141.   end
  142.   it 'should render action :signup' do
  143.     get 'login'
  144.     response.should redirect_to(:action => 'signup')
  145.     assigns[:login].should be_nil
  146.   end
  147.   it 'should render :signup' do
  148.     get 'recover_password'
  149.     response.should redirect_to(:action => 'signup')
  150.   end
  151. end
  152. describe 'GET signup and >0 existing user' do
  153.   controller_name :accounts
  154.   before(:each) do
  155.     User.stub!(:count).and_return(1)
  156.   end
  157.   it 'should redirect to login' do
  158.     get 'signup'
  159.     response.should redirect_to(:action => 'login')
  160.   end
  161. end
  162. describe 'POST signup and >0 existing user' do
  163.   controller_name :accounts
  164.   before(:each) do
  165.     User.stub!(:count).and_return(1)
  166.   end
  167.   it 'should redirect to login' do
  168.     post 'signup', params
  169.     response.should redirect_to(:action => 'login')
  170.   end
  171.   def params
  172.     {'user' =>  {'login' => 'newbob'}}
  173.   end
  174. end
  175. describe 'GET signup with 0 existing users' do
  176.   controller_name :accounts
  177.   before(:each) do
  178.     User.stub!(:count).and_return(0)
  179.     @user = mock("user")
  180.     @user.stub!(:reload).and_return(@user)
  181.     User.stub!(:new).and_return(@user)
  182.   end
  183.   it 'sets @user' do
  184.     get 'signup'
  185.     assigns[:user].should == @user
  186.   end
  187.   it 'renders action signup' do
  188.     get 'signup'
  189.     response.should render_template(:signup)
  190.   end
  191. end
  192. describe 'GET signup with 0 existing users and unconfigured blog' do
  193.   controller_name :accounts
  194.   before(:each) do
  195.     Blog.delete_all
  196.     @blog = Blog.new.save
  197.     User.delete_all
  198.   end
  199.   it 'redirects to setup' do
  200.     get 'signup'
  201.     response.should redirect_to(:controller => 'setup', :action => 'index')
  202.   end
  203. end
  204. describe 'POST signup with 0 existing users and unconfigured blog' do
  205.   controller_name :accounts
  206.   before(:each) do
  207.     Blog.delete_all
  208.     @blog = Blog.new.save
  209.     User.delete_all
  210.   end
  211.   it 'redirects to setup' do
  212.     post 'signup', params
  213.     response.should redirect_to(:controller => 'setup', :action => 'index')
  214.   end
  215.   
  216.   def params
  217.     {'user' =>  {'login' => 'newbob', 'password' => 'newpassword',
  218.         'password_confirmation' => 'newpassword'}}
  219.   end
  220. end
  221. describe 'GET login with 0 existing users and unconfigured blog' do
  222.   controller_name :accounts
  223.   before(:each) do
  224.     Blog.delete_all
  225.     @blog = Blog.new.save
  226.     User.delete_all
  227.   end
  228.   it 'redirects to setup' do
  229.     get 'login'
  230.     response.should redirect_to(:controller => 'setup', :action => 'index')
  231.   end
  232. end
  233. describe 'POST login with 0 existing users and unconfigured blog' do
  234.   controller_name :accounts
  235.   before(:each) do
  236.     Blog.delete_all
  237.     @blog = Blog.new.save
  238.     User.delete_all
  239.   end
  240.   it 'redirects to setup' do
  241.     post 'login', params
  242.     response.should redirect_to(:controller => 'setup', :action => 'index')
  243.   end
  244.   
  245.   def params
  246.     {'user' =>  {'login' => 'newbob', 'password' => 'newpassword'}}
  247.   end
  248. end
  249. describe 'POST signup with 0 existing users' do
  250.   controller_name :accounts
  251.   before(:each) do
  252.     User.stub!(:count).and_return(0)
  253.     @user = mock_model(User)
  254.     @user.stub!(:login).and_return('newbob')
  255.     @user.stub!(:password=).and_return(true)
  256.     @user.stub!(:password).and_return('foo')
  257.     @user.stub!(:name=).and_return(true)
  258.     User.stub!(:new).and_return(@user)
  259.     User.stub!(:authenticate).and_return(@user)
  260.     @user.stub!(:save).and_return(@user)
  261.   end
  262.   it 'creates and saves a user' do
  263.     User.should_receive(:new).and_return(@user)
  264.     @user.should_receive(:save).and_return(@user)
  265.     post 'signup', params
  266.     assigns[:user].should == @user
  267.   end
  268.   it 'redirects to /account/confirm' do
  269.     post 'signup', params
  270.     response.should redirect_to(:action => 'confirm')
  271.   end
  272.   it 'session gets a user' do
  273.     post 'signup', params
  274.     request.session[:user_id].should == @user.id
  275.   end
  276.   def params
  277.     {'user' =>  {'login' => 'newbob', 'password' => 'newpassword',
  278.         'password_confirmation' => 'newpassword'}}
  279.   end
  280. end
  281. describe 'User is logged in' do
  282.   controller_name :accounts
  283.   before(:each) do
  284.     @user = mock_model(User)
  285.     # The AccountsController class uses session[:user_id], and the
  286.     # Typo LoginSystem uses session[:user].  So we need to set both of
  287.     # these up correctly.  I'm not sure why the duplication exists.
  288.     session[:user_id] = @user.id
  289.     @controller.send(:current_user=, @user)
  290.     User.should_receive(:find) 
  291.       .with(:first, :conditions => { :id => @user.id }) 
  292.       .any_number_of_times 
  293.       .and_return(@user)
  294.     cookies[:typo_user_profile] = 'admin'
  295.   end
  296.   it 'trying to log in once again redirects to admin/dashboard/index' do
  297.     get 'login'
  298.     response.should redirect_to(:controller => 'admin')
  299.   end
  300.   it 'logging out deletes the session[:user_id]' do
  301.     @user.should_receive(:forget_me)
  302.     get 'logout'
  303.     session[:user_id].should be_blank
  304.   end
  305.   it 'redirects to the login action' do
  306.     @user.should_receive(:forget_me)
  307.     get 'logout'
  308.     response.should redirect_to(:action => 'login')
  309.   end
  310.   it 'logging out deletes cookies containing credentials' do
  311.     @user.should_receive(:forget_me)
  312.     get 'logout'
  313.     cookies[:auth_token].should == nil
  314.     cookies[:typo_user_profile].should == nil
  315.   end
  316. end
  317. describe 'User has lost his password and send a good email' do
  318.   controller_name :accounts
  319.   
  320.   before(:each) do
  321.     @user = mock_model(User, :new_record? => false, :reload => @user)
  322.     @user.stub!(:profile).and_return(Profile.find_by_label('admin'))
  323.     User.stub!(:find_by_login).with('tobi').and_return(@user)
  324.     User.stub!(:count).and_return(1)
  325.   end
  326.   
  327.   it 'should render recover_password' do
  328.     get 'recover_password'
  329.     
  330.     response.should render_template('recover_password')
  331.   end
  332.   
  333.   it 'should render login' do
  334.     make_request
  335.     
  336.     response.should redirect_to(:action => 'login')
  337.   end
  338.   
  339.   def make_request
  340.    post 'recover_password', {:user => {:login => 'tobi'}}
  341.   end
  342. end