From b88fef16d9592d572138acc9bae9a5ba7984c6ce Mon Sep 17 00:00:00 2001
From: Volker Schukai <volker.schukai@schukai.com>
Date: Wed, 13 Sep 2023 20:23:32 +0200
Subject: [PATCH] fix:  #7

---
 issue_2_test.go | 10 ++++++++++
 issue_7_test.go | 31 +++++++++++++++++++------------
 set.go          |  9 ++++++++-
 3 files changed, 37 insertions(+), 13 deletions(-)

diff --git a/issue_2_test.go b/issue_2_test.go
index a86b84b..f9d652f 100644
--- a/issue_2_test.go
+++ b/issue_2_test.go
@@ -135,7 +135,17 @@ func TestReplacePathForConfig(t *testing.T) {
 		},
 	}
 
+	nn, err2 := GetValue[MainTestStruct](config, "Sub.Default.Paths.Template")
+	assert.Nil(t, err2)
+
+	assert.Equal(t, nn, PathValue("../../../default.html"))
+
 	err := SetValue[*MainTestStruct](&config, "Sub.Default.Paths.Template", "test")
 	assert.Nil(t, err)
 
+	nn, err3 := GetValue[MainTestStruct](config, "Sub.Default.Paths.Template")
+	assert.Nil(t, err3)
+
+	assert.Equal(t, nn, PathValue("test"))
+
 }
diff --git a/issue_7_test.go b/issue_7_test.go
index 20c31d3..7eb118b 100644
--- a/issue_7_test.go
+++ b/issue_7_test.go
@@ -1,20 +1,10 @@
 package pathfinder
 
 import (
+	"github.com/stretchr/testify/assert"
 	"testing"
 )
 
-//// Ihre Fehlerdefinitionen
-//func newInvalidPathError(path string) error {
-//	return fmt.Errorf("invalid path: %s", path)
-//}
-//
-//func newCannotSetError(path string) error {
-//	return fmt.Errorf("cannot set: %s", path)
-//}
-
-// ... weitere Fehlerdefinitionen
-
 // Test für SetValue
 func TestSetValue(t *testing.T) {
 	type Inner struct {
@@ -23,13 +13,22 @@ func TestSetValue(t *testing.T) {
 	type Outer struct {
 		InnerField *Inner
 	}
+
 	obj := &Outer{
 		InnerField: &Inner{
 			Field: "oldValue",
 		},
 	}
 
-	err := SetValue(obj, "InnerField.Field", PathValue("newValue"))
+	v, err := GetValue[Outer](*obj, "InnerField.Field")
+	if err != nil {
+		t.Error(err)
+	}
+
+	assert.Equal(t, v, PathValue("oldValue"))
+
+	nv := PathValue("newValue")
+	err = SetValue[*Outer](obj, "InnerField.Field", nv)
 	if err != nil {
 		t.Fatalf("unexpected error: %v", err)
 	}
@@ -37,4 +36,12 @@ func TestSetValue(t *testing.T) {
 	if obj.InnerField.Field != "newValue" {
 		t.Fatalf("expected newValue, got: %s", obj.InnerField.Field)
 	}
+
+	v, err = GetValue[Outer](*obj, "InnerField.Field")
+	if err != nil {
+		t.Error(err)
+	}
+
+	assert.Equal(t, v, nv)
+
 }
diff --git a/set.go b/set.go
index 1c2babb..1c1a387 100644
--- a/set.go
+++ b/set.go
@@ -51,7 +51,14 @@ func SetValue[D any](obj D, keyWithDots string, newValue any) error {
 				return newCannotSetError("Wert ist nicht adressierbar")
 			}
 			newKey := strings.Join(keySlice[keyIndex+1:], ".")
-			return SetValue(newValueCopyPtr, newKey, newValue)
+			err := SetValue(newValueCopyPtr, newKey, newValue)
+			if err != nil {
+				return err
+			}
+
+			v.SetMapIndex(reflect.ValueOf(key), reflect.ValueOf(newValueCopy).Elem())
+			return nil
+
 		}
 
 		if v.Kind() == reflect.Ptr && v.Elem().Kind() == reflect.Interface {
-- 
GitLab