Skip to content
Snippets Groups Projects
issue_7_test.go 1.66 KiB
package pathfinder

import (
	"github.com/stretchr/testify/assert"
	"testing"
)

// Test für SetValue
func TestSetValue(t *testing.T) {
	type Inner struct {
		Field PathValue
	}
	type Outer struct {
		InnerField *Inner
	}

	obj := &Outer{
		InnerField: &Inner{
			Field: "oldValue",
		},
	}

	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)
	}

	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)

}

type Issue7Routing struct {
	P PathValue `json:"p" yaml:"p"`
	X string    `json:"x" yaml:"x"`
}

type Issue7Server struct {
	Routing []Issue7Routing `json:"routing" yaml:"routing"`
}

type Issue7Config struct {
	Server Issue7Server `json:"server" yaml:"server"`
}

func TestPathRewrite(t *testing.T) {

	obj := Issue7Config{
		Server: Issue7Server{
			Routing: []Issue7Routing{
				{
					P: "./test",
					X: "testX",
				},
			},
		},
	}

	v, err := GetValue[*Issue7Config](&obj, "Server.Routing.0.P")
	assert.Nil(t, err)

	assert.Equal(t, v, PathValue("./test"))

	nv := PathValue("newValue")
	err = SetValue[*Issue7Config](&obj, "Server.Routing.0.P", nv)
	assert.Nil(t, err)

	if obj.Server.Routing[0].P != "newValue" {
		t.Fatalf("expected newValue, got: %s", obj.Server.Routing[0].P)
	}

	v, err = GetValue[*Issue7Config](&obj, "Server.Routing.0.P")
	assert.Nil(t, err)
	assert.Equal(t, v, nv)

}