1
1
require 'spec_helper'
2
2
3
3
describe FastJsonapi ::ObjectSerializer do
4
+ class ListOwner
5
+ attr_accessor :id , :uuid
6
+ end
7
+
4
8
class List
5
- attr_accessor :id , :name , :items
9
+ attr_accessor :id , :name , :items , :owner , :owner_id , :owner_type , :owner_uuid
6
10
end
7
11
8
12
class ChecklistItem
@@ -19,6 +23,13 @@ class ListSerializer
19
23
attributes :name
20
24
set_key_transform :dash
21
25
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
22
33
end
23
34
24
35
let ( :car ) do
@@ -36,6 +47,13 @@ class ListSerializer
36
47
checklist_item
37
48
end
38
49
50
+ let ( :owner ) do
51
+ owner = ListOwner . new
52
+ owner . id = 1
53
+ owner . uuid = 123123123
54
+ owner
55
+ end
56
+
39
57
context 'when serializing id and type of polymorphic relationships' do
40
58
it 'should return correct type when transform_method is specified' do
41
59
list = List . new
@@ -47,5 +65,33 @@ class ListSerializer
47
65
record_type = list_hash [ :data ] [ :relationships ] [ :items ] [ :data ] [ 1 ] [ :type ]
48
66
expect ( record_type ) . to eq 'car' . to_sym
49
67
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
50
96
end
51
97
end
0 commit comments