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