github.com/lologarithm/mattermost-server@v5.3.2-0.20181002060438-c82a84ed765b+incompatible/model/search_params_test.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package model
     5  
     6  import (
     7  	"testing"
     8  )
     9  
    10  func TestSplitWords(t *testing.T) {
    11  	if words := splitWords(""); len(words) != 0 {
    12  		t.Fatalf("Incorrect output splitWords: %v", words)
    13  	}
    14  
    15  	if words := splitWords("   "); len(words) != 0 {
    16  		t.Fatalf("Incorrect output splitWords: %v", words)
    17  	}
    18  
    19  	if words := splitWords("word"); len(words) != 1 || words[0] != "word" {
    20  		t.Fatalf("Incorrect output splitWords: %v", words)
    21  	}
    22  
    23  	if words := splitWords("wo\"rd"); len(words) != 2 || words[0] != "wo" || words[1] != "\"rd" {
    24  		t.Fatalf("Incorrect output splitWords: %v", words)
    25  	}
    26  
    27  	if words := splitWords("wo\"rd\""); len(words) != 2 || words[0] != "wo" || words[1] != "\"rd\"" {
    28  		t.Fatalf("Incorrect output splitWords: %v", words)
    29  	}
    30  
    31  	if words := splitWords("word1 word2 word3"); len(words) != 3 || words[0] != "word1" || words[1] != "word2" || words[2] != "word3" {
    32  		t.Fatalf("Incorrect output splitWords: %v", words)
    33  	}
    34  
    35  	if words := splitWords("word1 \"word2 word3"); len(words) != 3 || words[0] != "word1" || words[1] != "\"word2" || words[2] != "word3" {
    36  		t.Fatalf("Incorrect output splitWords: %v", words)
    37  	}
    38  
    39  	if words := splitWords("\"word1 word2 word3"); len(words) != 3 || words[0] != "\"word1" || words[1] != "word2" || words[2] != "word3" {
    40  		t.Fatalf("Incorrect output splitWords: %v", words)
    41  	}
    42  
    43  	if words := splitWords("word1 word2 word3\""); len(words) != 4 || words[0] != "word1" || words[1] != "word2" || words[2] != "word3" || words[3] != "\"" {
    44  		t.Fatalf("Incorrect output splitWords: %v", words)
    45  	}
    46  
    47  	if words := splitWords("word1 #word2 ##word3"); len(words) != 3 || words[0] != "word1" || words[1] != "#word2" || words[2] != "##word3" {
    48  		t.Fatalf("Incorrect output splitWords: %v", words)
    49  	}
    50  
    51  	if words := splitWords("    word1 word2     word3  "); len(words) != 3 || words[0] != "word1" || words[1] != "word2" || words[2] != "word3" {
    52  		t.Fatalf("Incorrect output splitWords: %v", words)
    53  	}
    54  
    55  	if words := splitWords("\"quoted\""); len(words) != 1 || words[0] != "\"quoted\"" {
    56  		t.Fatalf("Incorrect output splitWords: %v", words)
    57  	}
    58  
    59  	if words := splitWords("\"quoted multiple words\""); len(words) != 1 || words[0] != "\"quoted multiple words\"" {
    60  		t.Fatalf("Incorrect output splitWords: %v", words)
    61  	}
    62  
    63  	if words := splitWords("some stuff \"quoted multiple words\" more stuff"); len(words) != 5 || words[0] != "some" || words[1] != "stuff" || words[2] != "\"quoted multiple words\"" || words[3] != "more" || words[4] != "stuff" {
    64  		t.Fatalf("Incorrect output splitWords: %v", words)
    65  	}
    66  
    67  	if words := splitWords("some \"stuff\" \"quoted multiple words\" #some \"more stuff\""); len(words) != 5 || words[0] != "some" || words[1] != "\"stuff\"" || words[2] != "\"quoted multiple words\"" || words[3] != "#some" || words[4] != "\"more stuff\"" {
    68  		t.Fatalf("Incorrect output splitWords: %v", words)
    69  	}
    70  }
    71  
    72  func TestParseSearchFlags(t *testing.T) {
    73  	if words, flags := parseSearchFlags(splitWords("")); len(words) != 0 {
    74  		t.Fatalf("got words from empty input")
    75  	} else if len(flags) != 0 {
    76  		t.Fatalf("got flags from empty input")
    77  	}
    78  
    79  	if words, flags := parseSearchFlags(splitWords("word")); len(words) != 1 || words[0] != "word" {
    80  		t.Fatalf("got incorrect words %v", words)
    81  	} else if len(flags) != 0 {
    82  		t.Fatalf("got incorrect flags %v", flags)
    83  	}
    84  
    85  	if words, flags := parseSearchFlags(splitWords("apple banana cherry")); len(words) != 3 || words[0] != "apple" || words[1] != "banana" || words[2] != "cherry" {
    86  		t.Fatalf("got incorrect words %v", words)
    87  	} else if len(flags) != 0 {
    88  		t.Fatalf("got incorrect flags %v", flags)
    89  	}
    90  
    91  	if words, flags := parseSearchFlags(splitWords("apple banana from:chan")); len(words) != 2 || words[0] != "apple" || words[1] != "banana" {
    92  		t.Fatalf("got incorrect words %v", words)
    93  	} else if len(flags) != 1 || flags[0][0] != "from" || flags[0][1] != "chan" {
    94  		t.Fatalf("got incorrect flags %v", flags)
    95  	}
    96  
    97  	if words, flags := parseSearchFlags(splitWords("#apple #banana from:chan")); len(words) != 2 || words[0] != "#apple" || words[1] != "#banana" {
    98  		t.Fatalf("got incorrect words %v", words)
    99  	} else if len(flags) != 1 || flags[0][0] != "from" || flags[0][1] != "chan" {
   100  		t.Fatalf("got incorrect flags %v", flags)
   101  	}
   102  
   103  	if words, flags := parseSearchFlags(splitWords("apple banana from: chan")); len(words) != 2 || words[0] != "apple" || words[1] != "banana" {
   104  		t.Fatalf("got incorrect words %v", words)
   105  	} else if len(flags) != 1 || flags[0][0] != "from" || flags[0][1] != "chan" {
   106  		t.Fatalf("got incorrect flags %v", flags)
   107  	}
   108  
   109  	if words, flags := parseSearchFlags(splitWords("apple banana in: chan")); len(words) != 2 || words[0] != "apple" || words[1] != "banana" {
   110  		t.Fatalf("got incorrect words %v", words)
   111  	} else if len(flags) != 1 || flags[0][0] != "in" || flags[0][1] != "chan" {
   112  		t.Fatalf("got incorrect flags %v", flags)
   113  	}
   114  
   115  	if words, flags := parseSearchFlags(splitWords("apple banana channel:chan")); len(words) != 2 || words[0] != "apple" || words[1] != "banana" {
   116  		t.Fatalf("got incorrect words %v", words)
   117  	} else if len(flags) != 1 || flags[0][0] != "channel" || flags[0][1] != "chan" {
   118  		t.Fatalf("got incorrect flags %v", flags)
   119  	}
   120  
   121  	if words, flags := parseSearchFlags(splitWords("fruit: cherry")); len(words) != 2 || words[0] != "fruit" || words[1] != "cherry" {
   122  		t.Fatalf("got incorrect words %v", words)
   123  	} else if len(flags) != 0 {
   124  		t.Fatalf("got incorrect flags %v", flags)
   125  	}
   126  
   127  	if words, flags := parseSearchFlags(splitWords("channel:")); len(words) != 1 || words[0] != "channel" {
   128  		t.Fatalf("got incorrect words %v", words)
   129  	} else if len(flags) != 0 {
   130  		t.Fatalf("got incorrect flags %v", flags)
   131  	}
   132  
   133  	if words, flags := parseSearchFlags(splitWords("channel: first in: second from:")); len(words) != 1 || words[0] != "from" {
   134  		t.Fatalf("got incorrect words %v", words)
   135  	} else if len(flags) != 2 || flags[0][0] != "channel" || flags[0][1] != "first" || flags[1][0] != "in" || flags[1][1] != "second" {
   136  		t.Fatalf("got incorrect flags %v", flags)
   137  	}
   138  
   139  	if words, flags := parseSearchFlags(splitWords("channel: first channel: second from: third from: fourth")); len(words) != 0 {
   140  		t.Fatalf("got incorrect words %v", words)
   141  	} else if len(flags) != 4 || flags[0][0] != "channel" || flags[0][1] != "first" || flags[1][0] != "channel" || flags[1][1] != "second" ||
   142  		flags[2][0] != "from" || flags[2][1] != "third" || flags[3][0] != "from" || flags[3][1] != "fourth" {
   143  		t.Fatalf("got incorrect flags %v", flags)
   144  	}
   145  
   146  	if words, flags := parseSearchFlags(splitWords("\"quoted\"")); len(words) != 1 || words[0] != "\"quoted\"" {
   147  		t.Fatalf("got incorrect words %v", words)
   148  	} else if len(flags) != 0 {
   149  		t.Fatalf("got incorrect flags %v", flags)
   150  	}
   151  
   152  	if words, flags := parseSearchFlags(splitWords("\"quoted multiple words\"")); len(words) != 1 || words[0] != "\"quoted multiple words\"" {
   153  		t.Fatalf("got incorrect words %v", words)
   154  	} else if len(flags) != 0 {
   155  		t.Fatalf("got incorrect flags %v", flags)
   156  	}
   157  
   158  	if words, flags := parseSearchFlags(splitWords("some \"stuff\" \"quoted multiple words\" some \"more stuff\"")); len(words) != 5 || words[0] != "some" || words[1] != "\"stuff\"" || words[2] != "\"quoted multiple words\"" || words[3] != "some" || words[4] != "\"more stuff\"" {
   159  		t.Fatalf("Incorrect output splitWords: %v", words)
   160  	} else if len(flags) != 0 {
   161  		t.Fatalf("got incorrect flags %v", flags)
   162  	}
   163  
   164  	if words, flags := parseSearchFlags(splitWords("some in:here \"stuff\" \"quoted multiple words\" from:someone \"more stuff\"")); len(words) != 4 || words[0] != "some" || words[1] != "\"stuff\"" || words[2] != "\"quoted multiple words\"" || words[3] != "\"more stuff\"" {
   165  		t.Fatalf("Incorrect output splitWords: %v", words)
   166  	} else if len(flags) != 2 || flags[0][0] != "in" || flags[0][1] != "here" || flags[1][0] != "from" || flags[1][1] != "someone" {
   167  		t.Fatalf("got incorrect flags %v", flags)
   168  	}
   169  
   170  	if words, flags := parseSearchFlags(splitWords("after:2018-1-1")); len(words) != 0 {
   171  		t.Fatalf("got incorrect words %v", words)
   172  	} else if len(flags) != 1 || flags[0][0] != "after" || flags[0][1] != "2018-1-1" {
   173  		t.Fatalf("got incorrect flags %v", flags)
   174  	}
   175  
   176  	if words, flags := parseSearchFlags(splitWords("apple banana after:2018-1-1")); len(words) != 2 || words[0] != "apple" || words[1] != "banana" {
   177  		t.Fatalf("got incorrect words %v", words)
   178  	} else if len(flags) != 1 || flags[0][0] != "after" || flags[0][1] != "2018-1-1" {
   179  		t.Fatalf("got incorrect flags %v", flags)
   180  	}
   181  
   182  	if words, flags := parseSearchFlags(splitWords("apple banana before:2018-1-1")); len(words) != 2 || words[0] != "apple" || words[1] != "banana" {
   183  		t.Fatalf("got incorrect words %v", words)
   184  	} else if len(flags) != 1 || flags[0][0] != "before" || flags[0][1] != "2018-1-1" {
   185  		t.Fatalf("got incorrect flags %v", flags)
   186  	}
   187  
   188  	if words, flags := parseSearchFlags(splitWords("apple banana after:2018-1-1 before:2018-1-10")); len(words) != 2 || words[0] != "apple" || words[1] != "banana" {
   189  		t.Fatalf("got incorrect words %v", words)
   190  	} else if len(flags) != 2 || flags[0][0] != "after" || flags[0][1] != "2018-1-1" || flags[1][0] != "before" || flags[1][1] != "2018-1-10" {
   191  		t.Fatalf("got incorrect flags %v", flags)
   192  	}
   193  
   194  	if words, flags := parseSearchFlags(splitWords("#apple #banana after:2018-1-1")); len(words) != 2 || words[0] != "#apple" || words[1] != "#banana" {
   195  		t.Fatalf("got incorrect words %v", words)
   196  	} else if len(flags) != 1 || flags[0][0] != "after" || flags[0][1] != "2018-1-1" {
   197  		t.Fatalf("got incorrect flags %v", flags)
   198  	}
   199  
   200  	if words, flags := parseSearchFlags(splitWords("#apple #banana before:2018-1-1")); len(words) != 2 || words[0] != "#apple" || words[1] != "#banana" {
   201  		t.Fatalf("got incorrect words %v", words)
   202  	} else if len(flags) != 1 || flags[0][0] != "before" || flags[0][1] != "2018-1-1" {
   203  		t.Fatalf("got incorrect flags %v", flags)
   204  	}
   205  
   206  	if words, flags := parseSearchFlags(splitWords("#apple #banana after:2018-1-1 before:2018-1-10")); len(words) != 2 || words[0] != "#apple" || words[1] != "#banana" {
   207  		t.Fatalf("got incorrect words %v", words)
   208  	} else if len(flags) != 2 || flags[0][0] != "after" || flags[0][1] != "2018-1-1" || flags[1][0] != "before" || flags[1][1] != "2018-1-10" {
   209  		t.Fatalf("got incorrect flags %v", flags)
   210  	}
   211  
   212  	if words, flags := parseSearchFlags(splitWords("apple banana after: 2018-1-1")); len(words) != 2 || words[0] != "apple" || words[1] != "banana" {
   213  		t.Fatalf("got incorrect words %v", words)
   214  	} else if len(flags) != 1 || flags[0][0] != "after" || flags[0][1] != "2018-1-1" {
   215  		t.Fatalf("got incorrect flags %v", flags)
   216  	}
   217  
   218  	if words, flags := parseSearchFlags(splitWords("apple banana before: 2018-1-1")); len(words) != 2 || words[0] != "apple" || words[1] != "banana" {
   219  		t.Fatalf("got incorrect words %v", words)
   220  	} else if len(flags) != 1 || flags[0][0] != "before" || flags[0][1] != "2018-1-1" {
   221  		t.Fatalf("got incorrect flags %v", flags)
   222  	}
   223  
   224  	if words, flags := parseSearchFlags(splitWords("apple banana after: 2018-1-1 before: 2018-1-10")); len(words) != 2 || words[0] != "apple" || words[1] != "banana" {
   225  		t.Fatalf("got incorrect words %v", words)
   226  	} else if len(flags) != 2 || flags[0][0] != "after" || flags[0][1] != "2018-1-1" || flags[1][0] != "before" || flags[1][1] != "2018-1-10" {
   227  		t.Fatalf("got incorrect flags %v", flags)
   228  	}
   229  
   230  	if words, flags := parseSearchFlags(splitWords("apple banana after: 2018-1-1 before: 2018-1-10 #fruit")); len(words) != 3 || words[0] != "apple" || words[1] != "banana" || words[2] != "#fruit" {
   231  		t.Fatalf("got incorrect words %v", words)
   232  	} else if len(flags) != 2 || flags[0][0] != "after" || flags[0][1] != "2018-1-1" || flags[1][0] != "before" || flags[1][1] != "2018-1-10" {
   233  		t.Fatalf("got incorrect flags %v", flags)
   234  	}
   235  
   236  	if words, flags := parseSearchFlags(splitWords("test after:2018-7-1")); len(words) != 1 || words[0] != "test" {
   237  		t.Fatalf("got incorrect words %v", words)
   238  	} else if len(flags) != 1 || flags[0][0] != "after" || flags[0][1] != "2018-7-1" {
   239  		t.Fatalf("got incorrect flags %v", flags)
   240  	}
   241  }
   242  
   243  func TestParseSearchParams(t *testing.T) {
   244  	if sp := ParseSearchParams("", 0); len(sp) != 0 {
   245  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   246  	}
   247  
   248  	if sp := ParseSearchParams("     ", 0); len(sp) != 0 {
   249  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   250  	}
   251  
   252  	if sp := ParseSearchParams("words words", 0); len(sp) != 1 || sp[0].Terms != "words words" || sp[0].IsHashtag || len(sp[0].InChannels) != 0 || len(sp[0].FromUsers) != 0 {
   253  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   254  	}
   255  
   256  	if sp := ParseSearchParams("\"my stuff\"", 0); len(sp) != 1 || sp[0].Terms != "\"my stuff\"" || sp[0].IsHashtag || len(sp[0].InChannels) != 0 || len(sp[0].FromUsers) != 0 {
   257  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   258  	}
   259  
   260  	if sp := ParseSearchParams("#words #words", 0); len(sp) != 1 || sp[0].Terms != "#words #words" || !sp[0].IsHashtag || len(sp[0].InChannels) != 0 || len(sp[0].FromUsers) != 0 {
   261  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   262  	}
   263  
   264  	if sp := ParseSearchParams("#words words", 0); len(sp) != 2 || sp[1].Terms != "#words" || !sp[1].IsHashtag || len(sp[1].InChannels) != 0 || len(sp[1].FromUsers) != 0 || sp[0].Terms != "words" || sp[0].IsHashtag || len(sp[0].InChannels) != 0 {
   265  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   266  	}
   267  
   268  	if sp := ParseSearchParams("in:channel", 0); len(sp) != 1 || sp[0].Terms != "" || len(sp[0].InChannels) != 1 || sp[0].InChannels[0] != "channel" || len(sp[0].FromUsers) != 0 {
   269  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   270  	}
   271  
   272  	if sp := ParseSearchParams("testing in:channel", 0); len(sp) != 1 || sp[0].Terms != "testing" || len(sp[0].InChannels) != 1 || sp[0].InChannels[0] != "channel" || len(sp[0].FromUsers) != 0 {
   273  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   274  	}
   275  
   276  	if sp := ParseSearchParams("in:channel testing", 0); len(sp) != 1 || sp[0].Terms != "testing" || len(sp[0].InChannels) != 1 || sp[0].InChannels[0] != "channel" || len(sp[0].FromUsers) != 0 {
   277  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   278  	}
   279  
   280  	if sp := ParseSearchParams("in:channel in:otherchannel", 0); len(sp) != 1 || sp[0].Terms != "" || len(sp[0].InChannels) != 2 || sp[0].InChannels[0] != "channel" || sp[0].InChannels[1] != "otherchannel" || len(sp[0].FromUsers) != 0 {
   281  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   282  	}
   283  
   284  	if sp := ParseSearchParams("testing in:channel from:someone", 0); len(sp) != 1 || sp[0].Terms != "testing" || len(sp[0].InChannels) != 1 || sp[0].InChannels[0] != "channel" || len(sp[0].FromUsers) != 1 || sp[0].FromUsers[0] != "someone" {
   285  		t.Fatalf("Incorrect output from parse search params: %v", sp[0])
   286  	}
   287  
   288  	if sp := ParseSearchParams("##hashtag +#plus+", 0); len(sp) != 1 || sp[0].Terms != "#hashtag #plus" || !sp[0].IsHashtag || len(sp[0].InChannels) != 0 || len(sp[0].FromUsers) != 0 {
   289  		t.Fatalf("Incorrect output from parse search params: %v", sp[0])
   290  	}
   291  
   292  	if sp := ParseSearchParams("wildcar*", 0); len(sp) != 1 || sp[0].Terms != "wildcar*" || sp[0].IsHashtag || len(sp[0].InChannels) != 0 || len(sp[0].FromUsers) != 0 {
   293  		t.Fatalf("Incorrect output from parse search params: %v", sp[0])
   294  	}
   295  
   296  	if sp := ParseSearchParams("after:2018-8-1 testing", 0); len(sp) != 1 || sp[0].Terms != "testing" || len(sp[0].AfterDate) == 0 || sp[0].AfterDate != "2018-8-1" {
   297  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   298  	}
   299  
   300  	if sp := ParseSearchParams("after:2018-8-1", 0); len(sp) != 1 || sp[0].Terms != "" || len(sp[0].AfterDate) == 0 || sp[0].AfterDate != "2018-8-1" {
   301  		t.Fatalf("Incorrect output from parse search params: %v", sp)
   302  	}
   303  }