109 lines
2.2 KiB
Go
109 lines
2.2 KiB
Go
package storm
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/boltdb/bolt"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestOne(t *testing.T) {
|
|
dir, _ := ioutil.TempDir(os.TempDir(), "storm")
|
|
defer os.RemoveAll(dir)
|
|
db, _ := Open(filepath.Join(dir, "storm.db"))
|
|
defer db.Close()
|
|
|
|
u := UniqueNameUser{Name: "John", ID: 10}
|
|
err := db.Save(&u)
|
|
assert.NoError(t, err)
|
|
|
|
v := UniqueNameUser{}
|
|
err = db.One("Name", "John", &v)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, u, v)
|
|
|
|
for i := 0; i < 10; i++ {
|
|
w := IndexedNameUser{Name: "John", ID: i + 1}
|
|
err := db.Save(&w)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
x := IndexedNameUser{}
|
|
err = db.One("Name", "John", &x)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "John", x.Name)
|
|
assert.Equal(t, 1, x.ID)
|
|
assert.Zero(t, x.age)
|
|
assert.True(t, x.DateOfBirth.IsZero())
|
|
|
|
err = db.One("Name", "Mike", &x)
|
|
assert.Error(t, err)
|
|
assert.Equal(t, ErrNotFound, err)
|
|
|
|
err = db.One("", nil, &x)
|
|
assert.Error(t, err)
|
|
assert.Equal(t, ErrNotFound, err)
|
|
|
|
err = db.One("", "Mike", nil)
|
|
assert.Error(t, err)
|
|
assert.Equal(t, ErrStructPtrNeeded, err)
|
|
|
|
err = db.One("", nil, nil)
|
|
assert.Error(t, err)
|
|
assert.Equal(t, ErrStructPtrNeeded, err)
|
|
|
|
y := UniqueNameUser{Name: "Jake", ID: 200}
|
|
err = db.Save(&y)
|
|
assert.NoError(t, err)
|
|
|
|
var y2 UniqueNameUser
|
|
err = db.One("ID", 200, &y2)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, y, y2)
|
|
|
|
n := NestedID{}
|
|
n.ID = "100"
|
|
n.Name = "John"
|
|
|
|
err = db.Save(&n)
|
|
assert.NoError(t, err)
|
|
|
|
var n2 NestedID
|
|
err = db.One("ID", "100", &n2)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, n, n2)
|
|
}
|
|
|
|
func TestOneNotWritable(t *testing.T) {
|
|
dir, _ := ioutil.TempDir(os.TempDir(), "storm")
|
|
defer os.RemoveAll(dir)
|
|
db, _ := Open(filepath.Join(dir, "storm.db"))
|
|
|
|
err := db.Save(&User{ID: 10, Name: "John"})
|
|
assert.NoError(t, err)
|
|
|
|
db.Close()
|
|
|
|
db, _ = Open(filepath.Join(dir, "storm.db"), BoltOptions(0660, &bolt.Options{
|
|
ReadOnly: true,
|
|
}))
|
|
defer db.Close()
|
|
|
|
err = db.Save(&User{ID: 20, Name: "John"})
|
|
assert.Error(t, err)
|
|
|
|
var u User
|
|
err = db.One("ID", 10, &u)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 10, u.ID)
|
|
assert.Equal(t, "John", u.Name)
|
|
|
|
err = db.One("Name", "John", &u)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 10, u.ID)
|
|
assert.Equal(t, "John", u.Name)
|
|
}
|