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  }