aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/cache/behaviors/cache_store_version_behavior.rb
blob: a0170c896f3c69372e72372ad1cce3a55ed28572 (plain) (blame)
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
module CacheStoreVersionBehavior
  ModelWithKeyAndVersion = Struct.new(:cache_key, :cache_version)

  def test_fetch_with_right_version_should_hit
    @cache.fetch("foo", version: 1) { "bar" }
    assert_equal "bar", @cache.read("foo", version: 1)
  end

  def test_fetch_with_wrong_version_should_miss
    @cache.fetch("foo", version: 1) { "bar" }
    assert_nil @cache.read("foo", version: 2)
  end

  def test_read_with_right_version_should_hit
    @cache.write("foo", "bar", version: 1)
    assert_equal "bar", @cache.read("foo", version: 1)
  end

  def test_read_with_wrong_version_should_miss
    @cache.write("foo", "bar", version: 1)
    assert_nil @cache.read("foo", version: 2)
  end

  def test_exist_with_right_version_should_be_true
    @cache.write("foo", "bar", version: 1)
    assert @cache.exist?("foo", version: 1)
  end

  def test_exist_with_wrong_version_should_be_false
    @cache.write("foo", "bar", version: 1)
    assert !@cache.exist?("foo", version: 2)
  end

  def test_reading_and_writing_with_model_supporting_cache_version
    m1v1 = ModelWithKeyAndVersion.new("model/1", 1)
    m1v2 = ModelWithKeyAndVersion.new("model/1", 2)

    @cache.write(m1v1, "bar")
    assert_equal "bar", @cache.read(m1v1)
    assert_nil @cache.read(m1v2)
  end

  def test_reading_and_writing_with_model_supporting_cache_version_using_nested_key
    m1v1 = ModelWithKeyAndVersion.new("model/1", 1)
    m1v2 = ModelWithKeyAndVersion.new("model/1", 2)

    @cache.write([ "something", m1v1 ], "bar")
    assert_equal "bar", @cache.read([ "something", m1v1 ])
    assert_nil @cache.read([ "something", m1v2 ])
  end

  def test_fetching_with_model_supporting_cache_version
    m1v1 = ModelWithKeyAndVersion.new("model/1", 1)
    m1v2 = ModelWithKeyAndVersion.new("model/1", 2)

    @cache.fetch(m1v1) { "bar" }
    assert_equal "bar", @cache.fetch(m1v1) { "bu" }
    assert_equal "bu", @cache.fetch(m1v2) { "bu" }
  end

  def test_exist_with_model_supporting_cache_version
    m1v1 = ModelWithKeyAndVersion.new("model/1", 1)
    m1v2 = ModelWithKeyAndVersion.new("model/1", 2)

    @cache.write(m1v1, "bar")
    assert     @cache.exist?(m1v1)
    assert_not @cache.fetch(m1v2)
  end

  def test_fetch_multi_with_model_supporting_cache_version
    m1v1 = ModelWithKeyAndVersion.new("model/1", 1)
    m2v1 = ModelWithKeyAndVersion.new("model/2", 1)
    m2v2 = ModelWithKeyAndVersion.new("model/2", 2)

    first_fetch_values  = @cache.fetch_multi(m1v1, m2v1) { |m| m.cache_key }
    second_fetch_values = @cache.fetch_multi(m1v1, m2v2) { |m| m.cache_key + " 2nd" }

    assert_equal({ m1v1 => "model/1", m2v1 => "model/2" }, first_fetch_values)
    assert_equal({ m1v1 => "model/1", m2v2 => "model/2 2nd" }, second_fetch_values)
  end

  def test_version_is_normalized
    @cache.write("foo", "bar", version: 1)
    assert_equal "bar", @cache.read("foo", version: "1")
  end
end