cache_key_test.rb 2.7 KB
Newer Older
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
require "abstract_unit"
require "active_support/cache"

class CacheKeyTest < ActiveSupport::TestCase
  def test_entry_legacy_optional_ivars
    legacy = Class.new(ActiveSupport::Cache::Entry) do
      def initialize(value, options = {})
        @value = value
        @expires_in = nil
        @created_at = nil
        super
      end
    end

    entry = legacy.new "foo"
    assert_equal "foo", entry.value
  end

  def test_expand_cache_key
    assert_equal "1/2/true", ActiveSupport::Cache.expand_cache_key([1, "2", true])
    assert_equal "name/1/2/true", ActiveSupport::Cache.expand_cache_key([1, "2", true], :name)
  end

  def test_expand_cache_key_with_rails_cache_id
    with_env("RAILS_CACHE_ID" => "c99") do
      assert_equal "c99/foo", ActiveSupport::Cache.expand_cache_key(:foo)
      assert_equal "c99/foo", ActiveSupport::Cache.expand_cache_key([:foo])
      assert_equal "c99/foo/bar", ActiveSupport::Cache.expand_cache_key([:foo, :bar])
      assert_equal "nm/c99/foo", ActiveSupport::Cache.expand_cache_key(:foo, :nm)
      assert_equal "nm/c99/foo", ActiveSupport::Cache.expand_cache_key([:foo], :nm)
      assert_equal "nm/c99/foo/bar", ActiveSupport::Cache.expand_cache_key([:foo, :bar], :nm)
    end
  end

  def test_expand_cache_key_with_rails_app_version
    with_env("RAILS_APP_VERSION" => "rails3") do
      assert_equal "rails3/foo", ActiveSupport::Cache.expand_cache_key(:foo)
    end
  end

  def test_expand_cache_key_rails_cache_id_should_win_over_rails_app_version
    with_env("RAILS_CACHE_ID" => "c99", "RAILS_APP_VERSION" => "rails3") do
      assert_equal "c99/foo", ActiveSupport::Cache.expand_cache_key(:foo)
    end
  end

  def test_expand_cache_key_respond_to_cache_key
48
    key = "foo".dup
49 50 51 52 53 54 55
    def key.cache_key
      :foo_key
    end
    assert_equal "foo_key", ActiveSupport::Cache.expand_cache_key(key)
  end

  def test_expand_cache_key_array_with_something_that_responds_to_cache_key
56
    key = "foo".dup
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
    def key.cache_key
      :foo_key
    end
    assert_equal "foo_key", ActiveSupport::Cache.expand_cache_key([key])
  end

  def test_expand_cache_key_of_nil
    assert_equal "", ActiveSupport::Cache.expand_cache_key(nil)
  end

  def test_expand_cache_key_of_false
    assert_equal "false", ActiveSupport::Cache.expand_cache_key(false)
  end

  def test_expand_cache_key_of_true
    assert_equal "true", ActiveSupport::Cache.expand_cache_key(true)
  end

  def test_expand_cache_key_of_array_like_object
    assert_equal "foo/bar/baz", ActiveSupport::Cache.expand_cache_key(%w{foo bar baz}.to_enum)
  end

  private

    def with_env(kv)
      old_values = {}
      kv.each { |key, value| old_values[key], ENV[key] = ENV[key], value }
      yield
    ensure
      old_values.each { |key, value| ENV[key] = value }
    end
end