diff --git a/internal/client/clienttools.go b/internal/client/clienttools.go index 06f0b7f..c13d690 100644 --- a/internal/client/clienttools.go +++ b/internal/client/clienttools.go @@ -96,7 +96,7 @@ func buildPath(baseUrl string, path string, parameters map[string]string, query if err != nil { return nil } - parsed.Path = path + parsed.Path = parsed.Path + path parsed.RawQuery = params.Encode() return parsed } diff --git a/internal/restResources/support.go b/internal/restResources/support.go index 211e626..a10ab32 100644 --- a/internal/restResources/support.go +++ b/internal/restResources/support.go @@ -422,7 +422,12 @@ func populateStatusFields(clientInfo *getter.Info, mg *unstructured.Unstructured for k, v := range *body { for _, identifier := range clientInfo.Resource.Identifiers { if k == identifier { - err := unstructured.SetNestedField(mg.Object, text.GenericToString(v), "status", identifier) + stringValue, err := text.GenericToString(v) + if err != nil { + log.Err(err).Msg("Converting value to string") + return err + } + err = unstructured.SetNestedField(mg.Object, stringValue, "status", identifier) if err != nil { log.Err(err).Msg("Setting identifier") return err diff --git a/internal/text/genericstringer.go b/internal/text/genericstringer.go index 73d6f5b..6d60cc3 100644 --- a/internal/text/genericstringer.go +++ b/internal/text/genericstringer.go @@ -1,22 +1,24 @@ package text import ( + "encoding/json" "fmt" "reflect" ) -func GenericToString(i interface{}) string { +func GenericToString(i interface{}) (string, error) { if reflect.TypeOf(i).Kind() == reflect.String { - return i.(string) + return i.(string), nil } if reflect.TypeOf(i).Kind() == reflect.Float32 || reflect.TypeOf(i).Kind() == reflect.Float64 { - return fmt.Sprintf("%d", int(i.(float64))) + return fmt.Sprintf("%d", int(i.(float64))), nil } if reflect.TypeOf(i).Kind() == reflect.Int || reflect.TypeOf(i).Kind() == reflect.Int32 || reflect.TypeOf(i).Kind() == reflect.Int64 || reflect.TypeOf(i).Kind() == reflect.Uint || reflect.TypeOf(i).Kind() == reflect.Uint32 || reflect.TypeOf(i).Kind() == reflect.Uint64 { - return fmt.Sprintf("%d", i) + return fmt.Sprintf("%d", i), nil } if reflect.TypeOf(i).Kind() == reflect.Bool { - return fmt.Sprintf("%t", i.(bool)) + return fmt.Sprintf("%t", i.(bool)), nil } - return "" + b, err := json.Marshal(i) + return string(b), err } diff --git a/internal/text/genericstringer_test.go b/internal/text/genericstringer_test.go new file mode 100644 index 0000000..d896ec9 --- /dev/null +++ b/internal/text/genericstringer_test.go @@ -0,0 +1,30 @@ +package text + +import ( + "testing" +) + +func TestGenericToString(t *testing.T) { + tests := []struct { + input interface{} + expected string + hasError bool + }{ + {"hello", "hello", false}, + {123, "123", false}, + {123.456, "123", false}, + {true, "true", false}, + {false, "false", false}, + {[]int{1, 2, 3}, "[1,2,3]", false}, + } + + for _, test := range tests { + result, err := GenericToString(test.input) + if (err != nil) != test.hasError { + t.Errorf("GenericToString(%v) returned error: %v, expected error: %v", test.input, err, test.hasError) + } + if result != test.expected { + t.Errorf("GenericToString(%v) = %v, expected %v", test.input, result, test.expected) + } + } +}