From d704ad3d5b87d4978a0318f63403f3c15df389d8 Mon Sep 17 00:00:00 2001 From: Ewan Harris Date: Thu, 8 Feb 2024 16:18:21 +0000 Subject: [PATCH] feat: make write with no writes or deletes a no-op --- client/client.go | 4 ++++ client/client_test.go | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/client/client.go b/client/client.go index 5b40317..8a0d899 100644 --- a/client/client.go +++ b/client/client.go @@ -1318,6 +1318,10 @@ func (client *OpenFgaClient) WriteExecute(request SdkClientWriteRequestInterface return nil, err } + if len(request.GetBody().Deletes) == 0 && len(request.GetBody().Writes) == 0 { + return &response, nil + } + // Unless explicitly disabled, transaction mode is enabled // In transaction mode, the client will send the request to the server as is if request.GetOptions() == nil || request.GetOptions().Transaction == nil || !request.GetOptions().Transaction.Disable { diff --git a/client/client_test.go b/client/client_test.go index ec39bbe..79a9f1a 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -1171,6 +1171,28 @@ func TestOpenFgaClient(t *testing.T) { } }) + t.Run("Write with no deletes or writes should not make a request", func(t *testing.T) { + requestBody := ClientWriteRequest{ + Writes: []ClientTupleKey{}, + } + options := ClientWriteOptions{ + AuthorizationModelId: openfga.PtrString("01GAHCE4YVKPQEKZQHT2R89MQV"), + } + + data, err := fgaClient.Write(context.Background()).Body(requestBody).Options(options).Execute() + if err != nil { + t.Fatalf("%v", err) + } + + if len(data.Writes) != 0 { + t.Fatalf("OpenFgaClient.Write() - expected %v Writes, got %v", 0, len(data.Writes)) + } + + if len(data.Deletes) != 0 { + t.Fatalf("OpenFgaClient.Write() - expected %v Deletes, got %v", 0, len(data.Deletes)) + } + }) + t.Run("WriteTuples", func(t *testing.T) { test := TestDefinition{ Name: "Write",