Module: ActionController::SerializationAssertions

Extended by:
ActiveSupport::Concern
Defined in:
lib/action_controller/serialization_test_case.rb

Instance Method Summary collapse

Instance Method Details

#assert_serializer(options = {}, message = nil) ⇒ Object

Asserts that the request was rendered with the appropriate serializers.

# assert that the "PostSerializer" serializer was rendered
assert_serializer "PostSerializer"

# assert that the instance of PostSerializer was rendered
assert_serializer PostSerializer

# assert that the "PostSerializer" serializer was rendered
assert_serializer :post_serializer

# assert that the rendered serializer starts with "Post"
assert_serializer %r{\APost.+\Z}

# assert that no serializer was rendered
assert_serializer nil


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
# File 'lib/action_controller/serialization_test_case.rb', line 46

def assert_serializer(options = {}, message = nil)
  # Force body to be read in case the template is being streamed.
  response.body

  rendered = @serializers
  msg = message || "expecting <#{options.inspect}> but rendering with <#{rendered.keys}>"

  matches_serializer = case options
                       when lambda { |options| options.kind_of?(Class) && options < ActiveModel::Serializer }
                         rendered.any? do |serializer, count|
                           options.name == serializer
                         end
                       when Symbol
                         options = options.to_s.camelize
                         rendered.any? do |serializer, count|
                           serializer == options
                         end
                       when String
                         !options.empty? && rendered.any? do |serializer, count|
                           serializer == options
                         end
                       when Regexp
                         rendered.any? do |serializer, count|
                           serializer.match(options)
                         end
                       when NilClass
                         rendered.blank?
                       else
                         raise ArgumentError, "assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil"
                       end
  assert matches_serializer, msg
end

#process(*args) ⇒ Object



23
24
25
26
# File 'lib/action_controller/serialization_test_case.rb', line 23

def process(*args)
  @serializers = Hash.new(0)
  super
end

#setup_serialization_subscriptionsObject



10
11
12
13
14
15
16
17
# File 'lib/action_controller/serialization_test_case.rb', line 10

def setup_serialization_subscriptions
  @serializers = Hash.new(0)

  ActiveSupport::Notifications.subscribe("!serialize.active_model_serializers") do |name, start, finish, id, payload|
    serializer = payload[:serializer]
    @serializers[serializer] += 1
  end
end

#teardown_serialization_subscriptionsObject



19
20
21
# File 'lib/action_controller/serialization_test_case.rb', line 19

def teardown_serialization_subscriptions
  ActiveSupport::Notifications.unsubscribe("!serialize.active_model_serializers")
end