Skip to content

Commit

Permalink
Convert case for relationship as well in ResourceDeserializer (#117)
Browse files Browse the repository at this point in the history
* Fix casing

* Update test for casing
  • Loading branch information
bxh authored and joukevandermaas committed Jul 12, 2016
1 parent d24e1b0 commit 5657828
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 17 deletions.
2 changes: 1 addition & 1 deletion Saule/Serialization/ResourceDeserializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ private JToken SingleToFlatStructure(JObject child)
foreach (var rel in child["relationships"] ?? new JArray())
{
var prop = rel as JProperty;
result.Add(prop?.Name, ToFlatStructure(prop?.Value));
result.Add(prop?.Name.ToPascalCase(), ToFlatStructure(prop?.Value));
}

return result;
Expand Down
2 changes: 2 additions & 0 deletions Tests/Models/Person.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public Person(bool prefill = false, string id = "123")
Age = 34;
NumberOfLegs = 4;
Job = Get.Company();
FamilyMembers = new List<Person>();
Friends = new List<Person>();
}

Expand All @@ -24,6 +25,7 @@ public Person(bool prefill = false, string id = "123")
public int? Age { get; set; }
public int NumberOfLegs { get; set; }
public Company Job { get; set; }
public IEnumerable<Person> FamilyMembers { get; set; }
public IEnumerable<Person> Friends { get; set; }
}
}
1 change: 1 addition & 0 deletions Tests/Models/PersonResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public PersonResource()

BelongsTo<CompanyResource>(nameof(Person.Job), "/employer");
HasMany<PersonResource>(nameof(Person.Friends));
HasMany<PersonResource>( nameof( Person.FamilyMembers));
}
}
}
43 changes: 27 additions & 16 deletions Tests/Serialization/ResourceDeserializerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ public ResourceDeserializerTests()
{
_person = Get.Person(id: "hello");
_person.Friends = Get.People(1);

_people = Get.People(5).ToArray();
var singleSerializer = new ResourceSerializer(
_person, new PersonResource(), new Uri("http://example.com/people/1"),
new DefaultUrlPathBuilder(), null);
_person.FamilyMembers = Get.People(2);
_people = Get.People(5).ToArray();
var singleSerializer = new ResourceSerializer(
_person, new PersonResource(), new Uri("http://example.com/people/1"),
new DefaultUrlPathBuilder(), null);
var multiSerializer = new ResourceSerializer(
_people, new PersonResource(), new Uri("http://example.com/people/"),
new DefaultUrlPathBuilder(), null);
_people, new PersonResource(), new Uri("http://example.com/people/"),
new DefaultUrlPathBuilder(), null);

_singleJson = JToken.Parse(singleSerializer.Serialize().ToString());
_collectionJson = JToken.Parse(multiSerializer.Serialize().ToString());
Expand Down Expand Up @@ -69,21 +69,32 @@ public void DeserializesBelongsToRelationships()
Assert.Equal(0, job?.NumberOfEmployees);
}

[Fact(DisplayName = "Deserializes hasMany relationships")]
[Fact( DisplayName = "Deserializes hasMany relationships" )]
public void DeserializesHasManyRelationship()
{
var target = new ResourceDeserializer(_singleJson, typeof(Person));
var result = target.Deserialize() as Person;

var expected = _person.Friends.Single();
var actual = result?.Friends.Single();
var expectedFriend = _person.Friends.Single();
var actualFriend = result?.Friends.Single();

Assert.Equal(expectedFriend.Identifier, actualFriend?.Identifier);
Assert.Null(actualFriend?.FirstName);
Assert.Null(actualFriend?.LastName);
Assert.Equal(default(int?), actualFriend?.Age);
Assert.Null(actualFriend?.Job);
Assert.Null(actualFriend?.Friends);

Assert.Equal(expected.Identifier, actual?.Identifier);
Assert.Null(actual?.FirstName);
Assert.Null(actual?.LastName);
Assert.Equal(default(int?), actual?.Age);
Assert.Null(actual?.Job);
Assert.Null(actual?.Friends);
var expectedFamilyMembers = _person.FamilyMembers.ToArray();
var actualFamilyMembers = result?.FamilyMembers?.ToArray();

Assert.NotNull(actualFamilyMembers);
Assert.Equal(expectedFamilyMembers.Length, actualFamilyMembers.Length);
expectedFamilyMembers.Zip(actualFamilyMembers, (expected, actual) =>
{
Assert.Equal(expected.Identifier, actual.Identifier);
return true;
} );
}

[Fact(DisplayName = "Deserializes enumerables properly")]
Expand Down

0 comments on commit 5657828

Please sign in to comment.