1// Copyright 2012-2015 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 "testing"
8
9func TestPutMappingURL(t *testing.T) {
10	client := setupTestClientAndCreateIndex(t)
11
12	tests := []struct {
13		Indices  []string
14		Type     string
15		Expected string
16	}{
17		{
18			[]string{},
19			"tweet",
20			"/_mapping/tweet",
21		},
22		{
23			[]string{"*"},
24			"tweet",
25			"/%2A/_mapping/tweet",
26		},
27		{
28			[]string{"store-1", "store-2"},
29			"tweet",
30			"/store-1%2Cstore-2/_mapping/tweet",
31		},
32	}
33
34	for _, test := range tests {
35		path, _, err := client.PutMapping().Index(test.Indices...).Type(test.Type).buildURL()
36		if err != nil {
37			t.Fatal(err)
38		}
39		if path != test.Expected {
40			t.Errorf("expected %q; got: %q", test.Expected, path)
41		}
42	}
43}
44
45func TestMappingLifecycle(t *testing.T) {
46	client := setupTestClientAndCreateIndex(t)
47
48	mapping := `{
49		"tweetdoc":{
50			"properties":{
51				"message":{
52					"type":"string"
53				}
54			}
55		}
56	}`
57
58	putresp, err := client.PutMapping().Index(testIndexName2).Type("tweetdoc").BodyString(mapping).Do()
59	if err != nil {
60		t.Fatalf("expected put mapping to succeed; got: %v", err)
61	}
62	if putresp == nil {
63		t.Fatalf("expected put mapping response; got: %v", putresp)
64	}
65	if !putresp.Acknowledged {
66		t.Fatalf("expected put mapping ack; got: %v", putresp.Acknowledged)
67	}
68
69	getresp, err := client.GetMapping().Index(testIndexName2).Type("tweetdoc").Do()
70	if err != nil {
71		t.Fatalf("expected get mapping to succeed; got: %v", err)
72	}
73	if getresp == nil {
74		t.Fatalf("expected get mapping response; got: %v", getresp)
75	}
76	props, ok := getresp[testIndexName2]
77	if !ok {
78		t.Fatalf("expected JSON root to be of type map[string]interface{}; got: %#v", props)
79	}
80
81	// NOTE There is no Delete Mapping API in Elasticsearch 2.0
82}
83