Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 11ba7040e7
Fetching contributors…

Cannot retrieve contributors at this time

file 89 lines (71 sloc) 2.227 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
require File.join(File.dirname(__FILE__), "test_helper")

class FinderTest < ActiveSupport::TestCase
  setup do
    Rails.test_environment = false
    State.cache_store.clear
    load_fixtures
  end

  teardown do
    cleanup_db
  end

  test "finder-enabled model should respond to []" do
    assert State.respond_to?(:[])
  end

  test "enforcing uniqueness of lookup token" do
    assert_equal "Colorado", State[:CO].name
    @state = State.new(:abbreviation => "CO")
    assert ! @state.valid?
  end

  test "hash-like lookup" do
    @california = State.find_by_name 'California'
    assert_equal @california, State[:CA]
  end

  test "set default to prevent error" do
    assert_raises(RuntimeError) { State[:Boom] }
    assert_nothing_raised { NoErrorState[:FindDefault] }
    assert_nothing_raised {
      assert_equal "Not Found", StateWithDefault[:FindDefault]
    }
  end

  test "caching" do
    @state = State.create!(:abbreviation => "FL", :name => "Florida")
    State.expects(:find).once.returns(@state)

    5.times do
      @lookup = State[:FL]
      assert_equal "Florida", @lookup.name
    end
  end

  test "forcing cache miss in test environment" do
    Rails.test_environment = true

    @state = State.create!(:abbreviation => "FL", :name => "Florida")
    State.expects(:find).times(5).returns(@state)

    5.times do
      @lookup = State[:FL]
      assert_equal "Florida", @lookup.name
    end
  end

  test "save or delete clears cache" do
    @state = State.create!(:abbreviation => "FL", :name => "Florida")

    3.times do
      lookup = State[:FL]
      assert_equal 'Florida', lookup.name
      State.connection.execute("UPDATE states SET name = 'Flooridia' WHERE abbreviation = 'FL'")
    end

    # update
    @modify = State.find(@state.id)
    @modify.name = 'Flooridia'
    @modify.save

    3.times do
      lookup = State[:FL]
      assert_equal 'Flooridia', lookup.name
      State.connection.execute("UPDATE states SET name = 'Florida' WHERE abbreviation = 'FL'")
    end

    # delete
    @state = NoErrorState[:FL]
    assert_equal "Florida", @state.name

    @delete = NoErrorState.find(@state.id)
    @delete.destroy

    @state = NoErrorState[:FL]
    assert @state.nil?
  end
end
Something went wrong with that request. Please try again.