mirror of
https://github.com/go-vikunja/vikunja.git
synced 2026-04-30 08:25:58 -05:00
test: add result count assertions for ParadeDB search tests
Address review feedback: assert exact result counts when ParadeDB is active. fuzzy(1, prefix=true) broadens matches via edit distance, returning 6 projects for "TEST10", 14 tasks for "number #17", and 12 projects for "Test1".
This commit is contained in:
@@ -533,9 +533,9 @@ func TestProject_ReadAll(t *testing.T) {
|
|||||||
ls := projects3.([]*Project)
|
ls := projects3.([]*Project)
|
||||||
|
|
||||||
if db.ParadeDBAvailable() {
|
if db.ParadeDBAvailable() {
|
||||||
// ParadeDB fuzzy prefix matching returns more results
|
// ParadeDB fuzzy(1, prefix=true) on "TEST10" also matches
|
||||||
// (e.g. "TEST10" also matches "test1", "test11", etc.)
|
// "test1", "test11", "test19", "test30" (edit distance 1), etc.
|
||||||
require.NotEmpty(t, ls)
|
require.Len(t, ls, 6)
|
||||||
projectIDs := make([]int64, len(ls))
|
projectIDs := make([]int64, len(ls))
|
||||||
for i, p := range ls {
|
for i, p := range ls {
|
||||||
projectIDs[i] = p.ID
|
projectIDs[i] = p.ID
|
||||||
|
|||||||
@@ -1783,8 +1783,8 @@ func TestTaskCollection_ReadAll(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if db.ParadeDBAvailable() {
|
if db.ParadeDBAvailable() {
|
||||||
// ParadeDB fuzzy prefix matching returns more results than ILIKE,
|
// ParadeDB fuzzy(1, prefix=true) on "17" also matches tokens within
|
||||||
// so we only check that expected tasks are contained in results.
|
// edit distance 1 ("1", "7", "10"-"19", "27", "47"), returning more results.
|
||||||
t.Run("search for task index", func(t *testing.T) {
|
t.Run("search for task index", func(t *testing.T) {
|
||||||
db.LoadAndAssertFixtures(t)
|
db.LoadAndAssertFixtures(t)
|
||||||
s := db.NewSession()
|
s := db.NewSession()
|
||||||
@@ -1794,6 +1794,7 @@ func TestTaskCollection_ReadAll(t *testing.T) {
|
|||||||
got, _, _, err := lt.ReadAll(s, &user.User{ID: 1}, "number #17", 0, 50)
|
got, _, _, err := lt.ReadAll(s, &user.User{ID: 1}, "number #17", 0, 50)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
gotTasks := got.([]*Task)
|
gotTasks := got.([]*Task)
|
||||||
|
require.Len(t, gotTasks, 14)
|
||||||
gotIDs := make([]int64, len(gotTasks))
|
gotIDs := make([]int64, len(gotTasks))
|
||||||
for i, tsk := range gotTasks {
|
for i, tsk := range gotTasks {
|
||||||
gotIDs[i] = tsk.ID
|
gotIDs[i] = tsk.ID
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package webtests
|
package webtests
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@@ -51,9 +52,16 @@ func TestProject(t *testing.T) {
|
|||||||
rec, err := testHandler.testReadAllWithUser(url.Values{"s": []string{"Test1"}}, nil)
|
rec, err := testHandler.testReadAllWithUser(url.Values{"s": []string{"Test1"}}, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Contains(t, rec.Body.String(), `Test1`)
|
assert.Contains(t, rec.Body.String(), `Test1`)
|
||||||
if !db.ParadeDBAvailable() {
|
|
||||||
// ParadeDB fuzzy(1, prefix=true) matches Test2, Test3, etc.
|
var projects []models.Project
|
||||||
// (edit distance 1 from "Test1"), so only check exclusions without ParadeDB.
|
require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &projects))
|
||||||
|
|
||||||
|
if db.ParadeDBAvailable() {
|
||||||
|
// ParadeDB fuzzy(1, prefix=true) on "Test1" also matches
|
||||||
|
// Test2-Test9 (edit distance 1), Test10+ (prefix), etc.
|
||||||
|
require.Len(t, projects, 12)
|
||||||
|
} else {
|
||||||
|
require.Len(t, projects, 2)
|
||||||
assert.NotContains(t, rec.Body.String(), `Test2`)
|
assert.NotContains(t, rec.Body.String(), `Test2`)
|
||||||
assert.NotContains(t, rec.Body.String(), `Test3`)
|
assert.NotContains(t, rec.Body.String(), `Test3`)
|
||||||
assert.NotContains(t, rec.Body.String(), `Test4`)
|
assert.NotContains(t, rec.Body.String(), `Test4`)
|
||||||
|
|||||||
Reference in New Issue
Block a user