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

     1  // Copyright 2019 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package issues
     5  
     6  import (
     7  	"context"
     8  	"path"
     9  	"path/filepath"
    10  	"testing"
    11  	"time"
    12  
    13  	"code.gitea.io/gitea/models/unittest"
    14  	"code.gitea.io/gitea/modules/setting"
    15  
    16  	_ "code.gitea.io/gitea/models"
    17  
    18  	"github.com/stretchr/testify/assert"
    19  	"gopkg.in/ini.v1"
    20  )
    21  
    22  func TestMain(m *testing.M) {
    23  	unittest.MainTest(m, &unittest.TestOptions{
    24  		GiteaRootPath: filepath.Join("..", "..", ".."),
    25  	})
    26  }
    27  
    28  func TestBleveSearchIssues(t *testing.T) {
    29  	assert.NoError(t, unittest.PrepareTestDatabase())
    30  	setting.CfgProvider = ini.Empty()
    31  
    32  	tmpIndexerDir := t.TempDir()
    33  
    34  	setting.CfgProvider.Section("queue.issue_indexer").Key("DATADIR").MustString(path.Join(tmpIndexerDir, "issues.queue"))
    35  
    36  	oldIssuePath := setting.Indexer.IssuePath
    37  	setting.Indexer.IssuePath = path.Join(tmpIndexerDir, "issues.queue")
    38  	defer func() {
    39  		setting.Indexer.IssuePath = oldIssuePath
    40  	}()
    41  
    42  	setting.Indexer.IssueType = "bleve"
    43  	setting.LoadQueueSettings()
    44  	InitIssueIndexer(true)
    45  	defer func() {
    46  		indexer := holder.get()
    47  		if bleveIndexer, ok := indexer.(*BleveIndexer); ok {
    48  			bleveIndexer.Close()
    49  		}
    50  	}()
    51  
    52  	time.Sleep(5 * time.Second)
    53  
    54  	ids, err := SearchIssuesByKeyword(context.TODO(), []int64{1}, "issue2")
    55  	assert.NoError(t, err)
    56  	assert.EqualValues(t, []int64{2}, ids)
    57  
    58  	ids, err = SearchIssuesByKeyword(context.TODO(), []int64{1}, "first")
    59  	assert.NoError(t, err)
    60  	assert.EqualValues(t, []int64{1}, ids)
    61  
    62  	ids, err = SearchIssuesByKeyword(context.TODO(), []int64{1}, "for")
    63  	assert.NoError(t, err)
    64  	assert.ElementsMatch(t, []int64{1, 2, 3, 5, 11}, ids)
    65  
    66  	ids, err = SearchIssuesByKeyword(context.TODO(), []int64{1}, "good")
    67  	assert.NoError(t, err)
    68  	assert.EqualValues(t, []int64{1}, ids)
    69  }
    70  
    71  func TestDBSearchIssues(t *testing.T) {
    72  	assert.NoError(t, unittest.PrepareTestDatabase())
    73  
    74  	setting.Indexer.IssueType = "db"
    75  	InitIssueIndexer(true)
    76  
    77  	ids, err := SearchIssuesByKeyword(context.TODO(), []int64{1}, "issue2")
    78  	assert.NoError(t, err)
    79  	assert.EqualValues(t, []int64{2}, ids)
    80  
    81  	ids, err = SearchIssuesByKeyword(context.TODO(), []int64{1}, "first")
    82  	assert.NoError(t, err)
    83  	assert.EqualValues(t, []int64{1}, ids)
    84  
    85  	ids, err = SearchIssuesByKeyword(context.TODO(), []int64{1}, "for")
    86  	assert.NoError(t, err)
    87  	assert.ElementsMatch(t, []int64{1, 2, 3, 5, 11}, ids)
    88  
    89  	ids, err = SearchIssuesByKeyword(context.TODO(), []int64{1}, "good")
    90  	assert.NoError(t, err)
    91  	assert.EqualValues(t, []int64{1}, ids)
    92  }