code.gitea.io/gitea@v1.19.3/modules/indexer/issues/bleve_test.go (about)

     1  // Copyright 2018 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package issues
     5  
     6  import (
     7  	"context"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestBleveIndexAndSearch(t *testing.T) {
    14  	dir := t.TempDir()
    15  	indexer := NewBleveIndexer(dir)
    16  	defer indexer.Close()
    17  
    18  	if _, err := indexer.Init(); err != nil {
    19  		assert.Fail(t, "Unable to initialize bleve indexer: %v", err)
    20  		return
    21  	}
    22  
    23  	err := indexer.Index([]*IndexerData{
    24  		{
    25  			ID:      1,
    26  			RepoID:  2,
    27  			Title:   "Issue search should support Chinese",
    28  			Content: "As title",
    29  			Comments: []string{
    30  				"test1",
    31  				"test2",
    32  			},
    33  		},
    34  		{
    35  			ID:      2,
    36  			RepoID:  2,
    37  			Title:   "CJK support could be optional",
    38  			Content: "Chinese Korean and Japanese should be supported but I would like it's not enabled by default",
    39  			Comments: []string{
    40  				"LGTM",
    41  				"Good idea",
    42  			},
    43  		},
    44  	})
    45  	assert.NoError(t, err)
    46  
    47  	keywords := []struct {
    48  		Keyword string
    49  		IDs     []int64
    50  	}{
    51  		{
    52  			Keyword: "search",
    53  			IDs:     []int64{1},
    54  		},
    55  		{
    56  			Keyword: "test1",
    57  			IDs:     []int64{1},
    58  		},
    59  		{
    60  			Keyword: "test2",
    61  			IDs:     []int64{1},
    62  		},
    63  		{
    64  			Keyword: "support",
    65  			IDs:     []int64{1, 2},
    66  		},
    67  		{
    68  			Keyword: "chinese",
    69  			IDs:     []int64{1, 2},
    70  		},
    71  		{
    72  			Keyword: "help",
    73  			IDs:     []int64{},
    74  		},
    75  	}
    76  
    77  	for _, kw := range keywords {
    78  		res, err := indexer.Search(context.TODO(), kw.Keyword, []int64{2}, 10, 0)
    79  		assert.NoError(t, err)
    80  
    81  		ids := make([]int64, 0, len(res.Hits))
    82  		for _, hit := range res.Hits {
    83  			ids = append(ids, hit.ID)
    84  		}
    85  		assert.ElementsMatch(t, kw.IDs, ids)
    86  	}
    87  }