Co-authored-by: Tom Moulard <tom.moulard@traefik.io> Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
382 lines
6.9 KiB
Go
382 lines
6.9 KiB
Go
package redactor
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type Courgette struct {
|
|
Ji string
|
|
Ho string
|
|
}
|
|
|
|
type Tomate struct {
|
|
Ji string
|
|
Ho string
|
|
}
|
|
|
|
type Carotte struct {
|
|
Name string
|
|
EName string `export:"true"`
|
|
EFName string `export:"false"`
|
|
Value int
|
|
EValue int `export:"true"`
|
|
EFValue int `export:"false"`
|
|
List []string
|
|
EList []string `export:"true"`
|
|
EFList []string `export:"false"`
|
|
Courgette Courgette
|
|
ECourgette Courgette `export:"true"`
|
|
EFCourgette Courgette `export:"false"`
|
|
Pourgette *Courgette
|
|
EPourgette *Courgette `export:"true"`
|
|
EFPourgette *Courgette `export:"false"`
|
|
Aubergine map[string]string
|
|
EAubergine map[string]string `export:"true"`
|
|
EFAubergine map[string]string `export:"false"`
|
|
SAubergine map[string]Tomate
|
|
ESAubergine map[string]Tomate `export:"true"`
|
|
EFSAubergine map[string]Tomate `export:"false"`
|
|
PSAubergine map[string]*Tomate
|
|
EPAubergine map[string]*Tomate `export:"true"`
|
|
EFPAubergine map[string]*Tomate `export:"false"`
|
|
}
|
|
|
|
func Test_doOnStruct(t *testing.T) {
|
|
testCase := []struct {
|
|
name string
|
|
base *Carotte
|
|
expected *Carotte
|
|
redactByDefault bool
|
|
}{
|
|
{
|
|
name: "primitive",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EName: "kiki",
|
|
Value: 666,
|
|
EValue: 666,
|
|
List: []string{"test"},
|
|
EList: []string{"test"},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "xxxx",
|
|
EName: "kiki",
|
|
EValue: 666,
|
|
List: []string{"xxxx"},
|
|
EList: []string{"test"},
|
|
},
|
|
redactByDefault: true,
|
|
},
|
|
{
|
|
name: "primitive2",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EFName: "keke",
|
|
Value: 666,
|
|
EFValue: 777,
|
|
List: []string{"test"},
|
|
EFList: []string{"test"},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "koko",
|
|
EFName: "xxxx",
|
|
Value: 666,
|
|
List: []string{"test"},
|
|
EFList: []string{"xxxx"},
|
|
},
|
|
redactByDefault: false,
|
|
},
|
|
{
|
|
name: "struct",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
Courgette: Courgette{
|
|
Ji: "huu",
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "xxxx",
|
|
},
|
|
redactByDefault: true,
|
|
},
|
|
{
|
|
name: "struct2",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EFName: "keke",
|
|
Courgette: Courgette{
|
|
Ji: "huu",
|
|
},
|
|
EFCourgette: Courgette{
|
|
Ji: "huu",
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "koko",
|
|
EFName: "xxxx",
|
|
Courgette: Courgette{
|
|
Ji: "huu",
|
|
Ho: "",
|
|
},
|
|
},
|
|
redactByDefault: false,
|
|
},
|
|
{
|
|
name: "pointer",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
Pourgette: &Courgette{
|
|
Ji: "hoo",
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "xxxx",
|
|
Pourgette: nil,
|
|
},
|
|
redactByDefault: true,
|
|
},
|
|
{
|
|
name: "pointer2",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EFName: "keke",
|
|
Pourgette: &Courgette{
|
|
Ji: "hoo",
|
|
},
|
|
EFPourgette: &Courgette{
|
|
Ji: "hoo",
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "koko",
|
|
EFName: "xxxx",
|
|
Pourgette: &Courgette{
|
|
Ji: "hoo",
|
|
},
|
|
EFPourgette: nil,
|
|
},
|
|
redactByDefault: false,
|
|
},
|
|
{
|
|
name: "export struct",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
ECourgette: Courgette{
|
|
Ji: "huu",
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "xxxx",
|
|
ECourgette: Courgette{
|
|
Ji: "xxxx",
|
|
},
|
|
},
|
|
redactByDefault: true,
|
|
},
|
|
{
|
|
name: "export struct 2",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EFName: "keke",
|
|
ECourgette: Courgette{
|
|
Ji: "huu",
|
|
},
|
|
EFCourgette: Courgette{
|
|
Ji: "huu",
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "koko",
|
|
EFName: "xxxx",
|
|
ECourgette: Courgette{
|
|
Ji: "huu",
|
|
},
|
|
},
|
|
redactByDefault: false,
|
|
},
|
|
{
|
|
name: "export pointer struct",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EPourgette: &Courgette{
|
|
Ji: "huu",
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "xxxx",
|
|
EPourgette: &Courgette{
|
|
Ji: "xxxx",
|
|
},
|
|
},
|
|
redactByDefault: true,
|
|
},
|
|
{
|
|
name: "export pointer struct 2",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EFName: "keke",
|
|
EPourgette: &Courgette{
|
|
Ji: "huu",
|
|
},
|
|
EFPourgette: &Courgette{
|
|
Ji: "huu",
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "koko",
|
|
EFName: "xxxx",
|
|
EPourgette: &Courgette{
|
|
Ji: "huu",
|
|
},
|
|
EFPourgette: nil,
|
|
},
|
|
redactByDefault: false,
|
|
},
|
|
{
|
|
name: "export map string/string",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EAubergine: map[string]string{
|
|
"foo": "bar",
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "xxxx",
|
|
EAubergine: map[string]string{
|
|
"foo": "bar",
|
|
},
|
|
},
|
|
redactByDefault: true,
|
|
},
|
|
{
|
|
name: "export map string/string 2",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EFName: "keke",
|
|
EAubergine: map[string]string{
|
|
"foo": "bar",
|
|
},
|
|
EFAubergine: map[string]string{
|
|
"foo": "bar",
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "koko",
|
|
EFName: "xxxx",
|
|
EAubergine: map[string]string{
|
|
"foo": "bar",
|
|
},
|
|
EFAubergine: map[string]string{},
|
|
},
|
|
redactByDefault: false,
|
|
},
|
|
{
|
|
name: "export map string/pointer",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EPAubergine: map[string]*Tomate{
|
|
"foo": {
|
|
Ji: "fdskljf",
|
|
},
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "xxxx",
|
|
EPAubergine: map[string]*Tomate{
|
|
"foo": {
|
|
Ji: "xxxx",
|
|
},
|
|
},
|
|
},
|
|
redactByDefault: true,
|
|
},
|
|
{
|
|
name: "export map string/pointer 2",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
EPAubergine: map[string]*Tomate{
|
|
"foo": {
|
|
Ji: "fdskljf",
|
|
},
|
|
},
|
|
EFPAubergine: map[string]*Tomate{
|
|
"foo": {
|
|
Ji: "fdskljf",
|
|
},
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "koko",
|
|
EPAubergine: map[string]*Tomate{
|
|
"foo": {
|
|
Ji: "fdskljf",
|
|
},
|
|
},
|
|
EFPAubergine: map[string]*Tomate{},
|
|
},
|
|
redactByDefault: false,
|
|
},
|
|
{
|
|
name: "export map string/struct",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
ESAubergine: map[string]Tomate{
|
|
"foo": {
|
|
Ji: "JiJiJi",
|
|
},
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "xxxx",
|
|
ESAubergine: map[string]Tomate{
|
|
"foo": {
|
|
Ji: "xxxx",
|
|
},
|
|
},
|
|
},
|
|
redactByDefault: true,
|
|
},
|
|
{
|
|
name: "export map string/struct 2",
|
|
base: &Carotte{
|
|
Name: "koko",
|
|
ESAubergine: map[string]Tomate{
|
|
"foo": {
|
|
Ji: "JiJiJi",
|
|
},
|
|
},
|
|
EFSAubergine: map[string]Tomate{
|
|
"foo": {
|
|
Ji: "JiJiJi",
|
|
},
|
|
},
|
|
},
|
|
expected: &Carotte{
|
|
Name: "koko",
|
|
ESAubergine: map[string]Tomate{
|
|
"foo": {
|
|
Ji: "JiJiJi",
|
|
},
|
|
},
|
|
EFSAubergine: map[string]Tomate{},
|
|
},
|
|
redactByDefault: false,
|
|
},
|
|
}
|
|
|
|
for _, test := range testCase {
|
|
test := test
|
|
t.Run(test.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
val := reflect.ValueOf(test.base).Elem()
|
|
err := doOnStruct(val, tagExport, test.redactByDefault)
|
|
require.NoError(t, err)
|
|
|
|
assert.EqualValues(t, test.expected, test.base)
|
|
})
|
|
}
|
|
}
|