require File.dirname(__FILE__) + '/../spec_helper'

# # Re-raise errors caught by the controller.
# class UsersController
#   def rescue_action(e)
#     raise e
#   end
# end

describe UsersController do
  include AuthenticatedTestHelper

  fixtures :users
  
  def create_user(options = {})
    post :create, :user => { :login => 'quire', :email => 'quire@example.com', 
      :password => 'quire', :password_confirmation => 'quire' }.merge(options)
  end
  
  setup do
  end

  it 'should allow signup' do
    lambda {create_user}.should change(User, :count)
    response.should be_redirect
  end

  it 'should require login on signup' do
    lambda {create_user(:login => nil)}.should_not change(User, :count)
    assigns[:user].errors.on(:login).should_not be_nil
    response.should be_success
  end
  
  it 'should require password on signup' do
    lambda {create_user(:password => nil)}.should_not change(User, :count)
    assigns[:user].errors.on(:password).should_not be_nil
    response.should be_success
  end
  
  it 'should require password confirmation on signup' do
    lambda {create_user(:password_confirmation => nil)}.should_not change(User, :count)
    assigns(:user).errors.on(:password_confirmation).should_not be_nil
    response.should be_success
  end
  
  it 'should require email on signup' do
    lambda {create_user(:email => nil)}.should_not change(User, :count)
    assigns[:user].errors.on(:email).should_not be_nil
    response.should be_success
  end
  
  it 'should activate user' do
    User.authenticate('aaron', 'test').should be_nil
    get :activate, :activation_code => users(:aaron).activation_code
    response.should redirect_to('/')
    flash[:notice].should_not be_nil
    User.authenticate('aaron', 'test').should == users(:aaron)
  end 

end

