From 4446ff0171f694363c85673c61573ff6c1e5d697 Mon Sep 17 00:00:00 2001 From: Corey Floyd Date: Tue, 8 May 2018 08:27:54 -0500 Subject: [PATCH 1/3] #218 Defaults data to be included in relationships rather than only when "include" for that relationship is set. --- .../Builders/DocumentBuilder.cs | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs b/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs index 0e43225b35..3edea50e13 100644 --- a/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs +++ b/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs @@ -158,20 +158,17 @@ private void AddRelationships(DocumentData data, ContextEntity contextEntity, II if (r.DocumentLinks.HasFlag(Link.Related)) relationshipData.Links.Related = linkBuilder.GetRelatedRelationLink(contextEntity.EntityName, entity.StringId, r.PublicRelationshipName); } - - if (RelationshipIsIncluded(r.PublicRelationshipName)) - { - var navigationEntity = _jsonApiContext.ContextGraph - .GetRelationship(entity, r.InternalRelationshipName); - - if (navigationEntity == null) - relationshipData.SingleData = null; - else if (navigationEntity is IEnumerable) - relationshipData.ManyData = GetRelationships((IEnumerable)navigationEntity); - else - relationshipData.SingleData = GetRelationship(navigationEntity); - } - + + var navigationEntity = _jsonApiContext.ContextGraph + .GetRelationship(entity, r.InternalRelationshipName); + + if (navigationEntity == null) + relationshipData.SingleData = null; + else if (navigationEntity is IEnumerable) + relationshipData.ManyData = GetRelationships((IEnumerable)navigationEntity); + else + relationshipData.SingleData = GetRelationship(navigationEntity); + data.Relationships.Add(r.PublicRelationshipName, relationshipData); }); } From dccaf3271d819c5fdf406c6a017c87c43e09ebaa Mon Sep 17 00:00:00 2001 From: Corey Floyd Date: Fri, 11 May 2018 09:53:21 -0500 Subject: [PATCH 2/3] #218 Adds unit test verify relationhip data included in resource relationships with id and type set. --- .../Builders/DocumentBuilder_Tests.cs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/test/UnitTests/Builders/DocumentBuilder_Tests.cs b/test/UnitTests/Builders/DocumentBuilder_Tests.cs index 7946efa058..36d280054c 100644 --- a/test/UnitTests/Builders/DocumentBuilder_Tests.cs +++ b/test/UnitTests/Builders/DocumentBuilder_Tests.cs @@ -28,6 +28,7 @@ public DocumentBuilder_Tests() _options.BuildContextGraph(builder => { builder.AddResource("models"); + builder.AddResource("related-models"); }); _jsonApiContextMock @@ -121,6 +122,37 @@ public void Related_Links_Can_Be_Disabled() Assert.Null(document.Data.Relationships["related-model"].Links); } + [Fact] + public void Related_Data_Included_In_Relationships_By_Default() + { + // arrange + const string relationshipName = "related-models"; + const int relatedId = 1; + _jsonApiContextMock + .Setup(m => m.ContextGraph) + .Returns(_options.ContextGraph); + + var documentBuilder = new DocumentBuilder(_jsonApiContextMock.Object); + var entity = new Model + { + RelatedModel = new RelatedModel + { + Id = relatedId + } + }; + + // act + var document = documentBuilder.Build(entity); + + // assert + var relationshipData = document.Data.Relationships[relationshipName]; + Assert.NotNull(relationshipData); + Assert.NotNull(relationshipData.SingleData); + Assert.NotNull(relationshipData.SingleData); + Assert.Equal(relatedId.ToString(), relationshipData.SingleData.Id); + Assert.Equal(relationshipName, relationshipData.SingleData.Type); + } + [Fact] public void Build_Can_Build_Arrays() { From b96140fd985a565cd9dbf1c9fba864bdf06afa6d Mon Sep 17 00:00:00 2001 From: jaredcnance Date: Tue, 15 May 2018 10:37:19 -0500 Subject: [PATCH 3/3] fix tests by separating relationship and type names --- .../Builders/DocumentBuilder_Tests.cs | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/test/UnitTests/Builders/DocumentBuilder_Tests.cs b/test/UnitTests/Builders/DocumentBuilder_Tests.cs index 36d280054c..b2131f6ec9 100644 --- a/test/UnitTests/Builders/DocumentBuilder_Tests.cs +++ b/test/UnitTests/Builders/DocumentBuilder_Tests.cs @@ -60,7 +60,7 @@ public DocumentBuilder_Tests() [Fact] public void Includes_Paging_Links_By_Default() { - // arrange + // arrange _pageManager.PageSize = 1; _pageManager.TotalRecords = 1; _pageManager.CurrentPage = 1; @@ -126,7 +126,8 @@ public void Related_Links_Can_Be_Disabled() public void Related_Data_Included_In_Relationships_By_Default() { // arrange - const string relationshipName = "related-models"; + const string relatedTypeName = "related-models"; + const string relationshipName = "related-model"; const int relatedId = 1; _jsonApiContextMock .Setup(m => m.ContextGraph) @@ -148,9 +149,9 @@ public void Related_Data_Included_In_Relationships_By_Default() var relationshipData = document.Data.Relationships[relationshipName]; Assert.NotNull(relationshipData); Assert.NotNull(relationshipData.SingleData); - Assert.NotNull(relationshipData.SingleData); - Assert.Equal(relatedId.ToString(), relationshipData.SingleData.Id); - Assert.Equal(relationshipName, relationshipData.SingleData.Type); + Assert.NotNull(relationshipData.SingleData); + Assert.Equal(relatedId.ToString(), relationshipData.SingleData.Id); + Assert.Equal(relatedTypeName, relationshipData.SingleData.Type); } [Fact] @@ -177,12 +178,12 @@ public void Build_Can_Build_CustomIEnumerables() [Theory] - [InlineData(null,null,true)] - [InlineData(false,null,true)] - [InlineData(true,null,false)] - [InlineData(null,"foo",true)] - [InlineData(false,"foo",true)] - [InlineData(true,"foo",true)] + [InlineData(null, null, true)] + [InlineData(false, null, true)] + [InlineData(true, null, false)] + [InlineData(null, "foo", true)] + [InlineData(false, "foo", true)] + [InlineData(true, "foo", true)] public void DocumentBuilderOptions(bool? omitNullValuedAttributes, string attributeValue, bool resultContainsAttribute) @@ -194,7 +195,7 @@ public void DocumentBuilderOptions(bool? omitNullValuedAttributes, .Returns(new DocumentBuilderOptions(omitNullValuedAttributes.Value)); } var documentBuilder = new DocumentBuilder(_jsonApiContextMock.Object, null, omitNullValuedAttributes.HasValue ? documentBuilderBehaviourMock.Object : null); - var document = documentBuilder.Build(new Model(){StringProperty = attributeValue}); + var document = documentBuilder.Build(new Model() { StringProperty = attributeValue }); Assert.Equal(resultContainsAttribute, document.Data.Attributes.ContainsKey("StringProperty")); }