github.com/gocaveman/caveman@v0.0.0-20191211162744-0ddf99dbdf6e/valid/fields_test.go (about) 1 package valid 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 type SampleStruct struct { 10 11 // check valid struct tag name= 12 FieldValidName string `valid:"something,name=field_valid_name_here,whatever"` 13 14 // check json struct tag 15 FieldJSONName string `json:"field_json_name_here,omitempty"` 16 17 // check db struct tag 18 FieldDBName string `json:"field_db_name_here"` 19 20 // check exact match to field name 21 FieldExactName string 22 } 23 24 func TestReadFields(t *testing.T) { 25 26 assert := assert.New(t) 27 28 // struct 29 30 sample := &SampleStruct{ 31 FieldValidName: "value - valid", 32 FieldJSONName: "value - json", 33 FieldDBName: "value - db", 34 FieldExactName: "value - exact", 35 } 36 37 var v interface{} 38 var err error 39 40 v, err = ReadField(sample, "field_valid_name_here") 41 assert.NoError(err) 42 assert.Equal("value - valid", v) 43 44 v, err = ReadField(sample, "FieldValidNameHere") 45 assert.NoError(err) 46 assert.Equal("value - valid", v) 47 48 v, err = ReadField(sample, "field_json_name_here") 49 assert.NoError(err) 50 assert.Equal("value - json", v) 51 52 v, err = ReadField(sample, "field_db_name_here") 53 assert.NoError(err) 54 assert.Equal("value - db", v) 55 56 v, err = ReadField(sample, "FieldExactName") 57 assert.NoError(err) 58 assert.Equal("value - exact", v) 59 60 // // should also be available as snake_case 61 // v, err = ReadField(sample, "field_exact_name") 62 // assert.NoError(err) 63 // assert.Equal("value - exact", v) 64 65 v, err = ReadField(sample, "DoesNotExist") 66 assert.Error(err) 67 68 // map 69 sampleMap := map[string]interface{}{ 70 "key1": "value1", 71 } 72 73 v, err = ReadField(sampleMap, "key1") 74 assert.Equal("value1", v) 75 assert.NoError(err) 76 v, err = ReadField(sampleMap, "does_not_exist") 77 assert.Nil(v) 78 assert.NoError(err) 79 80 } 81 82 func TestWriteFields(t *testing.T) { 83 84 assert := assert.New(t) 85 86 sample := &SampleStruct{} 87 88 assert.NoError(WriteField(sample, "field_valid_name_here", "v1")) 89 assert.Equal("v1", sample.FieldValidName) 90 91 assert.NoError(WriteField(sample, "FieldValidNameHere", "v2")) 92 assert.Equal("v2", sample.FieldValidName) 93 94 assert.NoError(WriteField(sample, "field_json_name_here", "v3")) 95 assert.Equal("v3", sample.FieldJSONName) 96 97 assert.NoError(WriteField(sample, "field_db_name_here", "v4")) 98 assert.Equal("v4", sample.FieldDBName) 99 100 assert.NoError(WriteField(sample, "FieldExactName", "v5")) 101 assert.Equal("v5", sample.FieldExactName) 102 103 assert.Error(WriteField(sample, "DoesNotExist", "whatever")) 104 105 // map 106 sampleMap := map[string]interface{}{ 107 "key1": "value1", 108 } 109 assert.NoError(WriteField(sampleMap, "key1", "value1a")) 110 assert.Equal("value1a", sampleMap["key1"]) 111 assert.NoError(WriteField(sampleMap, "key2", "value2")) 112 assert.Equal("value2", sampleMap["key2"]) 113 114 }