github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/store/searchtest/testlib.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package searchtest
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/mattermost/mattermost-server/v5/store"
    10  	"github.com/mattermost/mattermost-server/v5/utils"
    11  )
    12  
    13  const (
    14  	EngineAll           = "all"
    15  	EngineMySql         = "mysql"
    16  	EnginePostgres      = "postgres"
    17  	EngineElasticSearch = "elasticsearch"
    18  	EngineBleve         = "bleve"
    19  )
    20  
    21  type SearchTestEngine struct {
    22  	Driver     string
    23  	BeforeTest func(*testing.T, store.Store)
    24  	AfterTest  func(*testing.T, store.Store)
    25  }
    26  
    27  type searchTest struct {
    28  	Name        string
    29  	Fn          func(*testing.T, *SearchTestHelper)
    30  	Tags        []string
    31  	Skip        bool
    32  	SkipMessage string
    33  }
    34  
    35  func filterTestsByTag(tests []searchTest, tags ...string) []searchTest {
    36  	filteredTests := []searchTest{}
    37  	for _, test := range tests {
    38  		if utils.StringInSlice(EngineAll, test.Tags) {
    39  			filteredTests = append(filteredTests, test)
    40  			continue
    41  		}
    42  		for _, tag := range tags {
    43  			if utils.StringInSlice(tag, test.Tags) {
    44  				filteredTests = append(filteredTests, test)
    45  				break
    46  			}
    47  		}
    48  	}
    49  
    50  	return filteredTests
    51  }
    52  
    53  func runTestSearch(t *testing.T, testEngine *SearchTestEngine, tests []searchTest, th *SearchTestHelper) {
    54  	if testing.Short() {
    55  		t.Skip("Skipping advanced search test")
    56  		return
    57  	}
    58  
    59  	filteredTests := filterTestsByTag(tests, testEngine.Driver)
    60  
    61  	for _, test := range filteredTests {
    62  
    63  		if test.Skip {
    64  			t.Log("SKIPPED: " + test.Name + ". Reason: " + test.SkipMessage)
    65  			continue
    66  		}
    67  
    68  		if testEngine.BeforeTest != nil {
    69  			testEngine.BeforeTest(t, th.Store)
    70  		}
    71  		testName := test.Name
    72  		testFn := test.Fn
    73  		t.Run(testName, func(t *testing.T) { testFn(t, th) })
    74  		if testEngine.AfterTest != nil {
    75  			testEngine.AfterTest(t, th.Store)
    76  		}
    77  	}
    78  }