active_model_serializers/test/adapter_test.rb
2018-12-17 16:54:56 +01:00

70 lines
2.4 KiB
Ruby

# frozen_string_literal: true
require 'test_helper'
module ActiveModelSerializers
class AdapterTest < ActiveSupport::TestCase
def setup
profile = Profile.new
@serializer = ProfileSerializer.new(profile)
@adapter = ActiveModelSerializers::Adapter::Base.new(@serializer)
end
def test_serializable_hash_is_abstract_method
assert_raises(NotImplementedError) do
@adapter.serializable_hash(only: [:name])
end
end
def test_serialization_options_ensures_option_is_a_hash
adapter = Class.new(ActiveModelSerializers::Adapter::Base) do
def serializable_hash(options = nil)
serialization_options(options)
end
end.new(@serializer)
assert_equal({}, adapter.serializable_hash(nil))
assert_equal({}, adapter.serializable_hash({}))
ensure
ActiveModelSerializers::Adapter.adapter_map.delete_if { |k, _| k =~ /class/ }
end
def test_serialization_options_ensures_option_is_one_of_valid_options
adapter = Class.new(ActiveModelSerializers::Adapter::Base) do
def serializable_hash(options = nil)
serialization_options(options)
end
end.new(@serializer)
filtered_options = { now: :see_me, then: :not }
valid_options = ActiveModel::Serializer::SERIALIZABLE_HASH_VALID_KEYS.each_with_object({}) do |option, result|
result[option] = option
end
assert_equal(valid_options, adapter.serializable_hash(filtered_options.merge(valid_options)))
ensure
ActiveModelSerializers::Adapter.adapter_map.delete_if { |k, _| k =~ /class/ }
end
def test_serializer
assert_equal @serializer, @adapter.serializer
end
def test_create_adapter
adapter = ActiveModelSerializers::Adapter.create(@serializer)
assert_equal ActiveModelSerializers::Adapter::Attributes, adapter.class
end
def test_create_adapter_with_override
adapter = ActiveModelSerializers::Adapter.create(@serializer, adapter: :json_api)
assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter.class
end
def test_inflected_adapter_class_for_known_adapter
ActiveSupport::Inflector.inflections(:en) { |inflect| inflect.acronym 'API' }
klass = ActiveModelSerializers::Adapter.adapter_class(:json_api)
ActiveSupport::Inflector.inflections.acronyms.clear
assert_equal ActiveModelSerializers::Adapter::JsonApi, klass
end
end
end