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 TestPercolatorQuery(t *testing.T) {
13	q := NewPercolatorQuery().
14		Field("query").
15		DocumentType("doctype").
16		Document(map[string]interface{}{
17			"message": "Some message",
18		})
19	src, err := q.Source()
20	if err != nil {
21		t.Fatal(err)
22	}
23	data, err := json.Marshal(src)
24	if err != nil {
25		t.Fatalf("marshaling to JSON failed: %v", err)
26	}
27	got := string(data)
28	expected := `{"percolate":{"document":{"message":"Some message"},"document_type":"doctype","field":"query"}}`
29	if got != expected {
30		t.Errorf("expected\n%s\n,got:\n%s", expected, got)
31	}
32}
33
34func TestPercolatorQueryWithDetails(t *testing.T) {
35	q := NewPercolatorQuery().
36		Field("query").
37		DocumentType("doctype").
38		Document(map[string]interface{}{
39			"message": "Some message",
40		}).
41		IndexedDocumentIndex("index").
42		IndexedDocumentType("type").
43		IndexedDocumentId("1").
44		IndexedDocumentRouting("route").
45		IndexedDocumentPreference("one").
46		IndexedDocumentVersion(1)
47	src, err := q.Source()
48	if err != nil {
49		t.Fatal(err)
50	}
51	data, err := json.Marshal(src)
52	if err != nil {
53		t.Fatalf("marshaling to JSON failed: %v", err)
54	}
55	got := string(data)
56	expected := `{"percolate":{"document":{"message":"Some message"},"document_type":"doctype","field":"query","id":"1","index":"index","preference":"one","routing":"route","type":"type","version":1}}`
57	if got != expected {
58		t.Errorf("expected\n%s\n,got:\n%s", expected, got)
59	}
60}
61
62func TestPercolatorQueryWithMissingFields(t *testing.T) {
63	q := NewPercolatorQuery() // no Field, Document, or Query
64	_, err := q.Source()
65	if err == nil {
66		t.Fatal("expected error, got nil")
67	}
68}
69