tbotd/vendor/src/github.com/asdine/storm/one_test.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)
}