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  }