github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/audit/record_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package audit 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 ) 11 12 type bloated struct { 13 fld1 string 14 fld2 string 15 fld3 string 16 fld4 string 17 } 18 19 type wilted struct { 20 wilt1 string 21 } 22 23 func conv(val interface{}) (interface{}, bool) { 24 switch v := val.(type) { 25 case *bloated: 26 return &wilted{wilt1: v.fld1}, true 27 } 28 return val, false 29 } 30 31 func TestRecord_AddMeta(t *testing.T) { 32 type fields struct { 33 metaConv []FuncMetaTypeConv 34 } 35 type args struct { 36 name string 37 val interface{} 38 } 39 tests := []struct { 40 name string 41 fields fields 42 args args 43 wantWilt bool 44 wantVal string 45 }{ 46 {name: "no converter", wantWilt: false, wantVal: "ok", fields: fields{}, args: args{name: "prop", val: "ok"}}, 47 {name: "don't convert", wantWilt: false, wantVal: "ok", fields: fields{metaConv: []FuncMetaTypeConv{conv}}, args: args{name: "prop", val: "ok"}}, 48 {name: "convert", wantWilt: true, wantVal: "1", fields: fields{metaConv: []FuncMetaTypeConv{conv}}, args: args{name: "prop", val: &bloated{ 49 fld1: "1", fld2: "2", fld3: "3", fld4: "4"}}, 50 }, 51 } 52 for _, tt := range tests { 53 t.Run(tt.name, func(t *testing.T) { 54 rec := &Record{ 55 metaConv: tt.fields.metaConv, 56 } 57 rec.AddMeta(tt.args.name, tt.args.val) 58 59 // fetch the prop store in auditRecord meta data 60 got, ok := rec.Meta["prop"] 61 require.True(t, ok) 62 63 // check if conversion was expected 64 val, ok := got.(*wilted) 65 require.Equal(t, tt.wantWilt, ok) 66 67 if ok { 68 // if converted to wilt then make sure field was copied 69 require.Equal(t, tt.wantVal, val.wilt1) 70 } else { 71 // if not converted, make sure val is unchanged 72 require.Equal(t, tt.wantVal, got) 73 } 74 }) 75 } 76 }