Skip to content

Commit

Permalink
WIP: Adding tests
Browse files Browse the repository at this point in the history
  • Loading branch information
bf4 committed Aug 18, 2015
1 parent 44984c8 commit a19096d
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 16 deletions.
4 changes: 4 additions & 0 deletions docs/general/adapters.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,7 @@ If you want to have a root key in your responses you should use the Json adapter
```ruby
ActiveModel::Serializer.config.adapter = :json
```

## Registering an adapter

ActiveModel::Serializer::Adapter.register(:my_adapter, MyAdapter)
5 changes: 1 addition & 4 deletions lib/active_model/serializer/adapter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ def adapter_map

def register(name, klass)
adapter_map.update(name.to_s.underscore => klass)
self
end

def get(adapter)
Expand All @@ -47,10 +48,6 @@ def find_by_name(adapter_name)
end
private :find_by_name

def get!(adapter)
get(adapter) do |failure_message| fail ArgumentError, failure_message end
end

def adapters
adapter_map.keys.sort
end
Expand Down
11 changes: 0 additions & 11 deletions test/adapter_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,6 @@ def test_serializer
assert_equal @serializer, @adapter.serializer
end

def test_adapter_class_for_known_adapter
klass = ActiveModel::Serializer::Adapter.adapter_class(:json_api)
assert_equal ActiveModel::Serializer::Adapter::JsonApi, klass
end

def test_adapter_class_for_unknown_adapter
assert_raises(ArgumentError) do
ActiveModel::Serializer::Adapter.adapter_class(:json_simple)
end
end

def test_create_adapter
adapter = ActiveModel::Serializer::Adapter.create(@serializer)
assert_equal ActiveModel::Serializer::Adapter::FlattenJson, adapter.class
Expand Down
88 changes: 87 additions & 1 deletion test/serializers/adapter_for_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def test_overwrite_adapter_with_symbol
adapter = ActiveModel::Serializer.adapter
assert_equal ActiveModel::Serializer::Adapter::Null, adapter
ensure

ActiveModel::Serializer.config.adapter = @previous_adapter
end

def test_overwrite_adapter_with_class
Expand All @@ -45,6 +45,92 @@ def test_raises_exception_if_it_does_not_know_hot_to_infer_adapter
ActiveModel::Serializer.adapter
end
end

def test_adapter_class_for_known_adapter
klass = ActiveModel::Serializer::Adapter.adapter_class(:json_api)
assert_equal ActiveModel::Serializer::Adapter::JsonApi, klass
end

def test_adapter_class_for_unknown_adapter
assert_raises(ArgumentError) do
ActiveModel::Serializer::Adapter.adapter_class(:json_simple)
end
end

def test_adapter_map
assert_equal ActiveModel::Serializer::Adapter.adapter_map, {
"json" => ActiveModel::Serializer::Adapter::Json,
"json_api" => ActiveModel::Serializer::Adapter::JsonApi,
"flatten_json" => ActiveModel::Serializer::Adapter::FlattenJson,
"null" => ActiveModel::Serializer::Adapter::Null
}
end

def test_adapters
assert_equal ActiveModel::Serializer::Adapter.adapters.sort, [
"flatten_json",
"json",
"json_api",
"null",
]
end

def test_get_adapter_by_string_name
assert_equal ActiveModel::Serializer::Adapter.get("json"), ActiveModel::Serializer::Adapter::Json
end

def test_get_adapter_by_symbol_name
assert_equal ActiveModel::Serializer::Adapter.get(:json), ActiveModel::Serializer::Adapter::Json
end

def test_get_adapter_by_class
klass = ActiveModel::Serializer::Adapter::Json
assert_equal ActiveModel::Serializer::Adapter.get(klass), klass
end

# def test_get_adapter_from_environment
# ActiveModel::Serializer::Adapter.const_set(:ClassFromEnvironment, Class.new)
# # test
# klass = ActiveModel::Serializer::Adapter::ClassFromEnvironment
# name = "class_from_environment"
# assert_equal ActiveModel::Serializer::Adapter.get(name), klass
# assert ActiveModel::Serializer::Adapter.adapters.include?(name)
# # cleanup
# ActiveModel::Serializer::Adapter::ADAPTER_MAP.delete(name)
# ActiveModel::Serializer::Adapter.send(:remove_const, :ClassFromEnvironment)
# end

def test_get_adapter_for_unknown_name
assert_raises(ArgumentError) do
ActiveModel::Serializer::Adapter.get(:json_simple)
end
end

def test_adapter
assert_equal ActiveModel::Serializer.config.adapter, :flatten_json
assert_equal ActiveModel::Serializer.adapter, ActiveModel::Serializer::Adapter::FlattenJson
end

def test_register_adapter
new_adapter_name = :foo
new_adapter_klass = Class.new
ActiveModel::Serializer::Adapter.register(new_adapter_name, new_adapter_klass)
assert ActiveModel::Serializer::Adapter.adapters.include?("foo")
assert ActiveModel::Serializer::Adapter.get(:foo), new_adapter_klass
# cleanup
ActiveModel::Serializer::Adapter::ADAPTER_MAP.delete(new_adapter_name.to_s)
end

# def test_inherited_adapter_hooks
# Object.const_set(:MyAdapter, Class.new)
# my_adapter = MyAdapter
# ActiveModel::Serializer::Adapter.inherited(my_adapter)
# assert_equal ActiveModel::Serializer::Adapter.get(:my_adapter), MyAdapter
# # ActiveModel::Serializer::Adapter.register(subclass.to_s.demodulize, subclass)
# # cleanup
# ActiveModel::Serializer::Adapter::ADAPTER_MAP.delete("my_adapter")
# ActiveModel::Serializer::Adapter.send(:remove_const, :MyAdapter)
# end
end
end
end
6 changes: 6 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@
@capture_warnings.after_tests
end
require 'active_model_serializers'
# eager load autoloaded adapters
require 'active_model/serializer/adapter'
ActiveModel::Serializer::Adapter::Null
ActiveModel::Serializer::Adapter::Json
ActiveModel::Serializer::Adapter::FlattenJson
ActiveModel::Serializer::Adapter::JsonApi

# Use cleaner stream testing interface from Rails 5 if available
# see https://github.com/rails/rails/blob/29959eb59d/activesupport/lib/active_support/testing/stream.rb
Expand Down

0 comments on commit a19096d

Please sign in to comment.