@@ -87,6 +87,95 @@ public function test_to_many_relationship_meta()
8787 );
8888 }
8989
90+ public function test_to_one_linkage_meta ()
91+ {
92+ $ role = (object ) ['id ' => '1 ' , 'name ' => 'admin ' ];
93+
94+ $ this ->api ->resource (
95+ new MockResource (
96+ 'users ' ,
97+ models: [(object ) ['id ' => '1 ' , 'role ' => $ role ]],
98+ endpoints: [Show::make ()],
99+ fields: [
100+ ToOne::make ('role ' )
101+ ->get (fn ($ user ) => $ user ->role )
102+ ->linkageMeta ([Attribute::make ('active ' )->get (fn () => true )]),
103+ ],
104+ ),
105+ );
106+
107+ $ this ->api ->resource (new MockResource ('roles ' , models: [$ role ]));
108+
109+ $ response = $ this ->api ->handle ($ this ->buildRequest ('GET ' , '/users/1 ' ));
110+
111+ $ this ->assertJsonApiDocumentSubset (
112+ [
113+ 'data ' => [
114+ 'relationships ' => [
115+ 'role ' => [
116+ 'data ' => [
117+ 'type ' => 'roles ' ,
118+ 'id ' => '1 ' ,
119+ 'meta ' => ['active ' => true ],
120+ ],
121+ ],
122+ ],
123+ ],
124+ ],
125+ $ response ->getBody (),
126+ );
127+ }
128+
129+ public function test_to_many_linkage_meta ()
130+ {
131+ $ role1 = (object ) ['id ' => '1 ' , 'name ' => 'admin ' , 'assignedAt ' => '2024-01-01 ' ];
132+ $ role2 = (object ) ['id ' => '2 ' , 'name ' => 'editor ' , 'assignedAt ' => '2024-01-02 ' ];
133+
134+ $ this ->api ->resource (
135+ new MockResource (
136+ 'users ' ,
137+ models: [(object ) ['id ' => '1 ' , 'roles ' => [$ role1 , $ role2 ]]],
138+ endpoints: [Show::make ()],
139+ fields: [
140+ ToMany::make ('roles ' )
141+ ->get (fn ($ user ) => $ user ->roles )
142+ ->withLinkage ()
143+ ->linkageMeta ([
144+ Attribute::make ('assignedAt ' )->get (fn ($ role ) => $ role ->assignedAt ),
145+ ]),
146+ ],
147+ ),
148+ );
149+
150+ $ this ->api ->resource (new MockResource ('roles ' , models: [$ role1 , $ role2 ]));
151+
152+ $ response = $ this ->api ->handle ($ this ->buildRequest ('GET ' , '/users/1 ' ));
153+
154+ $ this ->assertJsonApiDocumentSubset (
155+ [
156+ 'data ' => [
157+ 'relationships ' => [
158+ 'roles ' => [
159+ 'data ' => [
160+ [
161+ 'type ' => 'roles ' ,
162+ 'id ' => '1 ' ,
163+ 'meta ' => ['assignedAt ' => '2024-01-01 ' ],
164+ ],
165+ [
166+ 'type ' => 'roles ' ,
167+ 'id ' => '2 ' ,
168+ 'meta ' => ['assignedAt ' => '2024-01-02 ' ],
169+ ],
170+ ],
171+ ],
172+ ],
173+ ],
174+ ],
175+ $ response ->getBody (),
176+ );
177+ }
178+
90179 public function test_show_endpoint_meta ()
91180 {
92181 $ this ->api ->resource (
0 commit comments