1
1
require 'test_helper'
2
2
3
3
module SerializationScopeTesting
4
+ def self . undef_serializer_dynamic_scope_methods
5
+ [ PostSerializer , PostViewContextSerializer ] . each do |serializer_class |
6
+ instance_method_cache = serializer_class . instance_variable_get ( :@_serializer_instance_methods )
7
+ class_method_cache = serializer_class . class_variable_get ( :@@_serializer_instance_methods ) [ serializer_class ]
8
+ [ :view_context , :current_user ] . each do |scope_method |
9
+ serializer_class . send ( :undef_method , scope_method ) if serializer_class . method_defined? ( scope_method )
10
+ instance_method_cache && instance_method_cache . delete ( scope_method )
11
+ class_method_cache && class_method_cache . delete ( scope_method )
12
+ end
13
+ end
14
+ end
4
15
class User < ActiveModelSerializers ::Model
5
16
attr_accessor :id , :name , :admin
6
17
def admin?
@@ -70,6 +81,10 @@ def comments
70
81
class DefaultScopeTest < ActionController ::TestCase
71
82
tests PostTestController
72
83
84
+ teardown do
85
+ SerializationScopeTesting . undef_serializer_dynamic_scope_methods
86
+ end
87
+
73
88
def test_default_serialization_scope
74
89
assert_equal :current_user , @controller . _serialization_scope
75
90
end
@@ -120,6 +135,10 @@ def serializer
120
135
end
121
136
tests PostViewContextTestController
122
137
138
+ teardown do
139
+ SerializationScopeTesting . undef_serializer_dynamic_scope_methods
140
+ end
141
+
123
142
def test_defined_serialization_scope
124
143
assert_equal :view_context , @controller . _serialization_scope
125
144
end
@@ -187,6 +206,10 @@ def new_post
187
206
end
188
207
tests PostViewContextTestController
189
208
209
+ teardown do
210
+ SerializationScopeTesting . undef_serializer_dynamic_scope_methods
211
+ end
212
+
190
213
def test_nil_serialization_scope
191
214
assert_nil @controller . _serialization_scope
192
215
end
@@ -196,14 +219,8 @@ def test_nil_serialization_scope_object
196
219
end
197
220
198
221
def test_nil_scope
199
- if Rails . version . start_with? ( '4.0' )
200
- exception_class = NoMethodError
201
- exception_matcher = 'admin?'
202
- else
203
- exception_class = NameError
204
- exception_matcher = /admin|current_user/
205
- end
206
- exception = assert_raises ( exception_class ) do
222
+ exception_matcher = /current_user/
223
+ exception = assert_raises ( NameError ) do
207
224
get :render_post_with_no_scope
208
225
end
209
226
assert_match exception_matcher , exception . message
@@ -225,18 +242,11 @@ def test_serialization_scope_is_and_nil_scope_passed_in_current_user
225
242
end
226
243
227
244
def test_serialization_scope_is_nil_and_scope_passed_in_current_user_without_scope_name
228
- get :render_post_with_passed_in_scope_without_scope_name
229
- expected_json = {
230
- post : {
231
- id : 4 ,
232
- title : 'Title' ,
233
- body : "The 'scope' is the 'current_user': true" ,
234
- comments : [
235
- { id : 2 , body : 'Scoped' }
236
- ]
237
- }
238
- } . to_json
239
- assert_equal expected_json , @response . body
245
+ exception_matcher = /current_user/
246
+ exception = assert_raises ( NameError ) do
247
+ get :render_post_with_passed_in_scope_without_scope_name
248
+ end
249
+ assert_match exception_matcher , exception . message
240
250
end
241
251
end
242
252
end
0 commit comments