Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 21be002

Browse files
committed
Add parsing OData test example
1 parent 6e92c5b commit 21be002

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
using System.Collections.Generic;
2+
using NUnit.Framework;
3+
4+
namespace ServiceStack.Text.Tests.DynamicModels
5+
{
6+
[TestFixture]
7+
public class ODataTests
8+
{
9+
const string json = @"{
10+
""odata.metadata"":""http://server.ca/Mediasite/Api/v1/$metadata#UserProfiles"",
11+
""value"":[
12+
{
13+
""odata.id"":""http://server.ca/Mediasite/Api/v1/UserProfiles('111111111111111')"",
14+
""QuotaPolicy@odata.navigationLinkUrl"":""http://server.ca/Mediasite/Api/v1/UserProfiles('111111111111111')/QuotaPolicy"",
15+
""#SetQuotaPolicyFromLevel"":{
16+
""target"":""http://server.ca/Mediasite/Api/v1/UserProfiles('111111111111111')/SetQuotaPolicyFromLevel""
17+
},
18+
""Id"":""111111111111111"",
19+
""UserName"":""testuser"",
20+
""DisplayName"":""testuser Large"",
21+
""Email"":""testuser@testuser.ca"",
22+
""Activated"":true,
23+
""HomeFolderId"":""312dcf4890df4b129e248a0c9a57869714"",
24+
""ModeratorEmail"":""testuser@testuserlarge.ca"",
25+
""ModeratorEmailOptOut"":false,
26+
""DisablePresentationContentCompleteEmails"":false,
27+
""DisablePresentationContentFailedEmails"":false,
28+
""DisablePresentationChangeOwnerEmails"":false,
29+
""TimeZone"":26,
30+
""PresenterFirstName"":null,
31+
""PresenterMiddleName"":null,
32+
""PresenterLastName"":null,
33+
""PresenterEmail"":null,
34+
""PresenterPrefix"":null,
35+
""PresenterSuffix"":null,
36+
""PresenterAdditionalInfo"":null,
37+
""PresenterBio"":null,
38+
""TrustDirectoryEntry"":null
39+
}
40+
]
41+
}";
42+
43+
public class ODataUser
44+
{
45+
public List<User> Value { get; set; }
46+
}
47+
48+
public class User
49+
{
50+
public long Id { get; set; }
51+
public string UserName { get; set; }
52+
public string DisplayName { get; set; }
53+
public string Email { get; set; }
54+
public bool Activated { get; set; }
55+
public string HomeFolderId { get; set; }
56+
public string ModeratorEmail { get; set; }
57+
public bool ModeratorEmailOptOut { get; set; }
58+
public bool DisablePresentationContentCompleteEmails { get; set; }
59+
public bool DisablePresentationContentFailedEmails { get; set; }
60+
public bool DisablePresentationChangeOwnerEmails { get; set; }
61+
public int TimeZone { get; set; }
62+
}
63+
64+
private static void AssertUser(User user)
65+
{
66+
Assert.That(user.Id, Is.EqualTo(111111111111111));
67+
Assert.That(user.UserName, Is.EqualTo("testuser"));
68+
Assert.That(user.DisplayName, Is.EqualTo("testuser Large"));
69+
Assert.That(user.Email, Is.EqualTo("testuser@testuser.ca"));
70+
Assert.That(user.Activated);
71+
}
72+
73+
[Test]
74+
public void Can_extract_model_in_OData_with_JsonObject()
75+
{
76+
var users = JsonObject.Parse(json).ArrayObjects("value")
77+
.Map(x => new User
78+
{
79+
Id = x.Get<long>("Id"),
80+
UserName = x["UserName"],
81+
DisplayName = x["DisplayName"],
82+
Email = x["Email"],
83+
Activated = x.Get<bool>("Activated"),
84+
});
85+
86+
users.PrintDump();
87+
AssertUser(users[0]);
88+
89+
users = JsonObject.Parse(json).ArrayObjects("value")
90+
.Map(x => x.ConvertTo<User>());
91+
92+
users.PrintDump();
93+
AssertUser(users[0]);
94+
}
95+
96+
[Test]
97+
public void Can_Deserialize_OData_into_POCOs()
98+
{
99+
var odata = json.FromJson<ODataUser>();
100+
AssertUser(odata.Value[0]);
101+
}
102+
}
103+
}

tests/ServiceStack.Text.Tests/ServiceStack.Text.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@
178178
<ItemGroup>
179179
<Compile Include="AutoMappingObjectDictionaryTests.cs" />
180180
<Compile Include="CustomCultureInfoTests.cs" />
181+
<Compile Include="DynamicModels\ODataTests.cs" />
181182
<Compile Include="EnumerableTests.cs" />
182183
<Compile Include="AttributeTests.cs" />
183184
<Compile Include="CsvTypeTests.cs" />

0 commit comments

Comments
 (0)