gosuki/mozilla/queries_test.go
2023-02-19 00:13:23 +01:00

140 lines
3.1 KiB
Go

package mozilla
import (
"testing"
"git.blob42.xyz/gomark/gosuki/database"
"git.blob42.xyz/gomark/gosuki/utils"
"github.com/gchaincl/dotsql"
_ "github.com/kr/pretty"
"github.com/swithek/dotsqlx"
)
func Test_loadQueries(t *testing.T) {
queries := map[string]string{
"merged-places-bookmarks": "merged_places_bookmarks.sql",
"recursive-all-bookmarks": "recursive_all_bookmarks.sql",
"recursive-modified-bookmarks": "recursive_modified_bookmarks.sql",
}
loadedQueries := map[string]*dotsqlx.DotSqlx{}
exists, err := utils.CheckFileExists("testdata/places.sqlite")
if err != nil {
t.Fatal(err)
}
if !exists {
t.Fatal("places file does not exist")
}
db := database.NewDB("test_places", "testdata/places.sqlite", database.DBTypeFileDSN)
defer func() {
err := db.Close()
if err != nil {
t.Fatal()
}
}()
_, err = db.Init()
if err != nil {
t.Error(err)
}
for q, qfile := range queries {
dot, err := dotsql.LoadFromFile(qfile)
if err != nil {
t.Fatal(err)
}
dotx := dotsqlx.Wrap(dot)
_, err = dotx.Raw(q)
if err != nil {
t.Fatal(err)
}
loadedQueries[q] = dotx
}
// Loading of bookmarks and their folders algorithm:
// 1. [*] execute merged places_bookmarks table query
// [*] scan the query into a bookmark_places struct
// 3- go through bookmarks and
// - add tag nodes
// - add url nodes
// ?- add hierarchy relationship ?
// - store folders as hierarchy using a separate tree
// - extract folders tree into a flat tag list
// - store tag list with appropriate hierarcy info
//
// 4- Sync URLIndex to the the buffer DB
t.Run("Scanning merged-places-bookmarks", func(t *testing.T) {
queryName := "merged-places-bookmarks"
dotx, ok := loadedQueries[queryName]
if !ok {
t.Fatalf("cannot load query")
}
rowsx, err := dotx.Queryx(db.Handle, queryName)
if err != nil {
t.Fatal(err)
}
for rowsx.Next() {
var placebk MergedPlaceBookmark
err = rowsx.StructScan(&placebk)
if err != nil {
t.Error(err)
}
}
t.Run("Select bookmarks", func(t *testing.T) {
var bookmarks []*MergedPlaceBookmark
err := loadedQueries[queryName].Select(db.Handle, &bookmarks, queryName)
if err != nil {
t.Error(err)
}
// pretty.Log(bookmarks)
})
})
t.Run("Scanning recursive-all-bookmarks", func(t *testing.T) {
queryName := "recursive-all-bookmarks"
dotx, ok := loadedQueries[queryName]
if !ok {
t.Fatalf("cannot load query")
}
rowsx, err := dotx.Queryx(db.Handle, queryName)
if err != nil {
t.Fatal(err)
}
for rowsx.Next() {
var mozBk MozBookmark
err = rowsx.StructScan(&mozBk)
if err != nil {
t.Error(err)
}
}
t.Run("Select bookmarks", func(t *testing.T) {
var bookmarks []*MozBookmark
err := loadedQueries[queryName].Select(db.Handle, &bookmarks, queryName)
if err != nil {
t.Error(err)
}
// pretty.Log(bookmarks)
})
})
}