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 }