mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
Need to teardown the dynamically added method
This commit is contained in:
parent
a065bc28d1
commit
2edd39d2c2
@ -1,6 +1,17 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
|
||||||
module SerializationScopeTesting
|
module SerializationScopeTesting
|
||||||
|
def self.undef_serializer_dynamic_scope_methods
|
||||||
|
[PostSerializer, PostViewContextSerializer]. each do |serializer_class|
|
||||||
|
instance_method_cache = serializer_class.instance_variable_get(:@_serializer_instance_methods)
|
||||||
|
class_method_cache = serializer_class.class_variable_get(:@@_serializer_instance_methods)[serializer_class]
|
||||||
|
[:view_context, :current_user].each do |scope_method|
|
||||||
|
serializer_class.send(:undef_method, scope_method) if serializer_class.method_defined?(scope_method)
|
||||||
|
instance_method_cache && instance_method_cache.delete(scope_method)
|
||||||
|
class_method_cache && class_method_cache.delete(scope_method)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
class User < ActiveModelSerializers::Model
|
class User < ActiveModelSerializers::Model
|
||||||
attr_accessor :id, :name, :admin
|
attr_accessor :id, :name, :admin
|
||||||
def admin?
|
def admin?
|
||||||
@ -70,6 +81,10 @@ module SerializationScopeTesting
|
|||||||
class DefaultScopeTest < ActionController::TestCase
|
class DefaultScopeTest < ActionController::TestCase
|
||||||
tests PostTestController
|
tests PostTestController
|
||||||
|
|
||||||
|
teardown do
|
||||||
|
SerializationScopeTesting.undef_serializer_dynamic_scope_methods
|
||||||
|
end
|
||||||
|
|
||||||
def test_default_serialization_scope
|
def test_default_serialization_scope
|
||||||
assert_equal :current_user, @controller._serialization_scope
|
assert_equal :current_user, @controller._serialization_scope
|
||||||
end
|
end
|
||||||
@ -120,6 +135,10 @@ module SerializationScopeTesting
|
|||||||
end
|
end
|
||||||
tests PostViewContextTestController
|
tests PostViewContextTestController
|
||||||
|
|
||||||
|
teardown do
|
||||||
|
SerializationScopeTesting.undef_serializer_dynamic_scope_methods
|
||||||
|
end
|
||||||
|
|
||||||
def test_defined_serialization_scope
|
def test_defined_serialization_scope
|
||||||
assert_equal :view_context, @controller._serialization_scope
|
assert_equal :view_context, @controller._serialization_scope
|
||||||
end
|
end
|
||||||
@ -187,6 +206,10 @@ module SerializationScopeTesting
|
|||||||
end
|
end
|
||||||
tests PostViewContextTestController
|
tests PostViewContextTestController
|
||||||
|
|
||||||
|
teardown do
|
||||||
|
SerializationScopeTesting.undef_serializer_dynamic_scope_methods
|
||||||
|
end
|
||||||
|
|
||||||
def test_nil_serialization_scope
|
def test_nil_serialization_scope
|
||||||
assert_nil @controller._serialization_scope
|
assert_nil @controller._serialization_scope
|
||||||
end
|
end
|
||||||
@ -196,14 +219,8 @@ module SerializationScopeTesting
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_nil_scope
|
def test_nil_scope
|
||||||
if Rails.version.start_with?('4.0')
|
exception_matcher = /current_user/
|
||||||
exception_class = NoMethodError
|
exception = assert_raises(NameError) do
|
||||||
exception_matcher = 'admin?'
|
|
||||||
else
|
|
||||||
exception_class = NameError
|
|
||||||
exception_matcher = /admin|current_user/
|
|
||||||
end
|
|
||||||
exception = assert_raises(exception_class) do
|
|
||||||
get :render_post_with_no_scope
|
get :render_post_with_no_scope
|
||||||
end
|
end
|
||||||
assert_match exception_matcher, exception.message
|
assert_match exception_matcher, exception.message
|
||||||
@ -225,18 +242,11 @@ module SerializationScopeTesting
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_serialization_scope_is_nil_and_scope_passed_in_current_user_without_scope_name
|
def test_serialization_scope_is_nil_and_scope_passed_in_current_user_without_scope_name
|
||||||
get :render_post_with_passed_in_scope_without_scope_name
|
exception_matcher = /current_user/
|
||||||
expected_json = {
|
exception = assert_raises(NameError) do
|
||||||
post: {
|
get :render_post_with_passed_in_scope_without_scope_name
|
||||||
id: 4,
|
end
|
||||||
title: 'Title',
|
assert_match exception_matcher, exception.message
|
||||||
body: "The 'scope' is the 'current_user': true",
|
|
||||||
comments: [
|
|
||||||
{ id: 2, body: 'Scoped' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}.to_json
|
|
||||||
assert_equal expected_json, @response.body
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user