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