Skip to content

Commit

Permalink
add unit tests for v1 search
Browse files Browse the repository at this point in the history
  • Loading branch information
hengfeiyang committed May 30, 2022
1 parent c33ccff commit aec5239
Show file tree
Hide file tree
Showing 2 changed files with 374 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pkg/core/search/v1/aggregation.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func AddAggregations(req zincaggregation.SearchAggregation, aggs map[string]Aggr
}
var subreq *aggregations.DateRangeAggregation
switch mapping.Properties[agg.Field].Type {
case "time":
case "time", "date":
subreq = aggregations.DateRanges(search.Field(agg.Field))
// time format: 2022-01-21T09:22:50.604Z
for _, v := range agg.DateRanges {
Expand Down
373 changes: 373 additions & 0 deletions pkg/core/search/v1/search_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,376 @@
*/

package v1

import (
"math/rand"
"strconv"
"testing"
"time"

"github.com/stretchr/testify/assert"

"github.com/zinclabs/zinc/pkg/core"
"github.com/zinclabs/zinc/pkg/meta"
)

func TestSearch(t *testing.T) {
type args struct {
iQuery *ZincQuery
}
tests := []struct {
name string
args args
data []map[string]interface{}
want *SearchResponse
wantErr bool
}{
{
name: "Search Query - Match",
args: args{
iQuery: &ZincQuery{
SearchType: "match",
Query: QueryParams{
Term: "Prabhat",
},
Source: false,
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - Term",
args: args{
iQuery: &ZincQuery{
SearchType: "term",
Query: QueryParams{
Term: "angeles",
},
Source: true,
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
{
"name": "Leonardo DiCaprio",
"address": map[string]interface{}{
"city": "Los angeles",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - MatchAll",
args: args{
iQuery: &ZincQuery{
SearchType: "matchall",
Source: []interface{}{"city"},
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - alldocuments",
args: args{
iQuery: &ZincQuery{
SearchType: "alldocuments",
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - matchphrase",
args: args{
iQuery: &ZincQuery{
SearchType: "matchphrase",
Query: QueryParams{
Term: "San Francisco",
},
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - multiphrase",
args: args{
iQuery: &ZincQuery{
SearchType: "multiphrase",
Query: QueryParams{
Terms: [][]string{{"San Francisco"}},
},
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - prefix",
args: args{
iQuery: &ZincQuery{
SearchType: "prefix",
Query: QueryParams{
Term: "sa",
},
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco California Francisco",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - wildcard",
args: args{
iQuery: &ZincQuery{
SearchType: "wildcard",
Query: QueryParams{
Term: "san*",
},
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - fuzzy",
args: args{
iQuery: &ZincQuery{
SearchType: "fuzzy",
Query: QueryParams{
Term: "fransisco", // note the wrong spelling
},
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
{
"name": "Leonardo DiCaprio",
"address": map[string]interface{}{
"city": "Los angeles",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - querystring",
args: args{
iQuery: &ZincQuery{
SearchType: "querystring",
Query: QueryParams{
Term: "angeles",
},
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
{
"name": "Leonardo DiCaprio",
"address": map[string]interface{}{
"city": "Los angeles",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - data range",
args: args{
iQuery: &ZincQuery{
SearchType: "daterange",
Query: QueryParams{
StartTime: time.Now().UTC().Add(time.Hour * -24),
EndTime: time.Now().UTC().Add(time.Hour),
},
MaxResults: 10,
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
{
"name": "Leonardo DiCaprio",
"address": map[string]interface{}{
"city": "Los angeles",
"state": "California",
},
"hobby": "chess",
},
},
},
{
name: "Search Query - aggs",
args: args{
iQuery: &ZincQuery{
SearchType: "matchall",
MaxResults: 0,
Aggregations: map[string]AggregationParams{
"hobby": {
AggType: "terms",
Field: "hobby",
},
"time": {
AggType: "date_range",
Field: "@timestamp",
DateRanges: []AggregationDateRange{{
From: time.Now().UTC(),
To: time.Now().UTC().Add(time.Hour),
}},
},
},
},
},
data: []map[string]interface{}{
{
"name": "Prabhat Sharma",
"address": map[string]interface{}{
"city": "San Francisco",
"state": "California",
},
"hobby": "chess",
},
{
"name": "Leonardo DiCaprio",
"address": map[string]interface{}{
"city": "Los angeles",
"state": "California",
},
"hobby": "chess",
},
},
},
}

indexName := "Search.index_1"
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
index, err := core.NewIndex(indexName, "disk", nil)
assert.NoError(t, err)
assert.NotNil(t, index)
err = core.StoreIndex(index)
assert.NoError(t, err)

if (index.Mappings) == nil {
index.Mappings = meta.NewMappings()
}
index.Mappings.SetProperty("address.city", meta.Property{
Type: "text",
Index: true,
Store: true,
Highlightable: true,
})

for _, d := range tt.data {
rand.Seed(time.Now().UnixNano())
docId := rand.Intn(1000)
err := index.UpdateDocument(strconv.Itoa(docId), d, true)
assert.NoError(t, err)
}
got, err := Search(index, tt.args.iQuery)
assert.NoError(t, err)
assert.GreaterOrEqual(t, got.Hits.Total.Value, 1)

err = core.DeleteIndex(indexName)
assert.NoError(t, err)
})
}
}

0 comments on commit aec5239

Please sign in to comment.