From b2dc2598fbc22428cdd5e4094f6763abc8782858 Mon Sep 17 00:00:00 2001 From: Kieran Huggins Date: Fri, 16 Oct 2015 16:42:30 -0400 Subject: [PATCH] add specs for cached attributes --- test/caching_test.rb | 81 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/test/caching_test.rb b/test/caching_test.rb index 869f0f93..f07f6c31 100644 --- a/test/caching_test.rb +++ b/test/caching_test.rb @@ -35,6 +35,42 @@ class CachingTest < ActiveModel::TestCase end end + class Parent + def id + 'parent1' + end + + def name + 'Kieran' + end + + def children + [ Child.new ] + end + + def read_attribute_for_serialization(name) + send name + end + end + + class Child + def id + 'child1' + end + + def name + 'Joshua' + end + + def parent + Parent.new + end + + def read_attribute_for_serialization(name) + send name + end + end + def test_serializers_have_a_cache_store ActiveModel::Serializer.cache = NullStore.new @@ -93,4 +129,49 @@ class CachingTest < ActiveModel::TestCase assert_equal instance.serializable_array, serializer.cache.read('array_serializer/cache-key/serializable-array') assert_equal instance.to_json, serializer.cache.read('array_serializer/cache-key/to-json') end + + def test_cached_serializers_return_associations + + child_serializer = Class.new(ActiveModel::Serializer) do + cached true + attributes :name + + def self.to_s + 'child_serializer' + end + + def cache_key + object.name + end + end + + parent_serializer = Class.new(ActiveModel::Serializer) do + cached true + attributes :name + + has_many :children, serializer: child_serializer, embed: :ids, include: true + + def self.to_s + 'parent_serializer' + end + + def cache_key + object.name + end + end + + + parent_serializer.cache = NullStore.new + child_serializer.cache = NullStore.new + + instance = parent_serializer.new Parent.new, root: :parent + + initial_keys = instance.as_json.keys + + assert_equal(initial_keys, [:children, :parent]) + + cached_keys = instance.as_json.keys + + assert_equal(cached_keys, [:children, :parent]) + end end