Skip to content

Commit

Permalink
style: reformat code for readability
Browse files Browse the repository at this point in the history
Reformatted the code to improve readability. This includes adjusting indentation, removing unnecessary comments, and organizing import statements. No changes were made to the logic of the code.
  • Loading branch information
tanczosm committed Apr 23, 2024
1 parent d42c688 commit 30735bc
Show file tree
Hide file tree
Showing 5 changed files with 754 additions and 763 deletions.
136 changes: 68 additions & 68 deletions SpiceDb.Tests/SpiceDbClientTests.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using Microsoft.Extensions.Configuration;
using NUnit.Framework;
using NUnit.Framework.Legacy;
using SpiceDb.Enum;
using SpiceDb.Models;
using System.Reflection;
using NUnit.Framework.Legacy;

namespace SpiceDb.Tests;

Expand Down Expand Up @@ -193,22 +193,22 @@ await _client.DeleteRelationshipsAsync(new RelationshipFilter
[Test]
public async Task AddRelationshipsAsync_AddBatchRelationships_ReturnsValidToken()
{
// Arrange: Create a batch of new relationships to add
var relationships = new List<Relationship>
{
new Relationship("group:devGroup", "direct_member", "user:charlie"),
new Relationship("group:devGroup", "owner", "user:dave")
};

// Act: Add these relationships using AddRelationshipsAsync
var resultToken = await _client!.AddRelationshipsAsync(relationships);

// Assert: Check that a valid ZedToken is returned, indicating success
ClassicAssert.IsNotNull(resultToken);
ClassicAssert.IsNotEmpty(resultToken.Token);
// Arrange: Create a batch of new relationships to add
var relationships = new List<Relationship>
{
new Relationship("group:devGroup", "direct_member", "user:charlie"),
new Relationship("group:devGroup", "owner", "user:dave")
};

// Act: Add these relationships using AddRelationshipsAsync
var resultToken = await _client!.AddRelationshipsAsync(relationships);

// Assert: Check that a valid ZedToken is returned, indicating success
ClassicAssert.IsNotNull(resultToken);
ClassicAssert.IsNotEmpty(resultToken.Token);

Check warning on line 208 in SpiceDb.Tests/SpiceDbClientTests.cs

View workflow job for this annotation

GitHub Actions / build

Dereference of a possibly null reference.

Check warning on line 208 in SpiceDb.Tests/SpiceDbClientTests.cs

View workflow job for this annotation

GitHub Actions / build

Dereference of a possibly null reference.
}

[Test]
[Test]
public void CheckPermissionAsyncTest()
{
var p1 = _client!.CheckPermission("organization:authzed#member@user:jake");
Expand All @@ -225,69 +225,69 @@ public void CheckPermissionAsyncTest()
[Test]
public async Task CheckBulkPermissionAsyncTest()
{
var permissions = new[]
{
"organization:authzed#member@user:jake",
"group:test#viewers@user:jake",
"organization:authzed#admin@user:michael",
"group:test#posters@user:somenewguy",
"group:test#joiners@user:somenewguy",
"group:test#add_manager@user:blackhat"
};

var p = await _client!.CheckBulkPermissionsAsync(permissions);
var permissions = new[]
{
"organization:authzed#member@user:jake",
"group:test#viewers@user:jake",
"organization:authzed#admin@user:michael",
"group:test#posters@user:somenewguy",
"group:test#joiners@user:somenewguy",
"group:test#add_manager@user:blackhat"
};

var p = await _client!.CheckBulkPermissionsAsync(permissions);

ClassicAssert.IsNotNull(p);
ClassicAssert.IsTrue(p!.Pairs[0].HasPermission && p!.Pairs[1].HasPermission && p!.Pairs[2].HasPermission && p!.Pairs[3].HasPermission && !p!.Pairs[4].HasPermission && !p!.Pairs[5].HasPermission);
ClassicAssert.IsTrue(p!.Pairs[0].HasPermission && p!.Pairs[1].HasPermission && p!.Pairs[2].HasPermission && p!.Pairs[3].HasPermission && !p!.Pairs[4].HasPermission && !p!.Pairs[5].HasPermission);
}

[Test]
[Test]
public async Task ExpandPermissionAsyncTest()
{
var response = await _client!.ExpandPermissionAsync(new ResourceReference("group", "test"), "post");

ClassicAssert.IsNotNull(response);
}

[Test]
public async Task LookupResources_UserCanViewPosts_ReturnsAllGroups()
{
// Arrange: Define a subject with permission to view posts
var subject = new ResourceReference("user", "jake");
string permission = "view_posts";

// Act: Lookup all resources (groups) where 'user:jake' can view posts
var accessibleResources = new List<string>();
await foreach (var resource in _client!.LookupResources("group", permission, subject))
{
accessibleResources.Add($"group:{resource.ResourceId}");
}

// Assert: Check that 'user:jake' can view posts in the 'test' group and potentially others
var expectedResources = new List<string> { "group:test" }; // Adjust as needed based on detailed schema analysis
CollectionAssert.AreEquivalent(expectedResources, accessibleResources);
}

[Test]
public async Task LookupSubjects_GroupTestMembers_ReturnsExpectedMembers()
{
// Arrange: Specify the resource and the permission to check for membership
var resource = new ResourceReference("group", "test");
string permission = "member";

// Act: Lookup subjects who are members of 'group:test'
var members = new List<string>();
await foreach (var subjectResponse in _client!.LookupSubjects(resource, permission, "user"))
{
members.Add($"user:{subjectResponse.Subject.Id}");
}

// Assert: Verify that the expected subjects are returned
var expectedSubjects = new List<string> { "user:jake", "user:jimmy", "user:joey" }; // Include users who have 'member' or higher access
CollectionAssert.AreEquivalent(expectedSubjects, members);
}

/*
[Test]
public async Task LookupResources_UserCanViewPosts_ReturnsAllGroups()
{
// Arrange: Define a subject with permission to view posts
var subject = new ResourceReference("user", "jake");
string permission = "view_posts";

// Act: Lookup all resources (groups) where 'user:jake' can view posts
var accessibleResources = new List<string>();
await foreach (var resource in _client!.LookupResources("group", permission, subject))
{
accessibleResources.Add($"group:{resource.ResourceId}");
}

// Assert: Check that 'user:jake' can view posts in the 'test' group and potentially others
var expectedResources = new List<string> { "group:test" }; // Adjust as needed based on detailed schema analysis
CollectionAssert.AreEquivalent(expectedResources, accessibleResources);
}

[Test]
public async Task LookupSubjects_GroupTestMembers_ReturnsExpectedMembers()
{
// Arrange: Specify the resource and the permission to check for membership
var resource = new ResourceReference("group", "test");
string permission = "member";

// Act: Lookup subjects who are members of 'group:test'
var members = new List<string>();
await foreach (var subjectResponse in _client!.LookupSubjects(resource, permission, "user"))
{
members.Add($"user:{subjectResponse.Subject.Id}");
}

// Assert: Verify that the expected subjects are returned
var expectedSubjects = new List<string> { "user:jake", "user:jimmy", "user:joey" }; // Include users who have 'member' or higher access
CollectionAssert.AreEquivalent(expectedSubjects, members);
}

/*
[Test]
public void AddRelationshipAsyncTest()
{
Expand Down Expand Up @@ -324,7 +324,7 @@ public void GetResourcePermissionsAsyncTest()
ClassicAssert.Fail();
}
*/
[Test]
[Test]
public void ReadSchemaTest()
{
var schema = _client!.ReadSchema();
Expand Down
6 changes: 1 addition & 5 deletions SpiceDb/Api/SpiceDbCore.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using Grpc.Core;
using Grpc.Net.Client;
using System.Net;

namespace SpiceDb.Api;

Expand All @@ -12,9 +10,7 @@ internal class SpiceDbCore
public readonly SpiceDbExperimental Experimental;

/// <summary>
/// Example:
/// serverAddress "http://localhost:50051"
/// preSharedKey "spicedb_token"
/// Core container for various library sections
/// </summary>
public SpiceDbCore(ChannelBase channel)
{
Expand Down
1 change: 0 additions & 1 deletion SpiceDb/Api/SpiceDbExperimental.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Authzed.Api.V1;
using Grpc.Core;
using SpiceDb.Enum;

namespace SpiceDb.Api;

Expand Down
116 changes: 57 additions & 59 deletions SpiceDb/Api/SpiceDbPermissions.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
using Authzed.Api.V1;
using Google.Protobuf;
using Google.Protobuf.Collections;
using Google.Protobuf.WellKnownTypes;
using Grpc.Core;
using SpiceDb.Enum;
using SpiceDb.Models;
Expand Down Expand Up @@ -125,63 +123,63 @@ public async Task<PermissionResponse> CheckPermissionAsync(string resourceType,
};
}

public async Task<SpiceDb.Models.CheckBulkPermissionsResponse?> CheckBulkPermissionsAsync(IEnumerable<Authzed.Api.V1.CheckBulkPermissionsRequestItem> items, ZedToken? zedToken = null, CacheFreshness cacheFreshness = CacheFreshness.AnyFreshness)
{
var req = new CheckBulkPermissionsRequest()
{
Consistency = new Consistency { MinimizeLatency = true, AtExactSnapshot = zedToken },
};

req.Items.AddRange(items);

if (cacheFreshness == CacheFreshness.AtLeastAsFreshAs)
{
req.Consistency.AtLeastAsFresh = zedToken;
}
else if (cacheFreshness == CacheFreshness.MustRefresh || zedToken == null)
{
req.Consistency.FullyConsistent = true;
}

var call = await _acl!.CheckBulkPermissionsAsync(req);

if (call == null)
return null;

SpiceDb.Models.CheckBulkPermissionsResponse response = new SpiceDb.Models.CheckBulkPermissionsResponse
{
CheckedAt = call.CheckedAt.ToSpiceDbToken(),
Pairs = call.Pairs.Select(x => new Models.CheckBulkPermissions
{
Error = x.Error is null
? null
: new Models.Status
{
Code = x.Error.Code,
Message = x.Error.Message,
Details = x.Error.Details.Select(any => (object)any).ToList()
},
PartialCaveatInfo = x.Item.PartialCaveatInfo is null
? null
: new SpiceDb.Models.PartialCaveatInfo
{ MissingRequiredContext = x.Item.PartialCaveatInfo.MissingRequiredContext.ToList() },
Permissionship = x.Item.Permissionship switch
{
CheckPermissionResponse.Types.Permissionship.NoPermission => Permissionship.NoPermission,
CheckPermissionResponse.Types.Permissionship.HasPermission => Permissionship.HasPermission,
CheckPermissionResponse.Types.Permissionship.ConditionalPermission => Permissionship.ConditionalPermission,
_ => Permissionship.Unspecified
},
Permission = new Models.Permission(new ResourceReference (x.Request.Resource.ObjectType, x.Request.Resource.ObjectId),
x.Request.Permission, new ResourceReference(x.Request.Subject.Object.ObjectType, x.Request.Subject.Object.ObjectId, x.Request.Subject.OptionalRelation ?? string.Empty)),
Context = x.Request.Context?.FromStruct() ?? new()
}).ToList()
};

return response;
}

public async IAsyncEnumerable<Models.LookupSubjectsResponse> LookupSubjects(string resourceType, string resourceId, string permission,
public async Task<SpiceDb.Models.CheckBulkPermissionsResponse?> CheckBulkPermissionsAsync(IEnumerable<Authzed.Api.V1.CheckBulkPermissionsRequestItem> items, ZedToken? zedToken = null, CacheFreshness cacheFreshness = CacheFreshness.AnyFreshness)
{
var req = new CheckBulkPermissionsRequest()
{
Consistency = new Consistency { MinimizeLatency = true, AtExactSnapshot = zedToken },
};

req.Items.AddRange(items);

if (cacheFreshness == CacheFreshness.AtLeastAsFreshAs)
{
req.Consistency.AtLeastAsFresh = zedToken;
}
else if (cacheFreshness == CacheFreshness.MustRefresh || zedToken == null)
{
req.Consistency.FullyConsistent = true;
}

var call = await _acl!.CheckBulkPermissionsAsync(req);

if (call == null)
return null;

SpiceDb.Models.CheckBulkPermissionsResponse response = new SpiceDb.Models.CheckBulkPermissionsResponse
{
CheckedAt = call.CheckedAt.ToSpiceDbToken(),
Pairs = call.Pairs.Select(x => new Models.CheckBulkPermissions
{
Error = x.Error is null
? null
: new Models.Status
{
Code = x.Error.Code,
Message = x.Error.Message,
Details = x.Error.Details.Select(any => (object)any).ToList()
},
PartialCaveatInfo = x.Item.PartialCaveatInfo is null
? null
: new SpiceDb.Models.PartialCaveatInfo
{ MissingRequiredContext = x.Item.PartialCaveatInfo.MissingRequiredContext.ToList() },
Permissionship = x.Item.Permissionship switch
{
CheckPermissionResponse.Types.Permissionship.NoPermission => Permissionship.NoPermission,
CheckPermissionResponse.Types.Permissionship.HasPermission => Permissionship.HasPermission,
CheckPermissionResponse.Types.Permissionship.ConditionalPermission => Permissionship.ConditionalPermission,
_ => Permissionship.Unspecified
},
Permission = new Models.Permission(new ResourceReference(x.Request.Resource.ObjectType, x.Request.Resource.ObjectId),
x.Request.Permission, new ResourceReference(x.Request.Subject.Object.ObjectType, x.Request.Subject.Object.ObjectId, x.Request.Subject.OptionalRelation ?? string.Empty)),
Context = x.Request.Context?.FromStruct() ?? new()
}).ToList()
};

return response;
}

public async IAsyncEnumerable<Models.LookupSubjectsResponse> LookupSubjects(string resourceType, string resourceId, string permission,
string subjectType, string optionalSubjectRelation = "", Dictionary<string, object>? context = null,
ZedToken? zedToken = null, CacheFreshness cacheFreshness = CacheFreshness.AnyFreshness)
{
Expand Down
Loading

0 comments on commit 30735bc

Please sign in to comment.