1// Copyright 2012-present Oliver Eilhard. All rights reserved. 2// Use of this source code is governed by a MIT-license. 3// See http://olivere.mit-license.org/license.txt for details. 4 5package elastic 6 7import ( 8 "encoding/json" 9 "testing" 10) 11 12func TestSuggesterCategoryMapping(t *testing.T) { 13 q := NewSuggesterCategoryMapping("color").DefaultValues("red") 14 src, err := q.Source() 15 if err != nil { 16 t.Fatal(err) 17 } 18 data, err := json.Marshal(src) 19 if err != nil { 20 t.Fatalf("marshaling to JSON failed: %v", err) 21 } 22 got := string(data) 23 expected := `{"color":{"default":"red","type":"category"}}` 24 if got != expected { 25 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 26 } 27} 28 29func TestSuggesterCategoryMappingWithTwoDefaultValues(t *testing.T) { 30 q := NewSuggesterCategoryMapping("color").DefaultValues("red", "orange") 31 src, err := q.Source() 32 if err != nil { 33 t.Fatal(err) 34 } 35 data, err := json.Marshal(src) 36 if err != nil { 37 t.Fatalf("marshaling to JSON failed: %v", err) 38 } 39 got := string(data) 40 expected := `{"color":{"default":["red","orange"],"type":"category"}}` 41 if got != expected { 42 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 43 } 44} 45 46func TestSuggesterCategoryMappingWithFieldName(t *testing.T) { 47 q := NewSuggesterCategoryMapping("color"). 48 DefaultValues("red", "orange"). 49 FieldName("color_field") 50 src, err := q.Source() 51 if err != nil { 52 t.Fatal(err) 53 } 54 data, err := json.Marshal(src) 55 if err != nil { 56 t.Fatalf("marshaling to JSON failed: %v", err) 57 } 58 got := string(data) 59 expected := `{"color":{"default":["red","orange"],"path":"color_field","type":"category"}}` 60 if got != expected { 61 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 62 } 63} 64 65func TestSuggesterCategoryQuery(t *testing.T) { 66 q := NewSuggesterCategoryQuery("color", "red") 67 src, err := q.Source() 68 if err != nil { 69 t.Fatal(err) 70 } 71 data, err := json.Marshal(src) 72 if err != nil { 73 t.Fatalf("marshaling to JSON failed: %v", err) 74 } 75 got := string(data) 76 expected := `{"color":[{"context":"red"}]}` 77 if got != expected { 78 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 79 } 80} 81 82func TestSuggesterCategoryQueryWithTwoValues(t *testing.T) { 83 q := NewSuggesterCategoryQuery("color", "red", "yellow") 84 src, err := q.Source() 85 if err != nil { 86 t.Fatal(err) 87 } 88 data, err := json.Marshal(src) 89 if err != nil { 90 t.Fatalf("marshaling to JSON failed: %v", err) 91 } 92 got := string(data) 93 expectedOutcomes := []string{ 94 `{"color":[{"context":"red"},{"context":"yellow"}]}`, 95 `{"color":[{"context":"yellow"},{"context":"red"}]}`, 96 } 97 var match bool 98 for _, expected := range expectedOutcomes { 99 if got == expected { 100 match = true 101 break 102 } 103 } 104 if !match { 105 t.Errorf("expected any of %v\n,got:\n%s", expectedOutcomes, got) 106 } 107} 108 109func TestSuggesterCategoryQueryWithBoost(t *testing.T) { 110 q := NewSuggesterCategoryQuery("color", "red") 111 q.ValueWithBoost("yellow", 4) 112 src, err := q.Source() 113 if err != nil { 114 t.Fatal(err) 115 } 116 data, err := json.Marshal(src) 117 if err != nil { 118 t.Fatalf("marshaling to JSON failed: %v", err) 119 } 120 got := string(data) 121 expectedOutcomes := []string{ 122 `{"color":[{"context":"red"},{"boost":4,"context":"yellow"}]}`, 123 `{"color":[{"boost":4,"context":"yellow"},{"context":"red"}]}`, 124 } 125 var match bool 126 for _, expected := range expectedOutcomes { 127 if got == expected { 128 match = true 129 break 130 } 131 } 132 if !match { 133 t.Errorf("expected any of %v\n,got:\n%v", expectedOutcomes, got) 134 } 135} 136 137func TestSuggesterCategoryQueryWithoutBoost(t *testing.T) { 138 q := NewSuggesterCategoryQuery("color", "red") 139 q.Value("yellow") 140 src, err := q.Source() 141 if err != nil { 142 t.Fatal(err) 143 } 144 data, err := json.Marshal(src) 145 if err != nil { 146 t.Fatalf("marshaling to JSON failed: %v", err) 147 } 148 got := string(data) 149 expectedOutcomes := []string{ 150 `{"color":[{"context":"red"},{"context":"yellow"}]}`, 151 `{"color":[{"context":"yellow"},{"context":"red"}]}`, 152 } 153 var match bool 154 for _, expected := range expectedOutcomes { 155 if got == expected { 156 match = true 157 break 158 } 159 } 160 if !match { 161 t.Errorf("expected any of %v\n,got:\n%s", expectedOutcomes, got) 162 } 163} 164 165func TestSuggesterCategoryIndex(t *testing.T) { 166 in := NewSuggesterCategoryIndex("color", "red") 167 src, err := in.Source() 168 if err != nil { 169 t.Fatal(err) 170 } 171 data, err := json.Marshal(src) 172 if err != nil { 173 t.Fatalf("marshaling to JSON failed: %v", err) 174 } 175 got := string(data) 176 expected := `{"color":"red"}` 177 if got != expected { 178 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 179 } 180} 181 182func TestSuggesterCategoryIndexWithTwoValues(t *testing.T) { 183 in := NewSuggesterCategoryIndex("color", "red", "yellow") 184 src, err := in.Source() 185 if err != nil { 186 t.Fatal(err) 187 } 188 data, err := json.Marshal(src) 189 if err != nil { 190 t.Fatalf("marshaling to JSON failed: %v", err) 191 } 192 got := string(data) 193 expected := `{"color":["red","yellow"]}` 194 if got != expected { 195 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 196 } 197} 198