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
[View source]

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

[View source]

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

[View source]

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

[View source]

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