mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Add *json converter + tests
This commit is contained in:
committed by
Dan Christian Bogos
parent
0dee207d6a
commit
e0470a4cb6
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user