@@ -89,6 +89,20 @@ class Employee < TestResource
8989 has_one :chief , klass : 'Employee'
9090end
9191
92+ module CrossNamespaceTwo
93+ class Nail < TestResource
94+ property :size
95+ end
96+ end
97+
98+ module CrossNamespaceOne
99+ class Hammer < TestResource
100+ property :brand
101+
102+ has_many :nails , class : CrossNamespaceTwo ::Nail
103+ end
104+ end
105+
92106class AssociationTest < MiniTest ::Test
93107
94108 def test_default_properties_no_changes
@@ -1070,4 +1084,62 @@ def test_does_not_load_include_from_dataset
10701084 assert_nil ( records . first . chief )
10711085 end
10721086
1087+ def test_cross_namespace_resource_references
1088+ stub_request ( :get , 'http://example.com/hammers?include=nails' )
1089+ . to_return (
1090+ headers : {
1091+ content_type : 'application/vnd.api+json'
1092+ } , body : {
1093+ data : [
1094+ {
1095+ id : '1' ,
1096+ type : 'hammers' ,
1097+ attributes : {
1098+ brand : 'Hardware Store'
1099+ } ,
1100+ relationships : {
1101+ nails : { data : [ { id : '2' , type : 'nails' } ] }
1102+ }
1103+ } ,
1104+ {
1105+ id : '2' ,
1106+ type : 'hammers' ,
1107+ attributes : {
1108+ brand : 'Hardware Store'
1109+ } ,
1110+ relationships : {
1111+ nails : { data : [ { id : '3' , type : 'nails' } ] }
1112+ }
1113+ }
1114+ ] ,
1115+ included : [
1116+ {
1117+ id : '2' ,
1118+ type : 'nails' ,
1119+ attributes : {
1120+ size : 10
1121+ }
1122+ } ,
1123+ {
1124+ id : '3' ,
1125+ type : 'nails' ,
1126+ attributes : {
1127+ size : 8
1128+ }
1129+ }
1130+ ]
1131+ } . to_json )
1132+
1133+ records = CrossNamespaceOne ::Hammer . includes ( :nails ) . to_a
1134+
1135+ assert_equal ( 2 , records . size )
1136+ assert_equal ( '1' , records . first . id )
1137+ assert_equal ( '2' , records . second . id )
1138+ assert_equal ( '2' , records . first . nails . first . id )
1139+ assert_equal ( '3' , records . second . nails . first . id )
1140+
1141+ assert_equal ( 1 , records . first . nails . size )
1142+ assert_equal ( 1 , records . second . nails . size )
1143+ end
1144+
10731145end
0 commit comments