Skip to content

Commit a19096d

Browse files
committed
WIP: Adding tests
1 parent 44984c8 commit a19096d

File tree

5 files changed

+98
-16
lines changed

5 files changed

+98
-16
lines changed

docs/general/adapters.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,7 @@ If you want to have a root key in your responses you should use the Json adapter
4949
```ruby
5050
ActiveModel::Serializer.config.adapter = :json
5151
```
52+
53+
## Registering an adapter
54+
55+
ActiveModel::Serializer::Adapter.register(:my_adapter, MyAdapter)

lib/active_model/serializer/adapter.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def adapter_map
2121

2222
def register(name, klass)
2323
adapter_map.update(name.to_s.underscore => klass)
24+
self
2425
end
2526

2627
def get(adapter)
@@ -47,10 +48,6 @@ def find_by_name(adapter_name)
4748
end
4849
private :find_by_name
4950

50-
def get!(adapter)
51-
get(adapter) do |failure_message| fail ArgumentError, failure_message end
52-
end
53-
5451
def adapters
5552
adapter_map.keys.sort
5653
end

test/adapter_test.rb

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,6 @@ def test_serializer
1919
assert_equal @serializer, @adapter.serializer
2020
end
2121

22-
def test_adapter_class_for_known_adapter
23-
klass = ActiveModel::Serializer::Adapter.adapter_class(:json_api)
24-
assert_equal ActiveModel::Serializer::Adapter::JsonApi, klass
25-
end
26-
27-
def test_adapter_class_for_unknown_adapter
28-
assert_raises(ArgumentError) do
29-
ActiveModel::Serializer::Adapter.adapter_class(:json_simple)
30-
end
31-
end
32-
3322
def test_create_adapter
3423
adapter = ActiveModel::Serializer::Adapter.create(@serializer)
3524
assert_equal ActiveModel::Serializer::Adapter::FlattenJson, adapter.class

test/serializers/adapter_for_test.rb

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def test_overwrite_adapter_with_symbol
2020
adapter = ActiveModel::Serializer.adapter
2121
assert_equal ActiveModel::Serializer::Adapter::Null, adapter
2222
ensure
23-
23+
ActiveModel::Serializer.config.adapter = @previous_adapter
2424
end
2525

2626
def test_overwrite_adapter_with_class
@@ -45,6 +45,92 @@ def test_raises_exception_if_it_does_not_know_hot_to_infer_adapter
4545
ActiveModel::Serializer.adapter
4646
end
4747
end
48+
49+
def test_adapter_class_for_known_adapter
50+
klass = ActiveModel::Serializer::Adapter.adapter_class(:json_api)
51+
assert_equal ActiveModel::Serializer::Adapter::JsonApi, klass
52+
end
53+
54+
def test_adapter_class_for_unknown_adapter
55+
assert_raises(ArgumentError) do
56+
ActiveModel::Serializer::Adapter.adapter_class(:json_simple)
57+
end
58+
end
59+
60+
def test_adapter_map
61+
assert_equal ActiveModel::Serializer::Adapter.adapter_map, {
62+
"json" => ActiveModel::Serializer::Adapter::Json,
63+
"json_api" => ActiveModel::Serializer::Adapter::JsonApi,
64+
"flatten_json" => ActiveModel::Serializer::Adapter::FlattenJson,
65+
"null" => ActiveModel::Serializer::Adapter::Null
66+
}
67+
end
68+
69+
def test_adapters
70+
assert_equal ActiveModel::Serializer::Adapter.adapters.sort, [
71+
"flatten_json",
72+
"json",
73+
"json_api",
74+
"null",
75+
]
76+
end
77+
78+
def test_get_adapter_by_string_name
79+
assert_equal ActiveModel::Serializer::Adapter.get("json"), ActiveModel::Serializer::Adapter::Json
80+
end
81+
82+
def test_get_adapter_by_symbol_name
83+
assert_equal ActiveModel::Serializer::Adapter.get(:json), ActiveModel::Serializer::Adapter::Json
84+
end
85+
86+
def test_get_adapter_by_class
87+
klass = ActiveModel::Serializer::Adapter::Json
88+
assert_equal ActiveModel::Serializer::Adapter.get(klass), klass
89+
end
90+
91+
# def test_get_adapter_from_environment
92+
# ActiveModel::Serializer::Adapter.const_set(:ClassFromEnvironment, Class.new)
93+
# # test
94+
# klass = ActiveModel::Serializer::Adapter::ClassFromEnvironment
95+
# name = "class_from_environment"
96+
# assert_equal ActiveModel::Serializer::Adapter.get(name), klass
97+
# assert ActiveModel::Serializer::Adapter.adapters.include?(name)
98+
# # cleanup
99+
# ActiveModel::Serializer::Adapter::ADAPTER_MAP.delete(name)
100+
# ActiveModel::Serializer::Adapter.send(:remove_const, :ClassFromEnvironment)
101+
# end
102+
103+
def test_get_adapter_for_unknown_name
104+
assert_raises(ArgumentError) do
105+
ActiveModel::Serializer::Adapter.get(:json_simple)
106+
end
107+
end
108+
109+
def test_adapter
110+
assert_equal ActiveModel::Serializer.config.adapter, :flatten_json
111+
assert_equal ActiveModel::Serializer.adapter, ActiveModel::Serializer::Adapter::FlattenJson
112+
end
113+
114+
def test_register_adapter
115+
new_adapter_name = :foo
116+
new_adapter_klass = Class.new
117+
ActiveModel::Serializer::Adapter.register(new_adapter_name, new_adapter_klass)
118+
assert ActiveModel::Serializer::Adapter.adapters.include?("foo")
119+
assert ActiveModel::Serializer::Adapter.get(:foo), new_adapter_klass
120+
# cleanup
121+
ActiveModel::Serializer::Adapter::ADAPTER_MAP.delete(new_adapter_name.to_s)
122+
end
123+
124+
# def test_inherited_adapter_hooks
125+
# Object.const_set(:MyAdapter, Class.new)
126+
# my_adapter = MyAdapter
127+
# ActiveModel::Serializer::Adapter.inherited(my_adapter)
128+
# assert_equal ActiveModel::Serializer::Adapter.get(:my_adapter), MyAdapter
129+
# # ActiveModel::Serializer::Adapter.register(subclass.to_s.demodulize, subclass)
130+
# # cleanup
131+
# ActiveModel::Serializer::Adapter::ADAPTER_MAP.delete("my_adapter")
132+
# ActiveModel::Serializer::Adapter.send(:remove_const, :MyAdapter)
133+
# end
48134
end
49135
end
50136
end

test/test_helper.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@
1818
@capture_warnings.after_tests
1919
end
2020
require 'active_model_serializers'
21+
# eager load autoloaded adapters
22+
require 'active_model/serializer/adapter'
23+
ActiveModel::Serializer::Adapter::Null
24+
ActiveModel::Serializer::Adapter::Json
25+
ActiveModel::Serializer::Adapter::FlattenJson
26+
ActiveModel::Serializer::Adapter::JsonApi
2127

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

0 commit comments

Comments
 (0)