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	"context"
9	"encoding/json"
10	"testing"
11)
12
13func TestUpdateWithScript(t *testing.T) {
14	client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0)))
15
16	// Get original
17	getRes, err := client.Get().Index(testIndexName).Type("tweet").Id("1").Do(context.TODO())
18	if err != nil {
19		t.Fatal(err)
20	}
21	var original tweet
22	if err := json.Unmarshal(*getRes.Source, &original); err != nil {
23		t.Fatal(err)
24	}
25
26	// Update with script
27	updRes, err := client.Update().Index(testIndexName).Type("tweet").Id("1").
28		Script(
29			NewScript(`ctx._source.message = "Updated message text."`).Lang("painless"),
30		).
31		Do(context.TODO())
32	if err != nil {
33		t.Fatal(err)
34	}
35	if updRes == nil {
36		t.Fatal("response is nil")
37	}
38	if want, have := "updated", updRes.Result; want != have {
39		t.Fatalf("want Result = %q, have %v", want, have)
40	}
41
42	// Get new version
43	getRes, err = client.Get().Index(testIndexName).Type("tweet").Id("1").Do(context.TODO())
44	if err != nil {
45		t.Fatal(err)
46	}
47	var updated tweet
48	if err := json.Unmarshal(*getRes.Source, &updated); err != nil {
49		t.Fatal(err)
50	}
51
52	if want, have := original.User, updated.User; want != have {
53		t.Fatalf("want User = %q, have %v", want, have)
54	}
55	if want, have := "Updated message text.", updated.Message; want != have {
56		t.Fatalf("want Message = %q, have %v", want, have)
57	}
58}
59