diff --git a/pkg/items/item.go b/pkg/items/item.go index 7c34d2bb3563b338d6c3cb0baf97c4e49f58b535..2e76469c7b0a63d4cddf4ad3cd74961f1932a458 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) } +// Delete удаляет значение поля Data +func (i *Item) Delete(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 fb54fc501f45281bbafd37983de3b8638d5692d4..dfcc16ee1c7b40441b5df54acc48a12b276669ca 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.Delete(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(),