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
|