Skip to content

Commit 93fe405

Browse files
committed
INFORCRM-13655: Support new $permissions property in JSON
1 parent d08cff4 commit 93fe405

13 files changed

Lines changed: 80 additions & 9 deletions

Saleslogix.SData.Client.Test/Content/JsonContentHandlerTests.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,17 @@ public void Read_HttpMethod_Test()
113113
Assert.That(resource.HttpMethod, Is.EqualTo(HttpMethod.Post));
114114
}
115115

116+
[Test]
117+
public void Read_Permissions_Test()
118+
{
119+
const string json = @"{""$permissions"":[{""name"":""foo"",""access"":""bar""}]}";
120+
var resource = Helpers.ReadJson<SDataResource>(json);
121+
Assert.That(resource.Permissions, Is.Not.Empty);
122+
var permission = resource.Permissions[0];
123+
Assert.That(permission.Name, Is.EqualTo("foo"));
124+
Assert.That(permission.Access, Is.EqualTo("bar"));
125+
}
126+
116127
[Test]
117128
public void Write_DateTime_Test()
118129
{
@@ -248,6 +259,29 @@ public void Write_Resource_SyncState_Test()
248259
Assert.That(syncState["tick"], Is.EqualTo(123));
249260
}
250261

262+
[Test]
263+
public void Write_Resource_Permissions_Test()
264+
{
265+
var resource = new SDataResource
266+
{
267+
Permissions = new[]
268+
{
269+
new SDataPermission
270+
{
271+
Name = "foo",
272+
Access = "bar"
273+
}
274+
}
275+
};
276+
var obj = Helpers.WriteJson(resource);
277+
Assert.That(obj["$permissions"], Is.InstanceOf<IList<object>>());
278+
var items = (IList<object>) obj["$permissions"];
279+
Assert.That(items, Is.Not.Empty);
280+
var item = (IDictionary<string, object>) items[0];
281+
Assert.That(item["name"], Is.EqualTo("foo"));
282+
Assert.That(item["access"], Is.EqualTo("bar"));
283+
}
284+
251285
[Test]
252286
public void Write_Poco_Test()
253287
{

Saleslogix.SData.Client/Content/JsonContentHandler.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ private static SDataResource ReadResource(IDictionary<string, object> obj)
9999
{
100100
resource.SyncState = ContentHelper.Deserialize<SyncState>(value);
101101
}
102+
if (obj.TryGetValue("$permissions", out value))
103+
{
104+
resource.Permissions = ContentHelper.Deserialize<IList<SDataPermission>>(value, NamingScheme.CamelCase);
105+
}
102106

103107
foreach (var item in obj.Where(item => !item.Key.StartsWith("$", StringComparison.Ordinal)))
104108
{
@@ -384,16 +388,19 @@ private static IDictionary<string, object> WriteResource(IDictionary<string, obj
384388
WriteLinks(obj, info.Links);
385389
WriteProtocolValue(obj, "isDeleted", info.IsDeleted);
386390

387-
var diagnoses = info.Diagnoses;
388-
if (diagnoses != null && diagnoses.Count > 0)
391+
if (info.Diagnoses != null && info.Diagnoses.Count > 0)
392+
{
393+
obj["$diagnoses"] = ContentHelper.Serialize(info.Diagnoses);
394+
}
395+
396+
if (info.SyncState != null)
389397
{
390-
obj["$diagnoses"] = ContentHelper.Serialize(diagnoses, namingScheme);
398+
obj["$syncState"] = ContentHelper.Serialize(info.SyncState);
391399
}
392400

393-
var syncState = info.SyncState;
394-
if (syncState != null)
401+
if (info.Permissions != null)
395402
{
396-
obj["$syncState"] = ContentHelper.Serialize(syncState, namingScheme);
403+
obj["$permissions"] = ContentHelper.Serialize(info.Permissions, NamingScheme.CamelCase);
397404
}
398405
}
399406

@@ -427,13 +434,13 @@ private static IDictionary<string, object> WriteResourceCollection(IEnumerable<I
427434
var diagnoses = info.Diagnoses;
428435
if (diagnoses != null && diagnoses.Count > 0)
429436
{
430-
obj["$diagnoses"] = ContentHelper.Serialize(diagnoses, namingScheme);
437+
obj["$diagnoses"] = ContentHelper.Serialize(diagnoses);
431438
}
432439

433440
var syncDigest = info.SyncDigest;
434441
if (syncDigest != null)
435442
{
436-
obj["$digest"] = ContentHelper.Serialize(syncDigest, namingScheme);
443+
obj["$digest"] = ContentHelper.Serialize(syncDigest);
437444
}
438445
}
439446

Saleslogix.SData.Client/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
// by using the '*' as shown below:
2727

2828
[assembly: AssemblyVersion("2.0")]
29-
[assembly: AssemblyFileVersion("2.0.1.1560")]
29+
[assembly: AssemblyFileVersion("2.0.1.1561")]
3030
[assembly: NeutralResourcesLanguage("en-US")]
3131
[assembly: AssemblyInformationalVersion("2.0")]
3232
[assembly: InternalsVisibleTo("Saleslogix.SData.Client.Test, PublicKey=" +
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Copyright (c) 1997-2017, SalesLogix NA, LLC. All rights reserved.
2+
3+
namespace Saleslogix.SData.Client
4+
{
5+
public class SDataPermission
6+
{
7+
public string Name { get; set; }
8+
public string Access { get; set; }
9+
}
10+
}

Saleslogix.SData.Client/SDataProtocolInfo.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class SDataProtocolInfo
3333
public Guid? Uuid { get; set; }
3434
public string Lookup { get; set; }
3535
public string Descriptor { get; set; }
36+
public IList<SDataPermission> Permissions { get; set; }
3637

3738
//SDATA: top level resources
3839
public HttpMethod? HttpMethod { get; set; }
@@ -97,6 +98,8 @@ public object GetValue(SDataProtocolProperty prop)
9798
return Lookup;
9899
case SDataProtocolProperty.Descriptor:
99100
return Descriptor;
101+
case SDataProtocolProperty.Permissions:
102+
return Permissions;
100103
case SDataProtocolProperty.HttpMethod:
101104
return HttpMethod;
102105
case SDataProtocolProperty.HttpStatus:
@@ -170,6 +173,9 @@ public void SetValue(SDataProtocolProperty prop, object value)
170173
case SDataProtocolProperty.Descriptor:
171174
Descriptor = value != null ? Convert.ToString(value) : null;
172175
break;
176+
case SDataProtocolProperty.Permissions:
177+
Permissions = (IList<SDataPermission>) value;
178+
break;
173179
case SDataProtocolProperty.HttpMethod:
174180
HttpMethod = (HttpMethod?) value;
175181
break;

Saleslogix.SData.Client/SDataProtocolProperty.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public enum SDataProtocolProperty
2727
Uuid,
2828
Lookup,
2929
Descriptor,
30+
Permissions,
3031

3132
//SDATA: top level resources
3233
HttpMethod,

Saleslogix.SData.Client/SDataResource.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,13 @@ public string Descriptor
136136
set { _info.Descriptor = value; }
137137
}
138138

139+
[SDataProtocolProperty]
140+
public IList<SDataPermission> Permissions
141+
{
142+
get { return _info.Permissions; }
143+
set { _info.Permissions = value; }
144+
}
145+
139146
[SDataProtocolProperty]
140147
public HttpMethod? HttpMethod
141148
{

Saleslogix.SData.Client/Saleslogix.SData.Client_2_0.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
<Compile Include="SDataParameters.cs" />
154154
<Compile Include="SDataPathAttribute.cs" />
155155
<Compile Include="SDataPayloadOptions.cs" />
156+
<Compile Include="SDataPermission.cs" />
156157
<Compile Include="SDataProtocolInfo.cs" />
157158
<Compile Include="SDataProtocolProperty.cs" />
158159
<Compile Include="SDataProtocolPropertyAttribute.cs" />

Saleslogix.SData.Client/Saleslogix.SData.Client_3_5.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@
332332
<Compile Include="SDataParameters.cs" />
333333
<Compile Include="SDataPathAttribute.cs" />
334334
<Compile Include="SDataPayloadOptions.cs" />
335+
<Compile Include="SDataPermission.cs" />
335336
<Compile Include="SDataProtocolInfo.cs" />
336337
<Compile Include="SDataProtocolProperty.cs" />
337338
<Compile Include="SDataProtocolPropertyAttribute.cs" />

Saleslogix.SData.Client/Saleslogix.SData.Client_4_0.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,7 @@
354354
<Compile Include="SDataParameters.cs" />
355355
<Compile Include="SDataPathAttribute.cs" />
356356
<Compile Include="SDataPayloadOptions.cs" />
357+
<Compile Include="SDataPermission.cs" />
357358
<Compile Include="SDataProtocolInfo.cs" />
358359
<Compile Include="SDataProtocolProperty.cs" />
359360
<Compile Include="SDataProtocolPropertyAttribute.cs" />

0 commit comments

Comments
 (0)