Skip to content

Commit 0734480

Browse files
fix: compare contextual tuples by value (#228)
Signed-off-by: ihopenre-eng <247072151+ihopenre-eng@users.noreply.github.com> Co-authored-by: ihopenre-eng <247072151+ihopenre-eng@users.noreply.github.com> Co-authored-by: Anurag Bandyopadhyay <angbpy@gmail.com>
1 parent 41a63d4 commit 0734480

2 files changed

Lines changed: 51 additions & 2 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using OpenFga.Sdk.Client.Model;
2+
using System.Collections.Generic;
3+
using Xunit;
4+
5+
namespace OpenFga.Sdk.Test.Models.Client;
6+
7+
public class ClientCheckRequestTests {
8+
[Fact]
9+
public void Equals_ReturnsTrue_WhenContextualTuplesHaveEqualValues() {
10+
var request1 = CreateRequest("document:budget");
11+
var request2 = CreateRequest("document:budget");
12+
13+
Assert.True(request1.Equals(request2));
14+
}
15+
16+
[Fact]
17+
public void Equals_ReturnsFalse_WhenContextualTuplesHaveDifferentValues() {
18+
var request1 = CreateRequest("document:budget");
19+
var request2 = CreateRequest("document:forecast");
20+
21+
Assert.False(request1.Equals(request2));
22+
}
23+
24+
[Fact]
25+
public void GetHashCode_ReturnsSameValue_WhenContextualTuplesHaveEqualValues() {
26+
var request1 = CreateRequest("document:budget");
27+
var request2 = CreateRequest("document:budget");
28+
29+
Assert.Equal(request1.GetHashCode(), request2.GetHashCode());
30+
}
31+
32+
private static ClientCheckRequest CreateRequest(string contextualObject) => new() {
33+
User = "user:anne",
34+
Relation = "viewer",
35+
Object = "document:roadmap",
36+
ContextualTuples = new List<ClientTupleKey> {
37+
new() {
38+
User = "user:anne",
39+
Relation = "editor",
40+
Object = contextualObject,
41+
},
42+
},
43+
};
44+
}

src/OpenFga.Sdk/Client/Model/ClientCheckRequest.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.ComponentModel.DataAnnotations;
4+
using System.Linq;
45
using System.Runtime.Serialization;
56
using System.Text.Json;
67
using System.Text.Json.Serialization;
@@ -75,7 +76,8 @@ public bool Equals(ClientCheckRequest input) {
7576
(
7677
ContextualTuples == input.ContextualTuples ||
7778
(ContextualTuples != null &&
78-
ContextualTuples.Equals(input.ContextualTuples))
79+
input.ContextualTuples != null &&
80+
ContextualTuples.SequenceEqual(input.ContextualTuples))
7981
) &&
8082
(
8183
this.Context == input.Context ||
@@ -112,7 +114,10 @@ public override int GetHashCode() {
112114
}
113115

114116
if (ContextualTuples != null) {
115-
hashCode = (hashCode * 9923) + ContextualTuples.GetHashCode();
117+
hashCode = (hashCode * 9923) + ContextualTuples.Count;
118+
foreach (var contextualTuple in ContextualTuples) {
119+
hashCode = (hashCode * 9923) + (contextualTuple?.GetHashCode() ?? 0);
120+
}
116121
}
117122

118123
if (Context != null) {

0 commit comments

Comments
 (0)