From c3b4c61c14e92e3ae2cfb1483f358a161bc15b22 Mon Sep 17 00:00:00 2001
From: ensiouel <ensiouel@gmail.com>
Date: Thu, 18 Jan 2024 09:55:35 +0300
Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?=
 =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/data/data_test.go | 52 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/pkg/data/data_test.go b/pkg/data/data_test.go
index b26a525d..4a54ff0a 100644
--- a/pkg/data/data_test.go
+++ b/pkg/data/data_test.go
@@ -76,6 +76,38 @@ func TestDelete(t *testing.T) {
 			"a.b",
 			uninitializedMap,
 		},
+		{
+			"object field from first level array with uninitialized map",
+			map[string]any{
+				"a": []any{uninitializedMap, map[string]any{"a": "1", "b": "2"}},
+			},
+			"a.b",
+			map[string]any{
+				"a": []any{uninitializedMap, map[string]any{"a": "1"}},
+			},
+		},
+		{
+			"object field from second level uninitialized map",
+			map[string]any{
+				"a": map[string]any{"a": uninitializedMap, "b": map[string]any{"a": "1", "b": "2"}},
+			},
+			"a.b.a",
+			map[string]any{
+				"a": map[string]any{"a": uninitializedMap, "b": map[string]any{"b": "2"}},
+			},
+		},
+		{
+			"object from array with uninitialized map",
+			[]any{
+				uninitializedMap,
+				map[string]any{"a": 1, "b": "2"},
+			},
+			"a",
+			[]any{
+				uninitializedMap,
+				map[string]any{"b": "2"},
+			},
+		},
 		// Решили что автоматически удалять пустые объекты/слайсы не нужно
 		//{
 		//	"empty object",
@@ -270,6 +302,26 @@ func TestSet(t *testing.T) {
 		{"Slice", args{"a.0.a", map[string]interface{}{"a": []any{map[string]any{"a": "0"}, map[string]any{"a": "0", "b": "b"}}}, "a"}, map[string]interface{}{"a": []any{map[string]any{"a": "a"}, map[string]any{"a": "0", "b": "b"}}}, assert.NoError},
 		{"Set the object for the uninitialized map", args{"a", uninitializedMap, "a"}, uninitializedMap, assert.NoError},
 		{"Set the object field for the uninitialized map", args{"a.b", uninitializedMap, "a"}, uninitializedMap, assert.NoError},
+		{
+			"object field from first level array with uninitialized map",
+			args{"a.b", map[string]any{"a": []any{uninitializedMap, map[string]any{"a": "1"}}}, "2"},
+			map[string]any{"a": []any{uninitializedMap, map[string]any{"a": "1", "b": "2"}}},
+			assert.NoError,
+		},
+		{
+			"object field from second level uninitialized map",
+			args{"a.b.a", map[string]any{"a": map[string]any{"a": uninitializedMap, "b": map[string]any{"b": "2"}}}, "1"},
+			map[string]any{
+				"a": map[string]any{"a": uninitializedMap, "b": map[string]any{"a": "1", "b": "2"}},
+			},
+			assert.NoError,
+		},
+		{
+			"object from array with uninitialized map",
+			args{"a", []any{uninitializedMap, map[string]any{"b": "2"}}, "1"},
+			[]any{uninitializedMap, map[string]any{"a": "1", "b": "2"}},
+			assert.NoError,
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-- 
GitLab