require File.dirname(__FILE__) + '/../spec_helper' describe User do before(:each) do @password = "hello" @salt = "123" @john = stub_model(User, :salt => @salt, :hashed_password => User.encrypt(@password,@salt)) end it "should be authenticated if activated" do @john.should_receive(:activated).and_return(true) @john.authenticated?(@password).should == true end it "should not be authenticated if inactivated" do @john.should_receive(:activated).and_return(false) @john.authenticated?(@password).should == false end it "should not be authenticated if incorrect password is provided" do @john.should_receive(:activated).and_return(true) @john.should_receive(:hashed_password).and_return("byebye") @john.authenticated?(@password).should == false end end describe User, "during registration" do class User public :encrypt_new_password end before(:each) do @john = User.new(:login => 'john', :password => 'hello') @john.encrypt_new_password end it "should produce and accept activation key" do activation_key = @john.activation_key @john.verify_activation_key(activation_key).should == true end it "should not accept invalid activation key" do @john.verify_activation_key("12345").should == false end end describe User, "when re-register with the same e-mail" do before(:each) do @mary_email = 'mary@in.th' @time_first_register = Time.local(2008,5,10,9,00).gmtime @mary_first = mock_model(User, :login => 'mary1', :password => 'hello', :email => @mary_email, :created_at => @time_first_register) @mary_second = User.new(:login => 'mary2', :password => 'hello', :email => @mary_email) User.stub!(:find_by_email). with(@mary_email, {:order => "created_at DESC"}). and_return(@mary_first) end class User public :enough_time_interval_between_same_email_registrations end it "should not be allowed if the time interval is less than 5 mins" do time_now = @time_first_register + 4.minutes Time.stub!(:now).and_return(time_now) @mary_second.enough_time_interval_between_same_email_registrations @mary_second.errors.length.should_not be_zero end it "should be allowed if the time interval is more than 5 mins" do time_now = @time_first_register + 6.minutes Time.stub!(:now).and_return(time_now) @mary_second.enough_time_interval_between_same_email_registrations @mary_second.errors.length.should be_zero end end describe User, "as a class" do it "should be able to generate random password" do password1 = User.random_password password2 = User.random_password password1.should_not == password2 end end