photoprism/internal/search/photos_filter_filename_test.go

999 lines
18 KiB
Go
Raw Permalink Normal View History

2022-03-31 16:56:32 +02:00
package search
import (
"testing"
"github.com/photoprism/photoprism/internal/form"
"github.com/stretchr/testify/assert"
)
func TestPhotosFilterFilename(t *testing.T) {
2022-04-02 16:53:00 +02:00
t.Run("2790/07/27900704_070228_D6D51B6C.jpg", func(t *testing.T) {
var f form.SearchPhotos
f.Filename = "2790/07/27900704_070228_D6D51B6C.jpg"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("1990*", func(t *testing.T) {
var f form.SearchPhotos
f.Filename = "1990*"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 5)
})
t.Run("1990* pipe 2790/07/27900704_070228_D6D51B6C.jpg", func(t *testing.T) {
var f form.SearchPhotos
f.Filename = "1990*|2790/07/27900704_070228_D6D51B6C.jpg"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 6)
})
t.Run("1990* whitespace pipe whitespace 2790/07/27900704_070228_D6D51B6C.jpg", func(t *testing.T) {
2022-04-02 16:53:00 +02:00
var f form.SearchPhotos
f.Filename = "1990* | 2790/07/27900704_070228_D6D51B6C.jpg"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, 6, len(photos))
2022-04-02 16:53:00 +02:00
})
t.Run("1990* or 2790/07/27900704_070228_D6D51B6C.jpg", func(t *testing.T) {
var f form.SearchPhotos
// Db().LogMode(true)
2022-04-02 16:53:00 +02:00
f.Filename = "1990* or 2790/07/27900704_070228_D6D51B6C.jpg"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
2022-04-04 13:40:56 +02:00
assert.Equal(t, 0, len(photos))
})
2022-03-31 16:56:32 +02:00
t.Run("StartsWithPercent", func(t *testing.T) {
var f form.SearchPhotos
f.Filename = "*photo29%.jpg"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, 1, len(photos))
2022-03-31 16:56:32 +02:00
})
t.Run("CenterPercent", func(t *testing.T) {
var f form.SearchPhotos
f.Filename = "*photo%30.jpg"
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.Filename = "*photo29%.jpg"
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.Filename = "*&photo31.jpg"
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.Filename = "*photo&32.jpg"
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.Filename = "*photo33&.jpg"
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.Filename = "'2020/'vacation/'photo34.jpg"
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.Filename = "20'20/vacat'ion/photo'35.jpg"
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.Filename = "2020'/vacation'/photo36'.jpg"
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.Filename = "*2020/*vacation/*photo37.jpg"
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.Filename = "202*3/vac*ation/photo*38.jpg"
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.Filename = "2023*/vacatio*/photo39*.jpg"
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.Filename = "*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.Filename = "*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.Filename = "*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.Filename = "|202/|vacation/|photo40.jpg"
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.Filename = "20|22/vacat|ion/photo|41.jpg"
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.Filename = "2022|/vacation|/photo42|.jpg"
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.Filename = "2000/holiday/43photo.jpg"
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.Filename = "2000/02/pho44to.jpg"
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.Filename = "2000/02/photo45.jpg"
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.Filename = "\"2000/\"02/\"photo46.jpg"
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.Filename = "20\"00/0\"2/photo\"47.jpg"
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.Filename = "2000\"/02\"/photo48\".jpg"
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.Filename = " 2000/ 02/ photo49.jpg"
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.Filename = "20 00/ 0 2/photo 50.jpg"
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.Filename = "2000 /02 /photo51 .jpg"
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) {
2022-03-31 16:56:32 +02:00
var f form.SearchPhotos
f.Filename = "*%photo28.jpg | *photo'35.jpg"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 2)
})
t.Run("OrSearch2", func(t *testing.T) {
var f form.SearchPhotos
f.Filename = "*photo*38.jpg | *photo'35.jpg"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Greater(t, len(photos), 1)
})
t.Run("OrSearch3", func(t *testing.T) {
var f form.SearchPhotos
f.Filename = "*photo|41.jpg | *&photo31.jpg"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
2022-03-31 16:56:32 +02:00
})
t.Run("OrSearch4", func(t *testing.T) {
var f form.SearchPhotos
f.Filename = "London/bridge1.jpg | 1990/04/bridge2.jpg"
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 2)
})
2022-03-31 16:56:32 +02:00
}
func TestPhotosQueryFilename(t *testing.T) {
2022-04-02 16:53:00 +02:00
t.Run("2790/07/27900704_070228_D6D51B6C.jpg", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "filename:\"2790/07/27900704_070228_D6D51B6C.jpg\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 1)
})
t.Run("1990*", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "filename:\"1990*\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 5)
})
t.Run("1990* pipe 2790/07/27900704_070228_D6D51B6C.jpg", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "filename:\"1990*|2790/07/27900704_070228_D6D51B6C.jpg\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 6)
})
t.Run("1990* whitespace pipe whitespace 2790/07/27900704_070228_D6D51B6C.jpg", func(t *testing.T) {
2022-04-02 16:53:00 +02:00
var f form.SearchPhotos
f.Query = "filename:\"1990* | 2790/07/27900704_070228_D6D51B6C.jpg\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 6)
})
2022-03-31 16:56:32 +02:00
t.Run("StartsWithPercent", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "filename:\"*photo29%.jpg\""
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 = "filename:\"*photo%30.jpg\""
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 = "filename:\"*photo29%.jpg\""
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 = "filename:\"*&photo31.jpg\""
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 = "filename:\"*photo&32.jpg\""
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 = "filename:\"*photo33&.jpg\""
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 = "filename:\"'2020/'vacation/'photo34.jpg\""
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 = "filename:\"20'20/vacat'ion/photo'35.jpg\""
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 = "filename:\"2020'/vacation'/photo36'.jpg\""
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 = "filename:\"*2020/*vacation/*photo37.jpg\""
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 = "filename:\"202*3/vac*ation/photo*38.jpg\""
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 = "filename:\"2023*/vacatio*/photo39*.jpg\""
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 = "filename:\"*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 = "filename:\"*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 = "filename:\"*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 = "filename:\"|202/|vacation/|photo40.jpg\""
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 = "filename:\"20|22/vacat|ion/photo|41.jpg\""
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 = "filename:\"2022|/vacation|/photo42|.jpg\""
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 = "filename:\"2000/holiday/43photo.jpg\""
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 = "filename:\"2000/02/pho44to.jpg\""
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 = "filename:\"2000/02/photo45.jpg\""
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 = "filename:\"\"2000/\"02/\"photo46.jpg\""
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 = "filename:\"20\"00/0\"2/photo\"47.jpg\""
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 = "filename:\"2000\"/02\"/photo48\".jpg\""
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 = "filename:\" 2000/ 02/ photo49.jpg\""
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 = "filename:\"20 00/ 0 2/photo 50.jpg\""
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 = "filename:\"2000 /02 /photo51 .jpg\""
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) {
2022-03-31 16:56:32 +02:00
var f form.SearchPhotos
f.Query = "filename:\"*%photo28.jpg | *photo'35.jpg\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 2)
})
t.Run("OrSearch2", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "filename:\"*photo*38.jpg | *photo'35.jpg\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Greater(t, len(photos), 1)
})
t.Run("OrSearch3", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "filename:\"*photo|41.jpg | *&photo31.jpg\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
// TODO: Manual search also finds one result only.
assert.Equal(t, len(photos), 1)
2022-03-31 16:56:32 +02:00
})
t.Run("OrSearch4", func(t *testing.T) {
var f form.SearchPhotos
f.Query = "filename:\"London/bridge1.jpg | 1990/04/bridge2.jpg\""
f.Merged = true
photos, _, err := Photos(f)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, len(photos), 2)
})
2022-03-31 16:56:32 +02:00
}