11require 'spec_helper'
22
33describe FastJsonapi ::ObjectSerializer do
4+ class ListOwner
5+ attr_accessor :id , :uuid
6+ end
7+
48 class List
5- attr_accessor :id , :name , :items
9+ attr_accessor :id , :name , :items , :owner , :owner_id , :owner_type , :owner_uuid
610 end
711
812 class ChecklistItem
@@ -19,6 +23,13 @@ class ListSerializer
1923 attributes :name
2024 set_key_transform :dash
2125 has_many :items , polymorphic : true
26+ belongs_to :owner , polymorphic : true , id_method_name : :owner_uuid
27+ belongs_to :owner_block , polymorphic : true , id_method_name : :uuid do
28+ owner = ListOwner . new
29+ owner . id = 2
30+ owner . uuid = 234234234
31+ owner
32+ end
2233 end
2334
2435 let ( :car ) do
@@ -36,6 +47,13 @@ class ListSerializer
3647 checklist_item
3748 end
3849
50+ let ( :owner ) do
51+ owner = ListOwner . new
52+ owner . id = 1
53+ owner . uuid = 123123123
54+ owner
55+ end
56+
3957 context 'when serializing id and type of polymorphic relationships' do
4058 it 'should return correct type when transform_method is specified' do
4159 list = List . new
@@ -47,5 +65,33 @@ class ListSerializer
4765 record_type = list_hash [ :data ] [ :relationships ] [ :items ] [ :data ] [ 1 ] [ :type ]
4866 expect ( record_type ) . to eq 'car' . to_sym
4967 end
68+
69+ it 'should return correct id for belongs_to when id_method_name is specified' do
70+ list = List . new
71+ list . id = 1
72+ list . owner = owner
73+ list . owner_id = owner . id
74+ list . owner_type = owner . class . name
75+ list . owner_uuid = owner . uuid
76+ list_hash = ListSerializer . new ( list ) . to_hash
77+ record_uuid = list_hash [ :data ] [ :relationships ] [ :owner ] [ :data ] [ :id ]
78+ expect ( record_uuid ) . to eq list . owner_uuid
79+ end
80+
81+ it 'should return nil for belongs_to when association is nil' do
82+ list = List . new
83+ list . id = 1
84+ list_hash = ListSerializer . new ( list ) . to_hash
85+ owner_relationship = list_hash [ :data ] [ :relationships ] [ :owner ] [ :data ]
86+ expect ( owner_relationship ) . to be_nil
87+ end
88+
89+ it 'should return nil for belongs_to when association is nil' do
90+ list = List . new
91+ list . id = 1
92+ list_hash = ListSerializer . new ( list ) . to_hash
93+ owner_relationship = list_hash [ :data ] [ :relationships ] [ :'owner-block' ] [ :data ]
94+ expect ( owner_relationship ) . to eq ( id : 234234234 , type : :'list-owner' )
95+ end
5096 end
5197end
0 commit comments