1- using System . Collections . Generic ;
1+ using System ;
2+ using System . Collections . Generic ;
23using JsonApiDotNetCore . Builders ;
34using JsonApiDotNetCore . Configuration ;
45using JsonApiDotNetCore . Internal . Generics ;
@@ -196,6 +197,98 @@ public void Immutable_Attrs_Are_Not_Included_In_AttributesToUpdate()
196197 Assert . False ( attr . Key . IsImmutable ) ;
197198 }
198199
200+ [ Fact ]
201+ public void Can_Deserialize_Independent_Side_Of_One_To_One_Relationship ( )
202+ {
203+ // arrange
204+ var contextGraphBuilder = new ContextGraphBuilder ( ) ;
205+ contextGraphBuilder . AddResource < Independent > ( "independents" ) ;
206+ contextGraphBuilder . AddResource < Dependent > ( "dependents" ) ;
207+ var contextGraph = contextGraphBuilder . Build ( ) ;
208+
209+ var jsonApiContextMock = new Mock < IJsonApiContext > ( ) ;
210+ jsonApiContextMock . SetupAllProperties ( ) ;
211+ jsonApiContextMock . Setup ( m => m . ContextGraph ) . Returns ( contextGraph ) ;
212+ jsonApiContextMock . Setup ( m => m . AttributesToUpdate ) . Returns ( new Dictionary < AttrAttribute , object > ( ) ) ;
213+
214+ var jsonApiOptions = new JsonApiOptions ( ) ;
215+ jsonApiContextMock . Setup ( m => m . Options ) . Returns ( jsonApiOptions ) ;
216+
217+ var genericProcessorFactoryMock = new Mock < IGenericProcessorFactory > ( ) ;
218+
219+ var deserializer = new JsonApiDeSerializer ( jsonApiContextMock . Object , genericProcessorFactoryMock . Object ) ;
220+
221+ var property = Guid . NewGuid ( ) . ToString ( ) ;
222+ var content = new Document
223+ {
224+ Data = new DocumentData
225+ {
226+ Type = "independents" ,
227+ Id = "1" ,
228+ Attributes = new Dictionary < string , object > {
229+ { "property" , property }
230+ }
231+ }
232+ } ;
233+
234+ var contentString = JsonConvert . SerializeObject ( content ) ;
235+
236+ // act
237+ var result = deserializer . Deserialize < Independent > ( contentString ) ;
238+
239+ // assert
240+ Assert . NotNull ( result ) ;
241+ Assert . Equal ( property , result . Property ) ;
242+ }
243+
244+ [ Fact ]
245+ public void Can_Deserialize_Independent_Side_Of_One_To_One_Relationship_With_Relationship_Body ( )
246+ {
247+ // arrange
248+ var contextGraphBuilder = new ContextGraphBuilder ( ) ;
249+ contextGraphBuilder . AddResource < Independent > ( "independents" ) ;
250+ contextGraphBuilder . AddResource < Dependent > ( "dependents" ) ;
251+ var contextGraph = contextGraphBuilder . Build ( ) ;
252+
253+ var jsonApiContextMock = new Mock < IJsonApiContext > ( ) ;
254+ jsonApiContextMock . SetupAllProperties ( ) ;
255+ jsonApiContextMock . Setup ( m => m . ContextGraph ) . Returns ( contextGraph ) ;
256+ jsonApiContextMock . Setup ( m => m . AttributesToUpdate ) . Returns ( new Dictionary < AttrAttribute , object > ( ) ) ;
257+
258+ var jsonApiOptions = new JsonApiOptions ( ) ;
259+ jsonApiContextMock . Setup ( m => m . Options ) . Returns ( jsonApiOptions ) ;
260+
261+ var genericProcessorFactoryMock = new Mock < IGenericProcessorFactory > ( ) ;
262+
263+ var deserializer = new JsonApiDeSerializer ( jsonApiContextMock . Object , genericProcessorFactoryMock . Object ) ;
264+
265+ var property = Guid . NewGuid ( ) . ToString ( ) ;
266+ var content = new Document
267+ {
268+ Data = new DocumentData
269+ {
270+ Type = "independents" ,
271+ Id = "1" ,
272+ Attributes = new Dictionary < string , object > {
273+ { "property" , property }
274+ } ,
275+ // a common case for this is deserialization in unit tests
276+ Relationships = new Dictionary < string , RelationshipData > {
277+ { "dependent" , new RelationshipData { } }
278+ }
279+ }
280+ } ;
281+
282+ var contentString = JsonConvert . SerializeObject ( content ) ;
283+
284+ // act
285+ var result = deserializer . Deserialize < Independent > ( contentString ) ;
286+
287+ // assert
288+ Assert . NotNull ( result ) ;
289+ Assert . Equal ( property , result . Property ) ;
290+ }
291+
199292 private class TestResource : Identifiable
200293 {
201294 [ Attr ( "complex-member" ) ]
@@ -215,5 +308,17 @@ private class ComplexType
215308 {
216309 public string CompoundName { get ; set ; }
217310 }
311+
312+ private class Independent : Identifiable
313+ {
314+ [ Attr ( "property" ) ] public string Property { get ; set ; }
315+ [ HasOne ( "dependent" ) ] public Dependent Dependent { get ; set ; }
316+ }
317+
318+ private class Dependent : Identifiable
319+ {
320+ [ HasOne ( "independent" ) ] public Independent Independent { get ; set ; }
321+ public int IndependentId { get ; set ; }
322+ }
218323 }
219324}
0 commit comments