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

Ajax

开发平台:

Others

  1. require File.dirname(__FILE__) + '/../spec_helper'
  2. describe User do
  3.   describe 'Factory Girl' do
  4.     it 'should user factory valid' do
  5.       Factory.create(:user).should be_valid
  6.       Factory.build(:user).should be_valid
  7.     end
  8.     it 'should multiple user factory valid' do
  9.       Factory.create(:user).should be_valid
  10.       Factory.create(:user).should be_valid
  11.     end
  12.   end
  13. end
  14. describe 'With the contents and users fixtures loaded' do
  15.   before(:each) do
  16.     User.stub!(:salt).and_return('change-me')
  17.   end
  18.   it 'Calling User.authenticate with a valid user/password combo returns a user' do
  19.     User.authenticate('bob', 'test').should == users(:bob)
  20.   end
  21.   it 'User.authenticate(user,invalid) returns nil' do
  22.     User.authenticate('bob', 'wrong password').should be_nil
  23.   end
  24.   it 'User.authenticate(inactive,valid) returns nil' do
  25.     User.authenticate('inactive', 'longtest').should be_nil
  26.   end
  27.   it 'User.authenticate(invalid,whatever) returns nil' do
  28.     User.authenticate('userwhodoesnotexist', 'what ever').should be_nil
  29.   end
  30.   it 'The various article finders work appropriately' do
  31.     users(:tobi).articles.size.should == 8
  32. #    User.find(1).articles.find_published.size.should == Article.find(:all, :conditions => {:published => true}).size
  33.     users(:tobi).articles.published.size.should == 7
  34.   end
  35.   it 'authenticate? works as expected' do
  36.     User.should be_authenticate('bob', 'test')
  37.     User.should_not be_authenticate('bob', 'duff password')
  38.   end
  39. end
  40. describe 'With a new user' do
  41.   before(:each) do
  42.     @user = User.new :login => 'not_bob'
  43.     @user.email = 'typo@typo.com'
  44.     set_password 'a secure password'
  45.   end
  46.   describe "the password" do
  47.     it 'can be just right' do
  48.       set_password 'Just right'
  49.       @user.should be_valid
  50.     end
  51.     { 'too short' => 'x',
  52.       'too long' => 'repetitivepass' * 10,
  53.       'empty' => ''
  54.     }.each do |problematic, password|
  55.       it "cannot be #{problematic}" do
  56.         set_password password
  57.         @user.should_not be_valid
  58.         @user.errors.should be_invalid('password')
  59.       end
  60.     end
  61.     it "has to match confirmation" do
  62.       @user.password = "foo"
  63.       @user.password_confirmation = "bar"
  64.       @user.should_not be_valid
  65.       @user.errors.should be_invalid('password')
  66.     end
  67.   end
  68.   describe 'the login' do
  69.     it 'can be just right' do
  70.       @user.login = 'okbob'
  71.       @user.should be_valid
  72.     end
  73.     { 'too short' => 'x',
  74.       'too long' => 'repetitivepass' * 10,
  75.       'empty' => ''
  76.     }.each do |problematic, login|
  77.       it "cannot be #{problematic}" do
  78.         @user.login = login
  79.         @user.should_not be_valid
  80.         @user.errors.should be_invalid('login')
  81.       end
  82.     end
  83.   end
  84.   it 'email cannot be blank' do
  85.     @user.email = ''
  86.     @user.should_not be_valid
  87.   end
  88.   def set_password(newpass)
  89.     @user.password = @user.password_confirmation = newpass
  90.   end
  91. end
  92. describe 'With a user in the database' do
  93.   before(:each) do
  94.     @olduser = Factory.create(:user)
  95.   end
  96.   it 'should not be able to create another user with the same login' do
  97.     login = @olduser.login
  98.     u = User.new(:login => login) {|u| u.password = u.password_confirmation = 'secure password'}
  99.     u.should_not be_valid
  100.     u.errors.should be_invalid('login')
  101.   end
  102. end
  103. describe 'Updating an existing user' do
  104.   before(:each) do
  105.     @user = Factory.create(:user)
  106.     set_password 'a secure password'
  107.     @user.save!
  108.   end
  109.   describe "the password" do
  110.     { 'just right' => 'Just right',
  111.       'empty' => ''
  112.     }.each do |ok, password|
  113.       it "can be #{ok}" do
  114.         set_password password
  115.         @user.should be_valid
  116.       end
  117.     end
  118.     { 'too short' => 'x',
  119.       'too long' => 'repetitivepass' * 10,
  120.     }.each do |problematic, password|
  121.       it "cannot be #{problematic}" do
  122.         set_password password
  123.         @user.should_not be_valid
  124.         @user.errors.should be_invalid('password')
  125.       end
  126.     end
  127.     it "has to match confirmation" do
  128.       @user.password = "foo"
  129.       @user.password_confirmation = "bar"
  130.       @user.should_not be_valid
  131.       @user.errors.should be_invalid('password')
  132.     end
  133.     it "is not actually changed when set to empty" do
  134.       set_password ''
  135.       @user.save!
  136.       User.authenticate(@user.login, '').should be_nil
  137.       User.authenticate(@user.login, 'a secure password').should == @user
  138.     end
  139.   end
  140.   describe "saving twice" do
  141.     it "should not change the password" do
  142.       (found = User.authenticate(@user.login, 'a secure password')).should == @user
  143.       found.save
  144.       found.save
  145.       User.authenticate(@user.login, 'a secure password').should == found
  146.     end
  147.   end
  148.   describe 'the login' do
  149.     it 'must not change' do
  150.       @user.login = 'not_bob'
  151.       @user.should_not be_valid
  152.     end
  153.   end
  154.   def set_password(newpass)
  155.     @user.password = @user.password_confirmation = newpass
  156.   end
  157. end
  158. describe User do
  159.   describe '#admin?' do
  160.     it 'should return true if user is admin' do
  161.       users(:tobi).should be_admin
  162.     end
  163.     it 'should return false if user is not admin' do
  164.       users(:user_publisher).should_not be_admin
  165.     end
  166.   end
  167. end