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

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package sqlstore
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestMapStringsToQueryParams(t *testing.T) {
    13  	t.Run("one item", func(t *testing.T) {
    14  		input := []string{"apple"}
    15  
    16  		keys, params := MapStringsToQueryParams(input, "Fruit")
    17  
    18  		require.Len(t, params, 1, "returned incorrect params", params)
    19  		require.Equal(t, "apple", params["Fruit0"], "returned incorrect params", params)
    20  		require.Equal(t, "(:Fruit0)", keys, "returned incorrect query", keys)
    21  	})
    22  
    23  	t.Run("multiple items", func(t *testing.T) {
    24  		input := []string{"carrot", "tomato", "potato"}
    25  
    26  		keys, params := MapStringsToQueryParams(input, "Vegetable")
    27  
    28  		require.Len(t, params, 3, "returned incorrect params", params)
    29  		require.Equal(t, "carrot", params["Vegetable0"], "returned incorrect params", params)
    30  		require.Equal(t, "tomato", params["Vegetable1"], "returned incorrect params", params)
    31  		require.Equal(t, "potato", params["Vegetable2"], "returned incorrect params", params)
    32  		require.Equal(t, "(:Vegetable0,:Vegetable1,:Vegetable2)", keys, "returned incorrect query", keys)
    33  	})
    34  }
    35  
    36  var keys string
    37  var params map[string]interface{}
    38  
    39  func BenchmarkMapStringsToQueryParams(b *testing.B) {
    40  	b.Run("one item", func(b *testing.B) {
    41  		input := []string{"apple"}
    42  		for i := 0; i < b.N; i++ {
    43  			keys, params = MapStringsToQueryParams(input, "Fruit")
    44  		}
    45  	})
    46  	b.Run("multiple items", func(b *testing.B) {
    47  		input := []string{"carrot", "tomato", "potato"}
    48  		for i := 0; i < b.N; i++ {
    49  			keys, params = MapStringsToQueryParams(input, "Vegetable")
    50  		}
    51  	})
    52  }
    53  
    54  func TestSanitizeSearchTerm(t *testing.T) {
    55  	term := "test"
    56  	result := sanitizeSearchTerm(term, "\\")
    57  	require.Equal(t, result, term)
    58  
    59  	term = "%%%"
    60  	expected := "\\%\\%\\%"
    61  	result = sanitizeSearchTerm(term, "\\")
    62  	require.Equal(t, result, expected)
    63  
    64  	term = "%\\%\\%"
    65  	expected = "\\%\\%\\%"
    66  	result = sanitizeSearchTerm(term, "\\")
    67  	require.Equal(t, result, expected)
    68  
    69  	term = "%_test_%"
    70  	expected = "\\%\\_test\\_\\%"
    71  	result = sanitizeSearchTerm(term, "\\")
    72  	require.Equal(t, result, expected)
    73  
    74  	term = "**test_%"
    75  	expected = "test*_*%"
    76  	result = sanitizeSearchTerm(term, "*")
    77  	require.Equal(t, result, expected)
    78  }
    79  
    80  func TestRemoveNonAlphaNumericUnquotedTerms(t *testing.T) {
    81  	const (
    82  		sep           = " "
    83  		chineseHello  = "你好"
    84  		japaneseHello = "こんにちは"
    85  	)
    86  	tests := []struct {
    87  		term string
    88  		want string
    89  		name string
    90  	}{
    91  		{term: "", want: "", name: "empty"},
    92  		{term: "h", want: "h", name: "singleChar"},
    93  		{term: "hello", want: "hello", name: "multiChar"},
    94  		{term: `hel*lo "**" **& hello`, want: `hel*lo "**" hello`, name: "quoted_unquoted_english"},
    95  		{term: japaneseHello + chineseHello, want: japaneseHello + chineseHello, name: "japanese_chinese"},
    96  		{term: japaneseHello + ` "*" ` + chineseHello, want: japaneseHello + ` "*" ` + chineseHello, name: `quoted_japanese_and_chinese`},
    97  		{term: japaneseHello + ` "*" &&* ` + chineseHello, want: japaneseHello + ` "*" ` + chineseHello, name: "quoted_unquoted_japanese_and_chinese"},
    98  	}
    99  	for _, test := range tests {
   100  		t.Run(test.name, func(t *testing.T) {
   101  			got := removeNonAlphaNumericUnquotedTerms(test.term, sep)
   102  			require.Equal(t, test.want, got)
   103  		})
   104  	}
   105  }