From e0470a4cb69bbb3a5825d4e11a4f85ffd13389f0 Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Tue, 8 Mar 2022 15:08:34 +0200 Subject: [PATCH] Add *json converter + tests --- utils/dataconverter.go | 13 ++++++++++ utils/dataconverter_test.go | 49 +++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/utils/dataconverter.go b/utils/dataconverter.go index a954c9809..b311b7fd5 100644 --- a/utils/dataconverter.go +++ b/utils/dataconverter.go @@ -75,6 +75,8 @@ func NewDataConverter(params string) (conv DataConverter, err error) { return NewDivideConverter(EmptyString) } return NewDivideConverter(params[len(MetaDivide)+1:]) + case params == MetaJSON: + return new(JSONConverter), nil case params == MetaDuration: return NewDurationConverter(EmptyString) case params == MetaIP2Hex: @@ -573,3 +575,14 @@ func (e164Converter) Convert(in interface{}) (interface{}, error) { return ReverseString( strings.Replace(name[:i], ".", "", -1)), nil } + +// JSONConverter converts an object to json string +type JSONConverter struct{} + +func (jsnC JSONConverter) Convert(in interface{}) (interface{}, error) { + b, err := json.Marshal(in) + if err != nil { + return in, err + } + return string(b), nil +} diff --git a/utils/dataconverter_test.go b/utils/dataconverter_test.go index 483a6448b..5fe3d904d 100644 --- a/utils/dataconverter_test.go +++ b/utils/dataconverter_test.go @@ -1223,3 +1223,52 @@ func TestDomainNameFromNAPTRConverter(t *testing.T) { t.Errorf("received: <%s>", dName) } } + +type structWithFuncField struct { + ID string + Function func(int) bool +} + +func TestDataConverterConvertJSONErrUnsupportedType(t *testing.T) { + dc, err := NewDataConverter(MetaJSON) + if err != nil { + t.Error(err) + } + + obj := structWithFuncField{ + ID: "testStruct", + Function: func(i int) bool { + return i != 0 + }, + } + + experr := `json: unsupported type: func(int) bool` + if _, err := dc.Convert(obj); err == nil || err.Error() != experr { + t.Errorf("expected: <%+v>, \nreceived: <%+v>", experr, err) + } +} + +func TestDataConverterConvertJSONOK(t *testing.T) { + dc, err := NewDataConverter(MetaJSON) + if err != nil { + t.Error(err) + } + + obj := &CGREvent{ + Tenant: "cgrates.org", + ID: "TestCGREv", + Event: map[string]interface{}{ + AccountField: "1001", + }, + APIOpts: map[string]interface{}{ + "opt": "value", + }, + } + + exp := ToJSON(obj) + if rcv, err := dc.Convert(obj); err != nil { + t.Error(err) + } else if rcv.(string) != exp { + t.Errorf("expected: <%+v>, \nreceived: <%+v>", exp, rcv) + } +}