From 4eca59f0313e05967c40a0e41639f805126f8035 Mon Sep 17 00:00:00 2001
From: ensiouel <ensiouel@gmail.com>
Date: Tue, 23 Jan 2024 11:33:42 +0300
Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20Item=20=D0=B4=D0=BE=D0=B1?=
 =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4?=
 =?UTF-8?q?=20DeleteItemData?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/items/item.go      | 10 ++++++++++
 pkg/items/item_test.go | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/pkg/items/item.go b/pkg/items/item.go
index 7c34d2bb..fdf491ed 100644
--- a/pkg/items/item.go
+++ b/pkg/items/item.go
@@ -398,6 +398,16 @@ func (i *Item) Get(field string) (any, error) {
 	return i.getItemData(field)
 }
 
+// DeleteItemData удаляет значение поля Data
+func (i *Item) DeleteItemData(field string) error {
+	// Если data == nil, то нет необходимости выполнять удаление
+	if i.Data == nil {
+		return nil
+	}
+
+	return data.Delete(field, i.Data)
+}
+
 // GetSystemField возвращает описание поля для системных аттрибутов Item
 func GetSystemField(fld string) (*field.Field, error) {
 	switch fld {
diff --git a/pkg/items/item_test.go b/pkg/items/item_test.go
index fb54fc50..4ce46de9 100644
--- a/pkg/items/item_test.go
+++ b/pkg/items/item_test.go
@@ -25,6 +25,42 @@ func TestItem_Set(t *testing.T) {
 
 }
 
+func TestItem_DeleteItemData(t *testing.T) {
+	tests := []struct {
+		name    string
+		item    *Item
+		field   string
+		want    map[string]any
+		wantErr assert.ErrorAssertionFunc
+	}{
+		{
+			name:    "Simple",
+			item:    &Item{Data: map[string]any{"a": "b", "c": "d"}},
+			field:   "a",
+			want:    map[string]any{"c": "d"},
+			wantErr: assert.NoError,
+		},
+		{
+			name:    "Item data is nil",
+			item:    &Item{Data: nil},
+			field:   "a",
+			want:    nil,
+			wantErr: assert.NoError,
+		},
+	}
+
+	for _, tc := range tests {
+		t.Run(tc.name, func(t *testing.T) {
+			err := tc.item.DeleteItemData(tc.field)
+			assert.NoError(t, err)
+			if !tc.wantErr(t, err) {
+				return
+			}
+			assert.Equal(t, tc.want, tc.item.Data)
+		})
+	}
+}
+
 func TestGetField(t *testing.T) {
 	sch := schema.New(
 		"a", field.String(),
-- 
GitLab