| package testkit |
|
|
| import ( |
| "encoding/json" |
| "reflect" |
| "testing" |
|
|
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| ) |
|
|
| type ValidateFunc func(*testing.T, any) |
|
|
| func logJSONContent() ValidateFunc { |
| return func(t *testing.T, a any) { |
| data, err := json.MarshalIndent(a, "", "\t") |
| require.NoError(t, err) |
| |
| t.Logf("%s", data) |
| } |
| } |
|
|
| func assertIsValid() ValidateFunc { |
| return func(t *testing.T, a any) { |
| if v, ok := a.(interface{ IsValid() bool }); ok { |
| assert.True(t, v.IsValid()) |
| return |
| } |
| |
| require.Equal(t, reflect.Slice, reflect.TypeOf(a).Kind()) |
| s := reflect.ValueOf(a) |
| for i := 0; i < s.Len(); i++ { |
| x := s.Index(i).Interface() |
| require.Implements(t, (*interface{ IsValid() bool })(nil), x) |
| assert.True(t, x.(interface{ IsValid() bool }).IsValid()) |
| } |
| } |
| } |
|
|
| func FieldsNotEmpty(fields ...string) ValidateFunc { |
| return func(t *testing.T, a any) { |
| for _, field := range fields { |
| f, err := getStructFieldByName(a, field) |
| require.NoError(t, err) |
| assert.NotEmptyf(t, f, "field is empty: %s", field) |
| } |
| } |
| } |
|
|
| func FieldsNotEmptyAny(fields ...string) ValidateFunc { |
| return func(t *testing.T, a any) { |
| ok := false |
| for _, field := range fields { |
| f, err := getStructFieldByName(a, field) |
| if err != nil { |
| continue |
| } |
| z := reflect.Zero(reflect.ValueOf(f).Type()) |
| if !reflect.DeepEqual(f, z.Interface()) { |
| ok = true |
| } |
| } |
| assert.Truef(t, ok, "fields are all empty: %v", fields) |
| } |
| } |
|
|