File: caching_configuration_test_isolated.rb

package info (click to toggle)
ruby-active-model-serializers 0.10.12-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,752 kB
  • sloc: ruby: 13,138; sh: 53; makefile: 6
file content (172 lines) | stat: -rw-r--r-- 6,953 bytes parent folder | download | duplicates (2)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# frozen_string_literal: true

# Execute this test in isolation
require 'support/isolated_unit'

class CachingConfigurationTest < ActiveSupport::TestCase
  include ActiveSupport::Testing::Isolation

  setup do
    require 'rails'
    # AMS needs to be required before Rails.application is initialized for
    # Railtie's to fire in Rails.application.initialize!
    # (and make_basic_app initializes the app)
    require 'active_model_serializers'
    # Create serializers before Rails.application.initialize!
    # To ensure we're testing that the cache settings depend on
    # the Railtie firing, not on the ActionController being loaded.
    create_serializers
  end

  def create_serializers
    @cached_serializer = Class.new(ActiveModel::Serializer) do
      cache skip_digest: true
      attributes :id, :name, :title
    end
    @fragment_cached_serializer = Class.new(ActiveModel::Serializer) do
      cache only: :id
      attributes :id, :name, :title
    end
    @non_cached_serializer = Class.new(ActiveModel::Serializer) do
      attributes :id, :name, :title
    end
  end

  class PerformCachingTrue < CachingConfigurationTest
    setup do
      # Let's make that Rails app and initialize it!
      make_basic_app do |app|
        app.config.action_controller.perform_caching = true
        app.config.action_controller.cache_store = ActiveSupport::Cache.lookup_store(:memory_store)
      end
      controller_cache_store # Force ActiveSupport.on_load(:action_controller) to run
    end

    test 'it sets perform_caching to true on AMS.config and serializers' do
      assert Rails.configuration.action_controller.perform_caching
      assert ActiveModelSerializers.config.perform_caching
      assert ActiveModel::Serializer.perform_caching?
      assert @cached_serializer.perform_caching?
      assert @non_cached_serializer.perform_caching?
      assert @fragment_cached_serializer.perform_caching?
    end

    test 'it sets the AMS.config.cache_store to the controller cache_store' do
      assert_equal controller_cache_store, ActiveSupport::Cache::MemoryStore
      assert_equal controller_cache_store, ActiveModelSerializers.config.cache_store.class
    end

    test 'it sets the cached serializer cache_store to the ActionController::Base.cache_store' do
      assert_equal ActiveSupport::Cache::NullStore, @cached_serializer._cache.class
      assert_equal controller_cache_store, @cached_serializer.cache_store.class
      assert_equal ActiveSupport::Cache::MemoryStore, @cached_serializer._cache.class
    end

    test 'the cached serializer has cache_enabled?' do
      assert @cached_serializer.cache_enabled?
    end

    test 'the cached serializer does not have fragment_cache_enabled?' do
      refute @cached_serializer.fragment_cache_enabled?
    end

    test 'the non-cached serializer cache_store is nil' do
      assert_nil @non_cached_serializer._cache
      assert_nil @non_cached_serializer.cache_store
      assert_nil @non_cached_serializer._cache
    end

    test 'the non-cached serializer does not have cache_enabled?' do
      refute @non_cached_serializer.cache_enabled?
    end

    test 'the non-cached serializer does not have fragment_cache_enabled?' do
      refute @non_cached_serializer.fragment_cache_enabled?
    end

    test 'it sets the fragment cached serializer cache_store to the ActionController::Base.cache_store' do
      assert_equal ActiveSupport::Cache::NullStore, @fragment_cached_serializer._cache.class
      assert_equal controller_cache_store, @fragment_cached_serializer.cache_store.class
      assert_equal ActiveSupport::Cache::MemoryStore, @fragment_cached_serializer._cache.class
    end

    test 'the fragment cached serializer does not have cache_enabled?' do
      refute @fragment_cached_serializer.cache_enabled?
    end

    test 'the fragment cached serializer has fragment_cache_enabled?' do
      assert @fragment_cached_serializer.fragment_cache_enabled?
    end
  end

  class PerformCachingFalse < CachingConfigurationTest
    setup do
      # Let's make that Rails app and initialize it!
      make_basic_app do |app|
        app.config.action_controller.perform_caching = false
        app.config.action_controller.cache_store = ActiveSupport::Cache.lookup_store(:memory_store)
      end
      controller_cache_store # Force ActiveSupport.on_load(:action_controller) to run
    end

    test 'it sets perform_caching to false on AMS.config and serializers' do
      refute Rails.configuration.action_controller.perform_caching
      refute ActiveModelSerializers.config.perform_caching
      refute ActiveModel::Serializer.perform_caching?
      refute @cached_serializer.perform_caching?
      refute @non_cached_serializer.perform_caching?
      refute @fragment_cached_serializer.perform_caching?
    end

    test 'it sets the AMS.config.cache_store to the controller cache_store' do
      assert_equal controller_cache_store, ActiveSupport::Cache::MemoryStore
      assert_equal controller_cache_store, ActiveModelSerializers.config.cache_store.class
    end

    test 'it sets the cached serializer cache_store to the ActionController::Base.cache_store' do
      assert_equal ActiveSupport::Cache::NullStore, @cached_serializer._cache.class
      assert_equal controller_cache_store, @cached_serializer.cache_store.class
      assert_equal ActiveSupport::Cache::MemoryStore, @cached_serializer._cache.class
    end

    test 'the cached serializer does not have cache_enabled?' do
      refute @cached_serializer.cache_enabled?
    end

    test 'the cached serializer does not have fragment_cache_enabled?' do
      refute @cached_serializer.fragment_cache_enabled?
    end

    test 'the non-cached serializer cache_store is nil' do
      assert_nil @non_cached_serializer._cache
      assert_nil @non_cached_serializer.cache_store
      assert_nil @non_cached_serializer._cache
    end

    test 'the non-cached serializer does not have cache_enabled?' do
      refute @non_cached_serializer.cache_enabled?
    end

    test 'the non-cached serializer does not have fragment_cache_enabled?' do
      refute @non_cached_serializer.fragment_cache_enabled?
    end

    test 'it sets the fragment cached serializer cache_store to the ActionController::Base.cache_store' do
      assert_equal ActiveSupport::Cache::NullStore, @fragment_cached_serializer._cache.class
      assert_equal controller_cache_store, @fragment_cached_serializer.cache_store.class
      assert_equal ActiveSupport::Cache::MemoryStore, @fragment_cached_serializer._cache.class
    end

    test 'the fragment cached serializer does not have cache_enabled?' do
      refute @fragment_cached_serializer.cache_enabled?
    end

    test 'the fragment cached serializer does not have fragment_cache_enabled?' do
      refute @fragment_cached_serializer.fragment_cache_enabled?
    end
  end

  def controller_cache_store
    ActionController::Base.cache_store.class
  end
end