85 lines
2.1 KiB
Go
85 lines
2.1 KiB
Go
package storm
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestRange(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%03d", i+1),
|
|
DateOfBirth: time.Now().Add(-time.Duration(i) * time.Hour),
|
|
}
|
|
err := db.Save(&w)
|
|
assert.NoError(t, err)
|
|
z := User{Name: fmt.Sprintf("Zach%03d", i+1), ID: i + 101, Slug: fmt.Sprintf("Zach%03d", i+1)}
|
|
err = db.Save(&z)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
min := "John010"
|
|
max := "John020"
|
|
var users []User
|
|
err := db.Range("Slug", min, max, &users)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, users, 11)
|
|
assert.Equal(t, "John010", users[0].Slug)
|
|
assert.Equal(t, "John020", users[10].Slug)
|
|
|
|
min = "Zach010"
|
|
max = "Zach020"
|
|
users = nil
|
|
err = db.Range("Name", min, max, &users)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, users, 11)
|
|
assert.Equal(t, "Zach010", users[0].Name)
|
|
assert.Equal(t, "Zach020", users[10].Name)
|
|
|
|
err = db.Range("Name", min, max, &User{})
|
|
assert.Error(t, err)
|
|
assert.Equal(t, ErrSlicePtrNeeded, err)
|
|
|
|
notTheRightUsers := []UniqueNameUser{}
|
|
|
|
err = db.Range("Name", min, max, ¬TheRightUsers)
|
|
assert.Error(t, err)
|
|
assert.EqualError(t, err, "bucket UniqueNameUser not found")
|
|
|
|
users = nil
|
|
|
|
err = db.Range("Age", min, max, &users)
|
|
assert.Error(t, err)
|
|
assert.EqualError(t, err, "field Age not found")
|
|
|
|
dateMin := time.Now().Add(-time.Duration(50) * time.Hour)
|
|
dateMax := dateMin.Add(time.Duration(3) * time.Hour)
|
|
err = db.Range("DateOfBirth", dateMin, dateMax, &users)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, users, 3)
|
|
assert.Equal(t, "John050", users[0].Slug)
|
|
assert.Equal(t, "John048", users[2].Slug)
|
|
|
|
err = db.Range("Slug", "John010", "John040", &users, Limit(10), Skip(20))
|
|
assert.NoError(t, err)
|
|
assert.Len(t, users, 10)
|
|
assert.Equal(t, 30, users[0].ID)
|
|
assert.Equal(t, 39, users[9].ID)
|
|
|
|
err = db.Range("Group", min, max, &users)
|
|
assert.Error(t, err)
|
|
assert.EqualError(t, err, "index Group not found")
|
|
}
|