Skip to content

Commit ac57c75

Browse files
committed
feat(RelationshipData): expose IsHasMany property
1 parent 8d10016 commit ac57c75

File tree

2 files changed

+116
-14
lines changed

2 files changed

+116
-14
lines changed

src/JsonApiDotNetCore/Models/RelationshipData.cs

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,41 @@ public class RelationshipData
1111
public Links Links { get; set; }
1212

1313
[JsonProperty("data")]
14-
public object ExposedData {
15-
get {
16-
if(ManyData != null)
14+
public object ExposedData
15+
{
16+
get
17+
{
18+
if (ManyData != null)
1719
return ManyData;
1820
return SingleData;
1921
}
20-
set {
21-
if(value is IEnumerable)
22-
if(value is JObject jObject)
23-
SingleData = jObject.ToObject<Dictionary<string, object>>();
24-
else if(value is JArray jArray)
25-
ManyData = jArray.ToObject<List<Dictionary<string, object>>>();
26-
else
27-
ManyData = (List<Dictionary<string, object>>)value;
28-
else
22+
set
23+
{
24+
if (value is JObject jObject)
25+
SingleData = jObject.ToObject<Dictionary<string, object>>();
26+
else if (value is Dictionary<string, object> dict)
2927
SingleData = (Dictionary<string, object>)value;
28+
else
29+
SetManyData(value);
3030
}
31-
}
31+
}
32+
33+
private void SetManyData(object value)
34+
{
35+
IsHasMany = true;
36+
if (value is JArray jArray)
37+
ManyData = jArray.ToObject<List<Dictionary<string, object>>>();
38+
else
39+
ManyData = (List<Dictionary<string, object>>)value;
40+
}
3241

3342
[JsonIgnore]
3443
public List<Dictionary<string, object>> ManyData { get; set; }
35-
44+
3645
[JsonIgnore]
3746
public Dictionary<string, object> SingleData { get; set; }
47+
48+
[JsonIgnore]
49+
public bool IsHasMany { get; private set; }
3850
}
3951
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
using JsonApiDotNetCore.Models;
2+
using System.Collections.Generic;
3+
using Xunit;
4+
using Newtonsoft.Json.Linq;
5+
6+
namespace UnitTests.Models
7+
{
8+
public class RelationshipDataTests
9+
{
10+
[Fact]
11+
public void Setting_ExposedData_To_List_Sets_ManyData()
12+
{
13+
// arrange
14+
var relationshipData = new RelationshipData();
15+
var relationships = new List<Dictionary<string, object>> {
16+
new Dictionary<string, object> {
17+
{ "authors", new { } }
18+
}
19+
};
20+
21+
// act
22+
relationshipData.ExposedData = relationships;
23+
24+
// assert
25+
Assert.NotEmpty(relationshipData.ManyData);
26+
Assert.True(relationshipData.ManyData[0].ContainsKey("authors"));
27+
Assert.True(relationshipData.IsHasMany);
28+
}
29+
30+
[Fact]
31+
public void Setting_ExposedData_To_JArray_Sets_ManyData()
32+
{
33+
// arrange
34+
var relationshipData = new RelationshipData();
35+
var relationshipsJson = @"[
36+
{
37+
""authors"": {}
38+
}
39+
]";
40+
41+
var relationships = JArray.Parse(relationshipsJson);
42+
43+
// act
44+
relationshipData.ExposedData = relationships;
45+
46+
// assert
47+
Assert.NotEmpty(relationshipData.ManyData);
48+
Assert.True(relationshipData.ManyData[0].ContainsKey("authors"));
49+
Assert.True(relationshipData.IsHasMany);
50+
}
51+
52+
[Fact]
53+
public void Setting_ExposedData_To_Dictionary_Sets_SingleData()
54+
{
55+
// arrange
56+
var relationshipData = new RelationshipData();
57+
var relationship = new Dictionary<string, object> {
58+
{ "authors", new { } }
59+
};
60+
61+
// act
62+
relationshipData.ExposedData = relationship;
63+
64+
// assert
65+
Assert.NotNull(relationshipData.SingleData);
66+
Assert.True(relationshipData.SingleData.ContainsKey("authors"));
67+
Assert.False(relationshipData.IsHasMany);
68+
}
69+
70+
[Fact]
71+
public void Setting_ExposedData_To_JObject_Sets_SingleData()
72+
{
73+
// arrange
74+
var relationshipData = new RelationshipData();
75+
var relationshipJson = @"{
76+
""authors"": {}
77+
}";
78+
79+
var relationship = JObject.Parse(relationshipJson);
80+
81+
// act
82+
relationshipData.ExposedData = relationship;
83+
84+
// assert
85+
Assert.NotNull(relationshipData.SingleData);
86+
Assert.True(relationshipData.SingleData.ContainsKey("authors"));
87+
Assert.False(relationshipData.IsHasMany);
88+
}
89+
}
90+
}

0 commit comments

Comments
 (0)