From a31255707e8dfbea6e897da8b42051365157bab3 Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Tue, 22 Jul 2025 19:43:04 +0200 Subject: [PATCH] fix "null" in project views (#1158) Co-authored-by: kolaente --- pkg/modules/dump/restore.go | 5 ++++ pkg/modules/dump/restore_test.go | 44 ++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/pkg/modules/dump/restore.go b/pkg/modules/dump/restore.go index 66fe525a6..045f9b39c 100644 --- a/pkg/modules/dump/restore.go +++ b/pkg/modules/dump/restore.go @@ -224,6 +224,11 @@ func convertFieldValue(fieldName string, value interface{}, isFloat bool) (inter // Handle JSON fields (non-float) switch v := value.(type) { case string: + // Check if the string is "null" (case insensitive) and return nil for SQL NULL + if strings.ToLower(v) == "null" { + return nil, nil + } + decoded, err := base64.StdEncoding.DecodeString(v) if err != nil { var corruptErr base64.CorruptInputError diff --git a/pkg/modules/dump/restore_test.go b/pkg/modules/dump/restore_test.go index 4d1b6cda6..5288f91a5 100644 --- a/pkg/modules/dump/restore_test.go +++ b/pkg/modules/dump/restore_test.go @@ -80,6 +80,24 @@ func TestConvertFieldValue(t *testing.T) { assert.JSONEq(t, jsonData, result.(string)) }) + t.Run("should return nil for 'null' string", func(t *testing.T) { + result, err := convertFieldValue("bucket_configuration", "null", false) + require.NoError(t, err) + assert.Nil(t, result) + }) + + t.Run("should return nil for 'NULL' string", func(t *testing.T) { + result, err := convertFieldValue("bucket_configuration", "NULL", false) + require.NoError(t, err) + assert.Nil(t, result) + }) + + t.Run("should return nil for 'Null' string", func(t *testing.T) { + result, err := convertFieldValue("bucket_configuration", "Null", false) + require.NoError(t, err) + assert.Nil(t, result) + }) + t.Run("should return error for non-string type", func(t *testing.T) { _, err := convertFieldValue("permissions", 123, false) require.Error(t, err) @@ -105,4 +123,30 @@ func TestConvertFieldValue(t *testing.T) { assert.Equal(t, invalidBase64, result) }) }) + + t.Run("Edge cases", func(t *testing.T) { + t.Run("should handle empty string for JSON field", func(t *testing.T) { + result, err := convertFieldValue("permissions", "", false) + require.NoError(t, err) + assert.Empty(t, result) + }) + + t.Run("should handle empty string for float field", func(t *testing.T) { + _, err := convertFieldValue("position", "", true) + require.Error(t, err) + assert.Contains(t, err.Error(), "could not parse double value") + }) + + t.Run("should handle zero float value", func(t *testing.T) { + result, err := convertFieldValue("position", 0.0, true) + require.NoError(t, err) + assert.InDelta(t, 0.0, result, 0.0001) + }) + + t.Run("should handle negative float value", func(t *testing.T) { + result, err := convertFieldValue("position", -123.45, true) + require.NoError(t, err) + assert.InEpsilon(t, -123.45, result, 0.0001) + }) + }) }