1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
package indexers
import (
"testing"
"github.com/stretchr/testify/assert"
)
type Foo struct {
id string
}
func (f Foo) ID() string {
return f.id
}
func (f Foo) BadID() (string, error) {
return f.id, nil
}
type ID interface {
ID() string
}
func TestMethodIndexer(t *testing.T) {
assert := assert.New(t)
in := &MethodIndexer{
Method: "ID",
}
b := Foo{
id: "id1",
}
ok, val, err := in.FromObject(b)
assert.True(ok)
assert.Nil(err)
assert.Equal([]byte("id1"), val)
ok, val, err = in.FromObject(Foo{})
assert.False(ok)
assert.Nil(err)
assert.Empty(val)
idInterface := (ID)(b)
ok, val, err = in.FromObject(idInterface)
assert.True(ok)
assert.Nil(err)
assert.Equal([]byte("id1"), val)
val, err = in.FromArgs("id1")
assert.Nil(err)
assert.Equal([]byte("id1"), val)
val, err = in.FromArgs("")
assert.NotNil(err)
assert.Nil(val)
val, err = in.FromArgs(42)
assert.NotNil(err)
assert.Nil(val)
in = &MethodIndexer{
Method: "BadID",
}
ok, val, err = in.FromObject(Foo{id: "id1"})
assert.False(ok)
assert.NotNil(err)
assert.Empty(val)
}
|