jsonapi-deserializable/spec/relationship/has_many_spec.rb
Lucas Hosseini 538e09c5b3 Configurable deserialization + reverse mapping (#10)
* Deserialize all fields.
* Make blocks return hash instead of using fields method.
* Ensure valid payload.
* Make reverse mapping available.
2016-11-27 03:56:42 +01:00

68 lines
1.7 KiB
Ruby

require 'spec_helper'
describe JSONAPI::Deserializable::Relationship, '.has_many' do
let(:deserializable_foo) do
Class.new(JSONAPI::Deserializable::Relationship) do
has_many do |rel, ids, types|
{ foo_ids: ids, foo_types: types, foo_rel: rel }
end
end
end
context 'relationship is not empty' do
let(:payload) do
{
'data' => [
{ 'type' => 'foo', 'id' => 'bar' },
{ 'type' => 'foo', 'id' => 'baz' }
]
}
end
it 'creates corresponding fields' do
actual = deserializable_foo.call(payload)
expected = { foo_ids: %w(bar baz), foo_types: %w(foo foo),
foo_rel: payload }
expect(actual).to eq(expected)
end
it 'defaults to creating ids and types fields' do
klass = Class.new(JSONAPI::Deserializable::Relationship)
actual = klass.call(payload)
expected = { ids: %w(bar baz), types: %w(foo foo) }
expect(actual).to eq(expected)
end
end
context 'relationship is empty' do
it 'creates corresponding fields' do
payload = { 'data' => [] }
actual = deserializable_foo.call(payload)
expected = { foo_ids: [], foo_types: [], foo_rel: payload }
expect(actual).to eq(expected)
end
end
context 'data is absent' do
it 'raises InvalidDocument' do
payload = {}
expect { deserializable_foo.call(payload) }
.to raise_error(JSONAPI::Parser::InvalidDocument)
end
end
context 'relationship is not to-many' do
it 'falls back to default to-one deserialization scheme' do
payload = { 'data' => nil }
actual = deserializable_foo.call(payload)
expected = { id: nil, type: nil }
expect(actual).to eq(expected)
end
end
end