78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package storm
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestFind(t *testing.T) {
|
|
dir, _ := ioutil.TempDir(os.TempDir(), "storm")
|
|
defer os.RemoveAll(dir)
|
|
db, _ := Open(filepath.Join(dir, "storm.db"))
|
|
|
|
for i := 0; i < 100; i++ {
|
|
w := User{Name: "John", ID: i + 1, Slug: fmt.Sprintf("John%d", i+1)}
|
|
err := db.Save(&w)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
err := db.Find("Name", "John", &User{})
|
|
assert.Error(t, err)
|
|
assert.Equal(t, ErrSlicePtrNeeded, err)
|
|
|
|
err = db.Find("Name", "John", &[]struct {
|
|
Name string
|
|
ID int
|
|
}{})
|
|
assert.Error(t, err)
|
|
assert.Equal(t, ErrNoName, err)
|
|
|
|
notTheRightUsers := []UniqueNameUser{}
|
|
|
|
err = db.Find("Name", "John", ¬TheRightUsers)
|
|
assert.Error(t, err)
|
|
assert.EqualError(t, err, "bucket UniqueNameUser not found")
|
|
|
|
users := []User{}
|
|
|
|
err = db.Find("Age", "John", &users)
|
|
assert.Error(t, err)
|
|
assert.EqualError(t, err, "field Age not found")
|
|
|
|
err = db.Find("DateOfBirth", "John", &users)
|
|
assert.Error(t, err)
|
|
assert.Equal(t, ErrNotFound, err)
|
|
|
|
err = db.Find("Group", "John", &users)
|
|
assert.Error(t, err)
|
|
assert.EqualError(t, err, "index Group not found")
|
|
|
|
err = db.Find("Name", "John", &users)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, users, 100)
|
|
assert.Equal(t, 1, users[0].ID)
|
|
assert.Equal(t, 100, users[99].ID)
|
|
|
|
users = []User{}
|
|
err = db.Find("Slug", "John10", &users)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, users, 1)
|
|
assert.Equal(t, 10, users[0].ID)
|
|
|
|
users = []User{}
|
|
err = db.Find("Name", nil, &users)
|
|
assert.Error(t, err)
|
|
assert.Equal(t, ErrNotFound, err)
|
|
|
|
err = db.Find("Name", "John", &users, Limit(10), Skip(20))
|
|
assert.NoError(t, err)
|
|
assert.Len(t, users, 10)
|
|
assert.Equal(t, 21, users[0].ID)
|
|
assert.Equal(t, 30, users[9].ID)
|
|
}
|