You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zk/adapter/sqlite/collection_dao_test.go

73 lines
2.2 KiB
Go

package sqlite
import (
"testing"
"github.com/mickael-menu/zk/core"
"github.com/mickael-menu/zk/util"
"github.com/mickael-menu/zk/util/test/assert"
)
func TestCollectionDAOFindOrCreate(t *testing.T) {
testCollectionDAO(t, func(tx Transaction, dao *CollectionDAO) {
// Finds existing ones
id, err := dao.FindOrCreate("tag", "adventure")
assert.Nil(t, err)
assert.Equal(t, id, core.CollectionId(2))
id, err = dao.FindOrCreate("genre", "fiction")
assert.Nil(t, err)
assert.Equal(t, id, core.CollectionId(3))
// The name is case sensitive
id, err = dao.FindOrCreate("tag", "Adventure")
assert.Nil(t, err)
assert.NotEqual(t, id, core.CollectionId(2))
// Creates when not found
sql := "SELECT id FROM collections WHERE kind = ? AND name = ?"
assertNotExist(t, tx, sql, "unknown", "created")
_, err = dao.FindOrCreate("unknown", "created")
assert.Nil(t, err)
assertExist(t, tx, sql, "unknown", "created")
})
}
func TestCollectionDAOAssociate(t *testing.T) {
testCollectionDAO(t, func(tx Transaction, dao *CollectionDAO) {
// Returns existing association
id, err := dao.Associate(1, 2)
assert.Nil(t, err)
assert.Equal(t, id, core.NoteCollectionId(2))
// Creates a new association if missing
noteId := core.NoteId(5)
collectionId := core.CollectionId(3)
sql := "SELECT id FROM notes_collections WHERE note_id = ? AND collection_id = ?"
assertNotExist(t, tx, sql, noteId, collectionId)
_, err = dao.Associate(noteId, collectionId)
assert.Nil(t, err)
assertExist(t, tx, sql, noteId, collectionId)
})
}
func TestCollectionDAORemoveAssociations(t *testing.T) {
testCollectionDAO(t, func(tx Transaction, dao *CollectionDAO) {
noteId := core.NoteId(1)
sql := "SELECT id FROM notes_collections WHERE note_id = ?"
assertExist(t, tx, sql, noteId)
err := dao.RemoveAssociations(noteId)
assert.Nil(t, err)
assertNotExist(t, tx, sql, noteId)
// Removes associations of note without any.
err = dao.RemoveAssociations(999)
assert.Nil(t, err)
})
}
func testCollectionDAO(t *testing.T, callback func(tx Transaction, dao *CollectionDAO)) {
testTransaction(t, func(tx Transaction) {
callback(tx, NewCollectionDAO(tx, &util.NullLogger))
})
}