Tests: Add unit tests for search

This commit is contained in:
theresa 2022-03-30 18:21:43 +02:00
parent 32c9186112
commit 07abdd1054
3 changed files with 1038 additions and 5 deletions

View file

@ -410,7 +410,7 @@ func TestParseQueryString(t *testing.T) {
assert.True(t, form.Merged)
})
t.Run("query for lat with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "lat:cat"}
form := &SearchPhotos{Query: "lat:&cat"}
err := form.ParseQueryString()
@ -420,10 +420,23 @@ func TestParseQueryString(t *testing.T) {
// log.Debugf("%+v\n", form)
assert.Equal(t, "strconv.ParseFloat: parsing \"cat\": invalid syntax", err.Error())
assert.Contains(t, err.Error(), "invalid syntax")
})
t.Run("query for lng with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "lng:^>cat"}
err := form.ParseQueryString()
if err == nil {
t.Fatal(err)
}
// log.Debugf("%+v\n", form)
assert.Contains(t, err.Error(), "invalid syntax")
})
t.Run("query for dist with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "dist:cat"}
form := &SearchPhotos{Query: "dist:c@t"}
err := form.ParseQueryString()
@ -433,7 +446,98 @@ func TestParseQueryString(t *testing.T) {
// log.Debugf("%+v\n", form)
assert.Equal(t, "strconv.Atoi: parsing \"cat\": invalid syntax", err.Error())
assert.Contains(t, err.Error(), "invalid syntax")
})
t.Run("query for fmin with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "fmin:=}cat{"}
err := form.ParseQueryString()
if err == nil {
t.Fatal(err)
}
// log.Debugf("%+v\n", form)
assert.Contains(t, err.Error(), "invalid syntax")
})
t.Run("query for fmax with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "fmax:ca#$t"}
err := form.ParseQueryString()
if err == nil {
t.Fatal(err)
}
// log.Debugf("%+v\n", form)
assert.Contains(t, err.Error(), "invalid syntax")
})
t.Run("query for chroma with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "chroma:&|cat"}
err := form.ParseQueryString()
if err == nil {
t.Fatal(err)
}
// log.Debugf("%+v\n", form)
assert.Contains(t, err.Error(), "invalid syntax")
})
t.Run("query for diff with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "diff:&cat;%"}
err := form.ParseQueryString()
if err == nil {
t.Fatal(err)
}
// log.Debugf("%+v\n", form)
assert.Contains(t, err.Error(), "invalid syntax")
})
t.Run("query for quality with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "quality:`cat"}
err := form.ParseQueryString()
if err == nil {
t.Fatal(err)
}
// log.Debugf("%+v\n", form)
assert.Contains(t, err.Error(), "invalid syntax")
})
t.Run("query for count with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "count:ca(%t"}
err := form.ParseQueryString()
if err == nil {
t.Fatal(err)
}
// log.Debugf("%+v\n", form)
assert.Contains(t, err.Error(), "invalid syntax")
})
t.Run("query for offset with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "offset:&cat"}
err := form.ParseQueryString()
if err == nil {
t.Fatal(err)
}
// log.Debugf("%+v\n", form)
assert.Contains(t, err.Error(), "invalid syntax")
})
t.Run("CameraString", func(t *testing.T) {
form := &SearchPhotos{Query: "camera:cat"}
@ -468,6 +572,19 @@ func TestParseQueryString(t *testing.T) {
// log.Debugf("%+v\n", form)
assert.Equal(t, "Could not find format for \"cat\"", err.Error())
})
t.Run("query for after with invalid type", func(t *testing.T) {
form := &SearchPhotos{Query: "after:cat"}
err := form.ParseQueryString()
if err == nil {
t.Fatal(err)
}
// log.Debugf("%+v\n", form)
assert.Equal(t, "Could not find format for \"cat\"", err.Error())
})
}

View file

@ -0,0 +1,916 @@
package search
import (
"github.com/photoprism/photoprism/internal/form"
"github.com/stretchr/testify/assert"
"testing"
)
func TestPhotosFilterName(t *testing.T) {
t.Run("StartsWithPercent", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo29%"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterPercent", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo%30"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithPercent", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo29%"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithAmpersand", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "&photo31"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterAmpersand", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo&32"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithAmpersand", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo33&"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithSingleQuote", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "'photo34"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterSingleQuote", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo'35"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithSingleQuote", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo36'"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithAsterisk", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "*photo37"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterAsterisk", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo*38"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithAsterisk", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo39*"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithPipeWildcard", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "|*photo40"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterPipeWildcard", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo|*41"
f.Merged = true
photos, count, err := Photos(f)
if err != nil {
t.Fatal(err)
}
if len(photos) != 1 {
t.Logf("excactly one result expected, but %d photos with %d files found", len(photos), count)
t.Logf("query results: %#v", photos)
}
assert.Equal(t, 1, len(photos))
})
t.Run("EndsWithPipeWildcard", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo42*|"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithPipe", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "|photo40"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 0)
})
t.Run("CenterPipe", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo|41"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, 0, len(photos))
})
t.Run("EndsWithPipe", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo42|"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 0)
})
t.Run("StartsWithNumber", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "43photo"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterNumber", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "pho44to"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithNumber", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo45"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithDoubleQuotes", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "\"photo46"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterDoubleQuotes", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo\"47"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithDoubleQuotes", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo48\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithWhitespace", func(t *testing.T) {
var f form.SearchPhotos
f.Name = " photo49"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterWhitespace", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo 50"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithWhitespace", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "photo51 "
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
/*t.Run("AndSearch", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "Route 66 & Father's Day"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("OrSearch", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "Route 66 | Father's Day"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Greater(t, len(photos), 1)
})
t.Run("AndSearch2", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "Red|Green & Father's Day"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("OrSearch2", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "Red|Green | Father's Day"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Greater(t, len(photos), 1)
})
t.Run("AndSearch3", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "Light& & Red|Green"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("OrSearch3", func(t *testing.T) {
var f form.SearchPhotos
f.Name = "Red|Green | Light&"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Greater(t, len(photos), 1)
})*/
}
func TestPhotosQueryName(t *testing.T) {
t.Run("StartsWithPercent", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"%photo28\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterPercent", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo%30\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithPercent", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo29%\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithAmpersand", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"&photo31\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterAmpersand", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo&32\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithAmpersand", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo33&\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithSingleQuote", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"'photo34\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterSingleQuote", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo'35\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithSingleQuote", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo36'\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithAsterisk", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"*photo37\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterAsterisk", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo*38\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithAsterisk", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo39*\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithPipeWildcard", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"|*photo40\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterPipeWildcard", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo|*41\""
f.Merged = true
photos, count, err := Photos(f)
if err != nil {
t.Fatal(err)
}
if len(photos) != 1 {
t.Logf("excactly one result expected, but %d photos with %d files found", len(photos), count)
t.Logf("query results: %#v", photos)
}
assert.Equal(t, 1, len(photos))
})
t.Run("EndsWithPipeWildcard", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo42*|\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithPipe", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"|photo40\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 0)
})
t.Run("CenterPipe", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo|41\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, 0, len(photos))
})
t.Run("EndsWithPipe", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo42|\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 0)
})
t.Run("StartsWithNumber", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"43photo\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterNumber", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"pho44to\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithNumber", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo45\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("StartsWithDoubleQuotes", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"\"photo46\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
// TODO Finds all?
assert.Greater(t, len(photos), 1)
})
t.Run("CenterDoubleQuotes", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo\"47\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
// TODO Finds all?
assert.Greater(t, len(photos), 1)
})
t.Run("EndsWithDoubleQuotes", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo48\"\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
// TODO Finds all?
assert.Greater(t, len(photos), 1)
})
t.Run("StartsWithWhitespace", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\" photo49\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("CenterWhitespace", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo 50\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("EndsWithWhitespace", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"photo51 \""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
/*t.Run("AndSearch", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"Route 66 & Father's Day\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("OrSearch", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"Route 66 | Father's Day\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Greater(t, len(photos), 1)
})
t.Run("AndSearch2", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"Red|Green & Father's Day\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("OrSearch2", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"Red|Green | Father's Day\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Greater(t, len(photos), 1)
})
t.Run("AndSearch3", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"Light& & Red|Green\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("OrSearch3", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "name:\"Red|Green | Light&\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Greater(t, len(photos), 1)
})*/
}

View file

@ -18,7 +18,7 @@ func TestPhotosQueryPrimary(t *testing.T) {
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos0), 22)
assert.GreaterOrEqual(t, len(photos0), 46)
t.Run("StartsWithPercent", func(t *testing.T) {
var f form.SearchPhotos