From 1f317230956f2c215a4c2f2316a04e83bd85cd44 Mon Sep 17 00:00:00 2001 From: theresa Date: Wed, 20 Apr 2022 14:49:18 +0200 Subject: [PATCH] Tests: Add unit tests for search --- internal/form/search_photos_test.go | 44 +++ .../search/photos_filter_animated_test.go | 311 ++++++++++++++++++ internal/search/photos_filter_type_test.go | 26 ++ internal/search/photos_filter_vector_test.go | 311 ++++++++++++++++++ 4 files changed, 692 insertions(+) create mode 100644 internal/search/photos_filter_animated_test.go create mode 100644 internal/search/photos_filter_vector_test.go diff --git a/internal/form/search_photos_test.go b/internal/form/search_photos_test.go index 56473e0fe..3c25e5ffe 100644 --- a/internal/form/search_photos_test.go +++ b/internal/form/search_photos_test.go @@ -450,6 +450,50 @@ func TestParseQueryString(t *testing.T) { assert.True(t, form.Merged) }) + t.Run("query for landscape with uncommon bool value", func(t *testing.T) { + form := &SearchPhotos{Query: "landscape:test$5123"} + + err := form.ParseQueryString() + + if err != nil { + t.Fatal(err) + } + + assert.True(t, form.Landscape) + }) + t.Run("query for square with uncommon bool value", func(t *testing.T) { + form := &SearchPhotos{Query: "square:%abc"} + + err := form.ParseQueryString() + + if err != nil { + t.Fatal(err) + } + + assert.True(t, form.Square) + }) + t.Run("query for animated with uncommon bool value", func(t *testing.T) { + form := &SearchPhotos{Query: "animated:%abc"} + + err := form.ParseQueryString() + + if err != nil { + t.Fatal(err) + } + + assert.True(t, form.Animated) + }) + t.Run("query for vector with uncommon bool value", func(t *testing.T) { + form := &SearchPhotos{Query: "vector:%abc"} + + err := form.ParseQueryString() + + if err != nil { + t.Fatal(err) + } + + assert.True(t, form.Vector) + }) t.Run("query for lat with invalid type", func(t *testing.T) { form := &SearchPhotos{Query: "lat:&cat"} diff --git a/internal/search/photos_filter_animated_test.go b/internal/search/photos_filter_animated_test.go new file mode 100644 index 000000000..b231fa014 --- /dev/null +++ b/internal/search/photos_filter_animated_test.go @@ -0,0 +1,311 @@ +package search + +import ( + "testing" + + "github.com/photoprism/photoprism/internal/form" + "github.com/stretchr/testify/assert" +) + +func TestPhotosQueryAnimated(t *testing.T) { + var f0 form.SearchPhotos + + f0.Query = "animated:true" + f0.Merged = true + + photos0, _, err := Photos(f0) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos0), 1) + + t.Run("animated:yes", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:yes" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithPercent", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"%gold\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterPercent", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"I love % dog\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithPercent", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"sale%\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithAmpersand", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"&IlikeFood\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterAmpersand", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Pets & Dogs\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithAmpersand", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Light&\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithSingleQuote", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"'Family\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterSingleQuote", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Mother's Day\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithSingleQuote", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Ice Cream'\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithAsterisk", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"*Forrest\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterAsterisk", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"My*Kids\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithAsterisk", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Yoga***\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithPipe", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"|Banana\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterPipe", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Red|Green\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithPipe", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Blue|\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithNumber", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"345 Shirt\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterNumber", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Color555 Blue\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithNumber", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Route 66\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("AndSearch", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Route 66 & Father's Day\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("OrSearch", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "animated:\"Route %66 | *Father's Day\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) +} diff --git a/internal/search/photos_filter_type_test.go b/internal/search/photos_filter_type_test.go index 2e06b9d22..b536cc885 100644 --- a/internal/search/photos_filter_type_test.go +++ b/internal/search/photos_filter_type_test.go @@ -35,6 +35,19 @@ func TestPhotosFilterType(t *testing.T) { } assert.Equal(t, len(photos), 1) }) + t.Run("animated", func(t *testing.T) { + var f form.SearchPhotos + + f.Type = "animated" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), 1) + }) t.Run("raw pipe video", func(t *testing.T) { var f form.SearchPhotos @@ -353,6 +366,19 @@ func TestPhotosQueryType(t *testing.T) { } assert.Equal(t, len(photos), 1) }) + t.Run("animated", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "type:\"animated\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), 1) + }) t.Run("raw pipe video", func(t *testing.T) { var f form.SearchPhotos diff --git a/internal/search/photos_filter_vector_test.go b/internal/search/photos_filter_vector_test.go new file mode 100644 index 000000000..422d5f6a9 --- /dev/null +++ b/internal/search/photos_filter_vector_test.go @@ -0,0 +1,311 @@ +package search + +import ( + "testing" + + "github.com/photoprism/photoprism/internal/form" + "github.com/stretchr/testify/assert" +) + +func TestPhotosQueryVector(t *testing.T) { + var f0 form.SearchPhotos + + f0.Query = "vector:true" + f0.Merged = true + + photos0, _, err := Photos(f0) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos0), 0) + + t.Run("animated:yes", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:yes" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithPercent", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"%gold\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterPercent", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"I love % dog\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithPercent", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"sale%\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithAmpersand", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"&IlikeFood\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterAmpersand", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Pets & Dogs\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithAmpersand", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Light&\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithSingleQuote", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"'Family\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterSingleQuote", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Mother's Day\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithSingleQuote", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Ice Cream'\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithAsterisk", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"*Forrest\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterAsterisk", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"My*Kids\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithAsterisk", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Yoga***\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithPipe", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"|Banana\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterPipe", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Red|Green\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithPipe", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Blue|\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("StartsWithNumber", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"345 Shirt\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("CenterNumber", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Color555 Blue\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("EndsWithNumber", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Route 66\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("AndSearch", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Route 66 & Father's Day\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) + t.Run("OrSearch", func(t *testing.T) { + var f form.SearchPhotos + + f.Query = "vector:\"Route %66 | *Father's Day\"" + f.Merged = true + + photos, _, err := Photos(f) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, len(photos), len(photos0)) + }) +}