Add *json converter + tests

This commit is contained in:
ionutboangiu
2022-03-08 15:08:34 +02:00
committed by Dan Christian Bogos
parent 0dee207d6a
commit e0470a4cb6
2 changed files with 62 additions and 0 deletions

View File

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

View File

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