func TestConversions(t *testing.T) { ts := time.Now() input := map[string]interface{}{ "testString": "hello", "testInt": 42, "testIntFromFloat": 42.0, "testIntFromInt64": int64(42), "testBool": true, "testObj": map[string]interface{}{ "testObjString": "hello, object", }, "testNonNestedObj": "hello from top level", "testTime": ts, // wrong types "testErrorInt": "42", "testErrorTime": 12, "testErrorBool": "false", "testErrorString": 32, } schema := s.Schema{ "test_string": Str("testString"), "test_int": Int("testInt"), "test_int_from_float": Int("testIntFromFloat"), "test_int_from_int64": Int("testIntFromInt64"), "test_bool": Bool("testBool"), "test_time": Time("testTime"), "test_obj_1": s.Object{ "test": Str("testNonNestedObj"), }, "test_obj_2": Dict("testObj", s.Schema{ "test": Str("testObjString"), }), "test_error_int": Int("testErrorInt", s.Optional), "test_error_time": Time("testErrorTime", s.Optional), "test_error_bool": Bool("testErrorBool", s.Optional), "test_error_string": Str("testErrorString", s.Optional), } expected := common.MapStr{ "test_string": "hello", "test_int": int64(42), "test_int_from_float": int64(42), "test_int_from_int64": int64(42), "test_bool": true, "test_time": common.Time(ts), "test_obj_1": common.MapStr{ "test": "hello from top level", }, "test_obj_2": common.MapStr{ "test": "hello, object", }, } output := schema.Apply(input) assert.Equal(t, output, expected) }
func TestConversions(t *testing.T) { input := map[string]interface{}{ "testString": "hello", "testInt": "42", "testBool": "true", "testFloat": "42.1", "testObjString": "hello, object", "testTime": "2016-08-12T08:00:59.601478Z", "testError": 42, // invalid, only strings are allowed "testErrorInt": "12a", // invalid integer "testErrorFloat": "12,2", // invalid float "testErrorBool": "yes", // invalid bool } schema := s.Schema{ "test_string": Str("testString"), "test_int": Int("testInt"), "test_bool": Bool("testBool"), "test_float": Float("testFloat"), "test_time": Time(time.RFC3339Nano, "testTime"), "test_obj": s.Object{ "test_obj_string": Str("testObjString"), }, "test_notexistant": Str("notexistant", s.Optional), "test_error": Str("testError", s.Optional), "test_error_int": Int("testErrorInt", s.Optional), "test_error_float": Float("testErrorFloat", s.Optional), "test_error_bool": Bool("testErrorBool", s.Optional), } ts, err := time.Parse(time.RFC3339Nano, "2016-08-12T08:00:59.601478Z") assert.NoError(t, err) expected := common.MapStr{ "test_string": "hello", "test_int": int64(42), "test_bool": true, "test_float": 42.1, "test_time": common.Time(ts), "test_obj": common.MapStr{ "test_obj_string": "hello, object", }, } output := schema.Apply(input) assert.Equal(t, output, expected) }
func TestConversions(t *testing.T) { input := map[string]interface{}{ "testString": "hello", "testInt": "42", "testBool": "true", "testFloat": "42.1", "testObjString": "hello, object", "testError": 42, // invalid, only strings are allowed "testErrorInt": "12a", // invalid integer "testErrorFloat": "12,2", // invalid float "testErrorBool": "yes", // invalid bool } schema := s.Schema{ "test_string": Str("testString"), "test_int": Int("testInt"), "test_bool": Bool("testBool"), "test_float": Float("testFloat"), "test_obj": s.Object{ "test_obj_string": Str("testObjString"), }, "test_notexistant": Str("notexistant", s.Optional), "test_error": Str("testError", s.Optional), "test_error_int": Int("testErrorInt", s.Optional), "test_error_float": Float("testErrorFloat", s.Optional), "test_error_bool": Bool("testErrorBool", s.Optional), } expected := common.MapStr{ "test_string": "hello", "test_int": int64(42), "test_bool": true, "test_float": 42.1, "test_obj": common.MapStr{ "test_obj_string": "hello, object", }, } output := schema.Apply(input) assert.Equal(t, output, expected) }