mirror of
https://github.com/wgh136/nysoure.git
synced 2025-09-27 04:17:23 +00:00
Add unit test for searching
This commit is contained in:
@@ -70,3 +70,11 @@ func GetDB() *gorm.DB {
|
||||
func IsReady() bool {
|
||||
return ready
|
||||
}
|
||||
|
||||
func Close() error {
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return sqlDB.Close()
|
||||
}
|
||||
|
@@ -104,8 +104,6 @@ func TestTag(t *testing.T) {
|
||||
assert.Nil(t, tag6.AliasOf)
|
||||
|
||||
// cleanup
|
||||
d, err := db.DB()
|
||||
assert.Nil(t, err)
|
||||
_ = d.Close()
|
||||
_ = Close()
|
||||
_ = os.Remove("test.db")
|
||||
}
|
||||
|
165
server/search/search_test.go
Normal file
165
server/search/search_test.go
Normal file
@@ -0,0 +1,165 @@
|
||||
package search
|
||||
|
||||
import (
|
||||
"nysoure/server/dao"
|
||||
"nysoure/server/model"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/blevesearch/bleve"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func Init() {
|
||||
err := index.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
_ = os.RemoveAll("search_test.bleve")
|
||||
mapper := bleve.NewIndexMapping()
|
||||
index, err = bleve.New("search_test.bleve", mapper)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TearDown() {
|
||||
err := index.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
dao.Close()
|
||||
os.RemoveAll("search_test.bleve")
|
||||
os.Remove("test.db")
|
||||
}
|
||||
|
||||
func TestSearchResource(t *testing.T) {
|
||||
Init()
|
||||
defer TearDown()
|
||||
|
||||
resources := []model.Resource{
|
||||
// normal cases
|
||||
{Model: gorm.Model{ID: 1}, Title: "The Great Adventure", AlternativeTitles: []string{"Adventure Time", "The Big Adventure"}},
|
||||
{Model: gorm.Model{ID: 2}, Title: "Mystery of the Lost City", AlternativeTitles: []string{"Lost City Chronicles"}},
|
||||
{Model: gorm.Model{ID: 3}, Title: "Romance in Paris", AlternativeTitles: []string{"Love in Paris", "Parisian Romance"}},
|
||||
{Model: gorm.Model{ID: 4}, Title: "Sci-Fi Extravaganza", AlternativeTitles: []string{"Future World", "Sci-Fi Saga"}},
|
||||
{Model: gorm.Model{ID: 5}, Title: "Comedy Nights", AlternativeTitles: []string{"Laugh Out Loud", "Comedy Central"}},
|
||||
// With special characters
|
||||
{Model: gorm.Model{ID: 6}, Title: "Action & Adventure", AlternativeTitles: []string{"Action-Packed", "Adventure Time!"}},
|
||||
{Model: gorm.Model{ID: 7}, Title: "Horror: The Awakening", AlternativeTitles: []string{"Scary Movie", "Horror Nights"}},
|
||||
{Model: gorm.Model{ID: 8}, Title: "Drama @ Home", AlternativeTitles: []string{"Home Stories", "Dramatic Tales"}},
|
||||
{Model: gorm.Model{ID: 9}, Title: "Fantasy #1", AlternativeTitles: []string{"Fantasy World", "Magical Tales"}},
|
||||
{Model: gorm.Model{ID: 10}, Title: "Thriller ~Uncut~"},
|
||||
{Model: gorm.Model{ID: 11}, Title: "Epic ~ Saga ~"},
|
||||
{Model: gorm.Model{ID: 12}, Title: "Journey - Dawn -", AlternativeTitles: []string{"Dawn Adventures", "Journey Chronicles"}},
|
||||
{Model: gorm.Model{ID: 13}, Title: "Legends -Rise-", AlternativeTitles: []string{"Rise of Legends", "Legendary Tales"}},
|
||||
{Model: gorm.Model{ID: 14}, Title: "Chronicles: Time", AlternativeTitles: []string{"Time Chronicles", "Chronicles of Ages"}},
|
||||
}
|
||||
|
||||
// Add resources to index
|
||||
for _, r := range resources {
|
||||
err := AddResourceToIndex(r)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to add resource ID %d to index: %v", r.ID, err)
|
||||
}
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
query string
|
||||
expectedIDs []uint
|
||||
unexpectedID uint
|
||||
}{
|
||||
// Basic searches
|
||||
{query: "Adventure", expectedIDs: []uint{1, 6}},
|
||||
{query: "Mystery", expectedIDs: []uint{2}},
|
||||
{query: "Romance", expectedIDs: []uint{3}},
|
||||
{query: "Sci-Fi", expectedIDs: []uint{4}},
|
||||
{query: "Comedy", expectedIDs: []uint{5}},
|
||||
// Exact matches
|
||||
{query: "The Great Adventure", expectedIDs: []uint{1}},
|
||||
{query: "Mystery of the Lost City", expectedIDs: []uint{2}},
|
||||
{query: "Romance in Paris", expectedIDs: []uint{3}},
|
||||
{query: "Sci-Fi Extravaganza", expectedIDs: []uint{4}},
|
||||
{query: "Comedy Nights", expectedIDs: []uint{5}},
|
||||
{query: "Action & Adventure", expectedIDs: []uint{6}},
|
||||
{query: "Horror: The Awakening", expectedIDs: []uint{7}},
|
||||
{query: "Drama @ Home", expectedIDs: []uint{8}},
|
||||
{query: "Fantasy #1", expectedIDs: []uint{9}},
|
||||
{query: "Thriller ~Uncut~", expectedIDs: []uint{10}},
|
||||
{query: "Epic ~ Saga ~", expectedIDs: []uint{11}},
|
||||
{query: "Journey - Dawn -", expectedIDs: []uint{12}},
|
||||
{query: "Legends -Rise-", expectedIDs: []uint{13}},
|
||||
{query: "Chronicles: Time", expectedIDs: []uint{14}},
|
||||
// Searches with special characters
|
||||
{query: "Action & Adventure", expectedIDs: []uint{6}},
|
||||
{query: "Horror: The Awakening", expectedIDs: []uint{7}},
|
||||
{query: "Drama @ Home", expectedIDs: []uint{8}},
|
||||
{query: "Fantasy #1", expectedIDs: []uint{9}},
|
||||
{query: "Thriller ~Uncut~", expectedIDs: []uint{10}},
|
||||
{query: "Epic ~ Saga ~", expectedIDs: []uint{11}},
|
||||
{query: "Journey - Dawn -", expectedIDs: []uint{12}},
|
||||
{query: "Legends -Rise-", expectedIDs: []uint{13}},
|
||||
{query: "Chronicles: Time", expectedIDs: []uint{14}},
|
||||
// Case insensitivity
|
||||
{query: "adventure", expectedIDs: []uint{1, 6}},
|
||||
{query: "MYSTERY", expectedIDs: []uint{2}},
|
||||
{query: "rOmAnCe", expectedIDs: []uint{3}},
|
||||
// Searches using alternative titles
|
||||
{query: "Adventure Time", expectedIDs: []uint{1, 6}},
|
||||
{query: "Lost City Chronicles", expectedIDs: []uint{2}},
|
||||
{query: "Love in Paris", expectedIDs: []uint{3}},
|
||||
{query: "Future World", expectedIDs: []uint{4}},
|
||||
{query: "Laugh Out Loud", expectedIDs: []uint{5}},
|
||||
// Searches with special characters in alternative titles
|
||||
{query: "Action-Packed", expectedIDs: []uint{6}},
|
||||
{query: "Scary Movie", expectedIDs: []uint{7}},
|
||||
{query: "Home Stories", expectedIDs: []uint{8}},
|
||||
{query: "Fantasy World", expectedIDs: []uint{9}},
|
||||
{query: "Epic Tales", expectedIDs: []uint{11}},
|
||||
{query: "Dawn Adventures", expectedIDs: []uint{12}},
|
||||
{query: "Rise of Legends", expectedIDs: []uint{13}},
|
||||
{query: "Time Chronicles", expectedIDs: []uint{14}},
|
||||
// Searches with special characters in queries
|
||||
{query: "Horror:", expectedIDs: []uint{7}},
|
||||
{query: "@ Home", expectedIDs: []uint{8}},
|
||||
{query: "#1", expectedIDs: []uint{9}},
|
||||
{query: "~Uncut~", expectedIDs: []uint{10}},
|
||||
{query: "Uncut", expectedIDs: []uint{10}},
|
||||
{query: "~ Saga ~", expectedIDs: []uint{11}},
|
||||
{query: "Saga", expectedIDs: []uint{11}},
|
||||
{query: "- Dawn -", expectedIDs: []uint{12}},
|
||||
{query: "-Rise-", expectedIDs: []uint{13}},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.query, func(t *testing.T) {
|
||||
resultIDs, err := SearchResource(test.query)
|
||||
if err != nil {
|
||||
t.Fatalf("Search failed for query '%s': %v", test.query, err)
|
||||
}
|
||||
|
||||
// Check for expected IDs
|
||||
for _, expectedID := range test.expectedIDs {
|
||||
found := false
|
||||
for _, resultID := range resultIDs {
|
||||
if resultID == expectedID {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
t.Errorf("Expected ID %d not found in results for query '%s'", expectedID, test.query)
|
||||
}
|
||||
}
|
||||
|
||||
// Check for unexpected ID
|
||||
if test.unexpectedID != 0 {
|
||||
for _, resultID := range resultIDs {
|
||||
if resultID == test.unexpectedID {
|
||||
t.Errorf("Unexpected ID %d found in results for query '%s'", test.unexpectedID, test.query)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user