From 63817b98cb785e2cd4ec59bbcd8b21cdf05e1278 Mon Sep 17 00:00:00 2001 From: Justin Hawkins Date: Wed, 1 Jun 2022 16:33:08 +0930 Subject: [PATCH] Add test for indexing, fix indexing when page content changes --- db/index.go | 7 ++--- db/index_test.go | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 db/index_test.go diff --git a/db/index.go b/db/index.go index 14ecc2c..a2832ae 100644 --- a/db/index.go +++ b/db/index.go @@ -18,9 +18,10 @@ func (db *DB) UpdateIndexForWordsByID(words []string, id uint64) { if err != nil { panic(err) } - - db.store.TxForEach(txn, &bolthold.Query{}, func(wi *entity.WordIndex) { + db.store.TxForEach(txn, &bolthold.Query{}, func(wi *entity.WordIndex) error { delete(wi.Bitmap, id) + db.store.TxUpdate(txn, "word_index_"+wi.Word, wi) + return nil }) // adding @@ -36,7 +37,6 @@ func (db *DB) UpdateIndexForWordsByID(words []string, id uint64) { } thisWI.Bitmap[id] = true - // log.Printf("BM: %v", thisWI.Bitmap) err = db.store.TxUpsert(txn, "word_index_"+word, thisWI) if err != nil { panic(err) @@ -49,7 +49,6 @@ func (db *DB) UpdateIndexForWordsByID(words []string, id uint64) { panic(err) } } - } txn.Commit() diff --git a/db/index_test.go b/db/index_test.go new file mode 100644 index 0000000..f05d281 --- /dev/null +++ b/db/index_test.go @@ -0,0 +1,81 @@ +package db + +import ( + "net/http" + "net/http/httptest" + "os" + "testing" + + "github.com/tardisx/linkwallet/entity" +) + +var serverResponse string + +func newTestServer() *httptest.Server { + mux := http.NewServeMux() + + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/html") + w.Write([]byte(serverResponse)) + }) + return httptest.NewServer(mux) +} + +func TestAddRemove(t *testing.T) { + ts := newTestServer() + defer ts.Close() + serverResponse = "

the quick brown fox

" + + db := DB{} + f, _ := os.CreateTemp("", "test_boltdb_*") + f.Close() + defer os.Remove(f.Name()) + db.Open(f.Name()) + + bmm := NewBookmarkManager(&db) + bm := entity.Bookmark{URL: ts.URL} + + err := bmm.AddBookmark(&bm) + if err != nil { + t.Fatalf("error adding: %s", err) + } + if bm.ID == 0 { + t.Error("bookmark did not get an id") + } + err = bmm.ScrapeAndIndex(&bm) + if err != nil { + t.Errorf("scrape index returned %s", err) + } + + searchRes, err := bmm.Search("fox") + if err != nil { + t.Errorf("search returned %s", err) + } + if len(searchRes) != 1 { + t.Error("did not get one id") + } + + // change content, rescrape + serverResponse = "

the quick brown rabbit

" + err = bmm.ScrapeAndIndex(&bm) + if err != nil { + t.Errorf("scrape index returned %s", err) + } + + searchRes, err = bmm.Search("fox") + if err != nil { + t.Errorf("search returned %s", err) + } + if len(searchRes) != 0 { + t.Error("got result when should not") + } + + searchRes, err = bmm.Search("rabbit") + if err != nil { + t.Errorf("search returned %s", err) + } + if len(searchRes) != 1 { + t.Error("did not get result when should") + } + +}