jsonapi-deserializable/spec/resource/DSL/has_one_spec.rb
2017-07-14 15:07:02 +02:00

95 lines
2.2 KiB
Ruby

require 'spec_helper'
describe JSONAPI::Deserializable::Resource, '.has_one' do
let(:deserializable_foo) do
Class.new(JSONAPI::Deserializable::Resource) do
has_one :foo do |rel, id, type|
Hash[foo_id: id, foo_type: type, foo_rel: rel]
end
end
end
context 'relationship is not nil' do
let(:payload) do
{
'data' => {
'type' => 'foo',
'relationships' => {
'foo' => {
'data' => { 'type' => 'foo', 'id' => 'bar' }
}
}
}
}
end
it 'creates corresponding fields' do
actual = deserializable_foo.call(payload)
expected = { foo_id: 'bar', foo_type: 'foo',
foo_rel: payload['data']['relationships']['foo'] }
expect(actual).to eq(expected)
end
it 'defaults to creating #{name}_id and #{name}_type' do
klass = Class.new(JSONAPI::Deserializable::Resource) do
has_one
end
actual = klass.call(payload)
expected = { foo_id: 'bar', foo_type: 'foo' }
expect(actual).to eq(expected)
end
end
context 'relationship value is nil' do
it 'creates corresponding fields' do
payload = {
'data' => {
'type' => 'foo',
'relationships' => {
'foo' => {
'data' => nil
}
}
}
}
actual = deserializable_foo.call(payload)
expected = { foo_id: nil, foo_type: nil,
foo_rel: payload['data']['relationships']['foo'] }
expect(actual).to eq(expected)
end
end
context 'relationship is absent' do
it 'does not create corresponding fields' do
payload = {
'data' => {
'type' => 'foo',
'relationships' => {}
}
}
actual = deserializable_foo.call(payload)
expected = {}
expect(actual).to eq(expected)
end
end
context 'there is no relationships member' do
it 'does not create corresponding fields' do
payload = {
'data' => {
'type' => 'foo'
}
}
actual = deserializable_foo.call(payload)
expected = {}
expect(actual).to eq(expected)
end
end
end