Skip to content

Instantly share code, notes, and snippets.

@resure
Created August 21, 2011 21:23
Show Gist options
  • Save resure/1161192 to your computer and use it in GitHub Desktop.
Save resure/1161192 to your computer and use it in GitHub Desktop.
# encoding: utf-8
require 'spec_helper'
describe User do
before(:each) do
@attr = { :login => 'Foobar',
:email => '[email protected]',
:first_name => 'Foo',
:last_name => 'Bar',
:password => 'foobar',
:password_confirmation => 'foobar'
}
User.destroy_all
end
describe "registration" do
it "should create a new user given valid attributes" do
user = User.new(@attr)
user.save
user.login.should eq(@attr[:login].downcase)
user.display_name.should eq(@attr[:login])
user.email.should eq(@attr[:email].downcase)
user.first_name.should eq(@attr[:first_name])
user.last_name.should eq(@attr[:last_name])
end
it "should require valid login" do
user = User.new(@attr.merge(:login => ""))
user.should_not be_valid
user = User.new(@attr.merge(:login => "Fo"))
user.should_not be_valid
user = User.new(@attr.merge(:login => "Super@ser"))
user.should_not be_valid
user = User.new(@attr.merge(:login => "Super User"))
user.should_not be_valid
end
it "should require password confirmation" do
user = User.new(@attr.merge(:password_confirmation => ""))
user.should_not be_valid
user = User.new(@attr.merge(:password_confirmation => 'FooBar'))
user.should_not be_valid
end
it "should require valid password" do
user = User.new(@attr.merge(:password => "Fooba", :password_confirmation => 'Fooba'))
user.should_not be_valid
user = User.new(@attr.merge(:password => 'x' * 255))
user.should_not be_valid
end
it "should require valid first name" do
user = User.new(@attr.merge(:first_name => ''))
user.should_not be_valid
user = User.new(@attr.merge(:first_name => 'x' * 255))
user.should_not be_valid
user = User.new(@attr.merge(:first_name => ' '))
user.should_not be_valid
user = User.new(@attr.merge(:first_name => 'a'))
user.should_not be_valid
end
it "should require valid last name" do
user = User.new(@attr.merge(:last_name => ''))
user.should_not be_valid
user = User.new(@attr.merge(:last_name => 'x' * 255))
user.should_not be_valid
user = User.new(@attr.merge(:last_name => ' '))
user.should_not be_valid
user = User.new(@attr.merge(:last_name => 'a'))
user.should_not be_valid
end
it "should reject users with duplicate email" do
user = User.new(@attr)
user.should be_valid
user.save
duplicate_user = User.new(@attr.merge(:login => 'RailsUser'))
duplicate_user.should_not be_valid
end
it "should reject users with duplicate login" do
user = User.new(@attr)
user.should be_valid
user.save
duplicate_user = User.new(@attr.merge(:email => '[email protected]'))
duplicate_user.should_not be_valid
end
it "should have an encrypted password attribute" do
user = User.new(@attr)
user.password_digest.should_not be_blank
end
it "should accept valid email addresses" do
addresses = %w[[email protected] [email protected] [email protected]]
addresses.each do |address|
valid_email_user = User.new(@attr.merge(:email => address))
valid_email_user.should be_valid
end
end
it "should reject invalid email addresses" do
addresses = %w[user@foo,com user_at_foo.org example.user@foo.]
addresses.each do |address|
invalid_email_user = User.new(@attr.merge(:email => address))
invalid_email_user.should_not be_valid
end
end
end
describe "authentication" do
before(:each) do
@user = User.create(@attr)
end
it "should reject wrong password" do
@user.authenticate('wrong').should_not be_true
end
it "should accept correct password" do
@user.authenticate(@attr[:password]).should be_true
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment