functional
functional/account_controller_test.rb
functional/admin_controller_test.rb
functional/ads_controller_test.rb
functional/main_controller_test.rb
test_helper.rb
unit
unit/ad_test.rb
unit/author_test.rb
unit/category_test.rb
unit/mailman_test.rb
unit/parent_category_test.rb
unit/user_test.rb

-

/functional/account_controller_test.rb

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

require 'account_controller'

class AccountController; def rescue_action(e) raise e end; end

class AccountControllerTest < Test::Unit::TestCase

  include AuthenticatedTestHelper

  fixtures :users

  def setup

    @controller  AccountController.new

    @request  ActionController::TestRequest.new

    @response  ActionController::TestResponse.new

  end

  def test_should_login_and_redirect

    post :login, :email > 'quentin@example.com', :password > 'test'

    assert session[:user]

    assert_response :redirect

  end

  def test_should_fail_login_and_not_redirect

    post :login, :example > 'quentin@example', :password > 'bad password'

    assert_nil session[:user]

    assert_response :success

  end

  def test_should_allow_signup

    assert_difference User, :count do

      create_user

      assert_response :redirect

    end

  end

  def test_should_require_password_on_signup

    assert_no_difference User, :count do

      create_user(:password > nil)

      assert assigns(:user).errors.on(:password)

      assert_response :success

    end

  end

  def test_should_require_password_confirmation_on_signup

    assert_no_difference User, :count do

      create_user(:password_confirmation > nil)

      assert assigns(:user).errors.on(:password_confirmation)

      assert_response :success

    end

  end

  def test_should_require_email_on_signup

    assert_no_difference User, :count do

      create_user(:email > nil)

      assert assigns(:user).errors.on(:email)

      assert_response :success

    end

  end

  def test_should_logout

    login_as :quentin

    get :logout

    assert_nil session[:user]

    assert_response :redirect

  end

  def test_should_remember_me

    post :login, :email > 'quentin@example.com', :password > 'test', :remember_me > "1"

    assert_not_nil @response.cookies["auth_token"]

  end

  def test_should_not_remember_me

    post :login, :email > 'quentin@example.com', :password > 'test', :remember_me > "0"

    assert_nil @response.cookies["auth_token"]

  end

  def test_should_delete_token_on_logout

    login_as :quentin

    get :logout

    assert_equal @response.cookies["auth_token"], []

  end

  def test_should_login_with_cookie

    users(:quentin).remember_me

    @request.cookies["auth_token"]  cookie_for(:quentin)

    get :index

    assert @controller.send(:logged_in?)

  end

  def test_should_fail_expired_cookie_login

    users(:quentin).remember_me

    users(:quentin).update_attribute :remember_token_expires_at, 5.minutes.ago

    @request.cookies["auth_token"]  cookie_for(:quentin)

    get :index

    assert !@controller.send(:logged_in?)

  end

  def test_should_fail_cookie_login

    users(:quentin).remember_me

    @request.cookies["auth_token"]  auth_token('invalid_auth_token')

    get :index

    assert !@controller.send(:logged_in?)

  end

  protected

    def create_user(options  {})

      post :signup, :user > { :email > 'quire@example.com', 

        :password > 'quire', :password_confirmation > 'quire' }.merge(options)

    end

    def auth_token(token)

      CGI::Cookie.new('name' > 'auth_token', 'value' > token)

    end

    def cookie_for(user)

      auth_token users(user).remember_token

    end

end

-

/functional/admin_controller_test.rb

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

class AdminControllerTest < ActionController::TestCase

  def test_truth

    assert true

  end

end

-

/functional/ads_controller_test.rb

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

class AdsControllerTest < ActionController::TestCase

  def test_ad_post_and_email_sent

    get :new, {:category > 1, :title > 'test', :ad > 'test ad'}

    assert_response :success

  end

  def test_url_click_activates_post

    assert true

  end

end

-

/functional/main_controller_test.rb

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

class MainControllerTest < ActionController::TestCase

  def test_truth

    assert true

  end

end

-

/test_helper.rb

ENV["RAILS_ENV"]  "test"

require File.expand_path(File.dirname(__FILE__) + "/../config/environment")

require 'test_help'

class Test::Unit::TestCase

  self.use_transactional_fixtures  true

  self.use_instantiated_fixtures  false

  fixtures :all

end

-

/unit/ad_test.rb

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

class ClassifiedAdTest < ActiveSupport::TestCase

  def test_ad_creation

    ad  Ad.create(:title > ads(:test_one).title)

    assert ad.valid?

    assert_equal(ads(:test_one).title, ad.title)

    assert_equal(false, ad.active)

    assert !ad.activation_hash.nil?

  end

  def test_email_generation_is_working

    ad  Ad.create(:title > ads(:test_one).title)

    assert ad.valid?

    assert_match(/^\d{18}@(chuckslist.com)$/i, ad.email)

  end

  def test_no_clash_in_generated_email_address

    for count in (1..10000)

      ad1  Ad.create(:title > 'Ad1')

      ad2  Ad.create(:title > 'Ad2')

      assert_not_equal(ad1.email, ad2.email)

    end

  end

  def test_created_ads

  end

end

-

/unit/author_test.rb

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

class AuthorTest < ActiveSupport::TestCase

  def test_truth

    assert true

  end

end

-

/unit/category_test.rb

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

class CategoryTest < ActiveSupport::TestCase

  def test_truth

    assert true

  end

end

-

/unit/mailman_test.rb

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

class MailmanTest < ActionMailer::TestCase

  tests Mailman

  def test_email_fixture_is_working

    email_text  read_fixture("test_mail_001").join

    assert_match(/jalopy/i, email_text)

  end

  def test_receive_email_is_working

    email_text  read_fixture("test_mail_001").join

    response  Mailman.receive(email_text)

    assert_not_equal("200806159145300001@chuckslist.com", response.to[0])

    assert_equal("quentin@example.com", response.to[0])

    assert_equal("drspin_2003@hotmail.com", response.from[0])

    assert_match(/jalopy/i, response.body)

    assert_match(/Email delivered by Chuckslist/i, response.body)

  end

  def test_fake_email_is_garbaged

    email_test  read_fixture("test_mail_002").join

    response  Mailman.receive(email_test)

    assert_not_equal("quentin@example.com", response.to[0]) 

    assert_equal("garbage@chuckslist.org", response.to[0])

  end

  def test_regex_match_reply_to_ad_email

    assert_match(/^\d{18}@(chuckslist.com)$/i, "200806159145300001@chuckslist.com")

  end

  def test_regex_match_ad_activation_email

    assert_match(/^([a-zA-Z]{22}@(chuckslist.com))$/i, "abcdefghiJKLmnOPQrstUV@chuckslist.com")

  end

  def test_ad_confirmation_email_is_sent

  end

  def test_ad_confirmation_set_true_when_clicked

  end

  def test_ad_confirmation_email_is_working

  end

end

-

/unit/parent_category_test.rb

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

class ParentCategoryTest < ActiveSupport::TestCase

  def test_truth

    assert true

  end

end

-

/unit/user_test.rb

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

class UserTest < Test::Unit::TestCase

  include AuthenticatedTestHelper

  fixtures :users

  def test_should_create_user

    assert_difference User, :count do

      user  create_user

      assert !user.new_record?, "#{user.errors.full_messages.to_sentence}"

    end

  end

  def test_should_require_password

    assert_no_difference User, :count do

      u  create_user(:password > nil)

      assert u.errors.on(:password)

    end

  end

  def test_should_require_password_confirmation

    assert_no_difference User, :count do

      u  create_user(:password_confirmation > nil)

      assert u.errors.on(:password_confirmation)

    end

  end

  def test_should_require_email

    assert_no_difference User, :count do

      u  create_user(:email > nil)

      assert u.errors.on(:email)

    end

  end

  def test_should_reset_password

    users(:quentin).update_attributes(:password > 'new password', :password_confirmation > 'new password')

    assert_equal users(:quentin), User.authenticate('quentin@example.com', 'new password')

  end

  def test_should_not_rehash_password

    users(:quentin).update_attributes(:email > 'quentin2@example.com')

    assert_equal users(:quentin), User.authenticate('quentin2@example.com', 'test')

  end

  def test_should_authenticate_user

    assert_equal users(:quentin), User.authenticate('quentin@example.com', 'test')

  end

  def test_should_set_remember_token

    users(:quentin).remember_me

    assert_not_nil users(:quentin).remember_token

    assert_not_nil users(:quentin).remember_token_expires_at

  end

  def test_should_unset_remember_token

    users(:quentin).remember_me

    assert_not_nil users(:quentin).remember_token

    users(:quentin).forget_me

    assert_nil users(:quentin).remember_token

  end

  protected

    def create_user(options  {})

      User.create({ :email > 'quire@example.com', :password > 'quire', :password_confirmation > 'quire' }.merge(options))

    end

end