Files
oddmu/index_test.go
Alex Schroeder 2a44c2a74f Make some of the types private
Don't export types unless necessary. Mostly because that looks weird
in Go documentation: when the functions acting on the types are
private the types themselves might as well be private.

Consequently, only the types that are used to write templates are
exported! For those types, the documentation has been improved (mostly
for Feed and Item).

In order to avoid nameclashes when hiding the types that didn't need
exporting, new naming schema was used. As these types were contains
for maps plus a mutex, they are called "stores" controlling access to
the maps: Accounts → accountStore, Index → indexStore, Template →
templateStore, Watches → watchStore.
2024-02-24 17:56:02 +01:00

110 lines
2.3 KiB
Go

package main
import (
"github.com/stretchr/testify/assert"
"strings"
"testing"
)
func TestIndexAdd(t *testing.T) {
idx := &indexStore{}
idx.reset()
idx.Lock()
defer idx.Unlock()
tag := "#hello"
id := idx.addDocument([]byte("oh hi " + tag))
assert.Contains(t, idx.token, tag)
idx.deleteDocument(id)
assert.NotContains(t, idx.token, tag)
}
// TestIndex relies on README.md being indexed
func TestIndex(t *testing.T) {
index.load()
q := "Oddµ"
pages, _ := search(q, "", "", 1, false)
assert.NotZero(t, len(pages))
for _, p := range pages {
assert.NotContains(t, p.Title, "<b>")
assert.True(t, strings.Contains(string(p.Body), q) || strings.Contains(string(p.Title), q))
assert.NotZero(t, p.Score, "Score %d for %s", p.Score, p.Name)
}
}
func TestSearchHashtag(t *testing.T) {
index.load()
q := "#like_this"
pages, _ := search(q, "", "", 1, false)
assert.NotZero(t, len(pages))
}
func TestIndexUpdates(t *testing.T) {
cleanup(t, "testdata/update")
name := "testdata/update/test"
index.load()
p := &Page{Name: name, Body: []byte("#Old Name\nThis is a test.")}
p.save()
// Find the phrase
pages, _ := search("This is a test", "", "", 1, false)
found := false
for _, p := range pages {
if p.Name == name {
found = true
break
}
}
assert.True(t, found)
// Find the phrase, case insensitive
pages, _ = search("this is a test", "", "", 1, false)
found = false
for _, p := range pages {
if p.Name == name {
found = true
break
}
}
assert.True(t, found)
// Find some words
pages, _ = search("this test", "", "", 1, false)
found = false
for _, p := range pages {
if p.Name == name {
found = true
break
}
}
assert.True(t, found)
// Update the page and no longer find it with the old phrase
p = &Page{Name: name, Body: []byte("# New page\nGuvf vf n grfg.")}
p.save()
pages, _ = search("This is a test", "", "", 1, false)
found = false
for _, p := range pages {
if p.Name == name {
found = true
break
}
}
assert.False(t, found)
// Find page using a new word
pages, _ = search("Guvf", "", "", 1, false)
found = false
for _, p := range pages {
if p.Name == name {
found = true
break
}
}
assert.True(t, found)
// Make sure the title was updated
index.RLock()
defer index.RUnlock()
assert.Equal(t, "New page", index.titles[name])
}