Skip to content

Commit 8102296

Browse files
committed
Test Reflection value/include_data
1 parent 8440455 commit 8102296

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

test/serializers/reflection_test.rb

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,125 @@ def self.name
2525
@instance_options = {}
2626
end
2727

28+
def test_reflection_value
29+
serializer_class = Class.new(ActiveModel::Serializer) do
30+
has_one :blog
31+
end
32+
serializer_instance = serializer_class.new(@model, @instance_options)
33+
34+
# Get Reflection
35+
reflection = serializer_class._reflections.fetch(:blog)
36+
37+
# Assert
38+
assert_nil reflection.block
39+
assert_equal Serializer.config.include_data_default, reflection.instance_variable_get(:@_include_data)
40+
assert_equal true, reflection.instance_variable_get(:@_include_data)
41+
42+
include_slice = :does_not_matter
43+
assert_equal @model.blog, reflection.value(serializer_instance, include_slice)
44+
end
45+
46+
def test_reflection_value_block
47+
serializer_class = Class.new(ActiveModel::Serializer) do
48+
has_one :blog do
49+
object.blog
50+
end
51+
end
52+
serializer_instance = serializer_class.new(@model, @instance_options)
53+
54+
# Get Reflection
55+
reflection = serializer_class._reflections.fetch(:blog)
56+
57+
# Assert
58+
assert_respond_to reflection.block, :call
59+
assert_equal Serializer.config.include_data_default, reflection.instance_variable_get(:@_include_data)
60+
assert_equal true, reflection.instance_variable_get(:@_include_data)
61+
62+
include_slice = :does_not_matter
63+
assert_equal @model.blog, reflection.value(serializer_instance, include_slice)
64+
end
65+
66+
def test_reflection_value_block_with_explicit_include_data_true
67+
serializer_class = Class.new(ActiveModel::Serializer) do
68+
has_one :blog do
69+
include_data true
70+
object.blog
71+
end
72+
end
73+
serializer_instance = serializer_class.new(@model, @instance_options)
74+
75+
# Get Reflection
76+
reflection = serializer_class._reflections.fetch(:blog)
77+
78+
# Assert
79+
assert_respond_to reflection.block, :call
80+
assert_equal Serializer.config.include_data_default, reflection.instance_variable_get(:@_include_data)
81+
assert_equal true, reflection.instance_variable_get(:@_include_data)
82+
83+
include_slice = :does_not_matter
84+
assert_equal @model.blog, reflection.value(serializer_instance, include_slice)
85+
end
86+
87+
def test_reflection_value_block_with_include_data_false_mutates_the_reflection_include_data
88+
serializer_class = Class.new(ActiveModel::Serializer) do
89+
has_one :blog do
90+
include_data false
91+
object.blog
92+
end
93+
end
94+
serializer_instance = serializer_class.new(@model, @instance_options)
95+
96+
# Get Reflection
97+
reflection = serializer_class._reflections.fetch(:blog)
98+
99+
# Assert
100+
assert_respond_to reflection.block, :call
101+
assert_equal true, reflection.instance_variable_get(:@_include_data)
102+
include_slice = :does_not_matter
103+
assert_nil reflection.value(serializer_instance, include_slice)
104+
assert_equal false, reflection.instance_variable_get(:@_include_data)
105+
end
106+
107+
def test_reflection_value_block_with_include_data_if_sideloaded_included_mutates_the_reflection_include_data
108+
serializer_class = Class.new(ActiveModel::Serializer) do
109+
has_one :blog do
110+
include_data :if_sideloaded
111+
object.blog
112+
end
113+
end
114+
serializer_instance = serializer_class.new(@model, @instance_options)
115+
116+
# Get Reflection
117+
reflection = serializer_class._reflections.fetch(:blog)
118+
119+
# Assert
120+
assert_respond_to reflection.block, :call
121+
assert_equal true, reflection.instance_variable_get(:@_include_data)
122+
include_slice = {}
123+
assert_nil reflection.value(serializer_instance, include_slice)
124+
assert_equal :if_sideloaded, reflection.instance_variable_get(:@_include_data)
125+
end
126+
127+
def test_reflection_value_block_with_include_data_if_sideloaded_excluded_mutates_the_reflection_include_data
128+
serializer_class = Class.new(ActiveModel::Serializer) do
129+
has_one :blog do
130+
include_data :if_sideloaded
131+
object.blog
132+
end
133+
end
134+
serializer_instance = serializer_class.new(@model, @instance_options)
135+
136+
# Get Reflection
137+
reflection = serializer_class._reflections.fetch(:blog)
138+
139+
# Assert
140+
assert_respond_to reflection.block, :call
141+
assert_equal true, reflection.instance_variable_get(:@_include_data)
142+
include_slice = { blog: :does_not_matter }
143+
assert_equal @model.blog, reflection.value(serializer_instance, include_slice)
144+
assert_equal :if_sideloaded, reflection.instance_variable_get(:@_include_data)
145+
end
146+
28147
def test_reflection_block_with_link_mutates_the_reflection_links
29148
serializer_class = Class.new(ActiveModel::Serializer) do
30149
has_one :blog do

0 commit comments

Comments
 (0)