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 TestDateRangeAggregation(t *testing.T) { 13 agg := NewDateRangeAggregation().Field("created_at").TimeZone("UTC") 14 agg = agg.AddRange(nil, "2012-12-31") 15 agg = agg.AddRange("2013-01-01", "2013-12-31") 16 agg = agg.AddRange("2014-01-01", nil) 17 src, err := agg.Source() 18 if err != nil { 19 t.Fatal(err) 20 } 21 data, err := json.Marshal(src) 22 if err != nil { 23 t.Fatalf("marshaling to JSON failed: %v", err) 24 } 25 got := string(data) 26 expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}],"time_zone":"UTC"}}` 27 if got != expected { 28 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 29 } 30} 31 32func TestDateRangeAggregationWithPointers(t *testing.T) { 33 d1 := "2012-12-31" 34 d2 := "2013-01-01" 35 d3 := "2013-12-31" 36 d4 := "2014-01-01" 37 38 agg := NewDateRangeAggregation().Field("created_at") 39 agg = agg.AddRange(nil, &d1) 40 agg = agg.AddRange(d2, &d3) 41 agg = agg.AddRange(d4, nil) 42 src, err := agg.Source() 43 if err != nil { 44 t.Fatal(err) 45 } 46 data, err := json.Marshal(src) 47 if err != nil { 48 t.Fatalf("marshaling to JSON failed: %v", err) 49 } 50 got := string(data) 51 expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` 52 if got != expected { 53 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 54 } 55} 56 57func TestDateRangeAggregationWithUnbounded(t *testing.T) { 58 agg := NewDateRangeAggregation().Field("created_at"). 59 AddUnboundedFrom("2012-12-31"). 60 AddRange("2013-01-01", "2013-12-31"). 61 AddUnboundedTo("2014-01-01") 62 src, err := agg.Source() 63 if err != nil { 64 t.Fatal(err) 65 } 66 data, err := json.Marshal(src) 67 if err != nil { 68 t.Fatalf("marshaling to JSON failed: %v", err) 69 } 70 got := string(data) 71 expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` 72 if got != expected { 73 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 74 } 75} 76 77func TestDateRangeAggregationWithLtAndCo(t *testing.T) { 78 agg := NewDateRangeAggregation().Field("created_at"). 79 Lt("2012-12-31"). 80 Between("2013-01-01", "2013-12-31"). 81 Gt("2014-01-01") 82 src, err := agg.Source() 83 if err != nil { 84 t.Fatal(err) 85 } 86 data, err := json.Marshal(src) 87 if err != nil { 88 t.Fatalf("marshaling to JSON failed: %v", err) 89 } 90 got := string(data) 91 expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` 92 if got != expected { 93 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 94 } 95} 96 97func TestDateRangeAggregationWithKeyedFlag(t *testing.T) { 98 agg := NewDateRangeAggregation().Field("created_at"). 99 Keyed(true). 100 Lt("2012-12-31"). 101 Between("2013-01-01", "2013-12-31"). 102 Gt("2014-01-01") 103 src, err := agg.Source() 104 if err != nil { 105 t.Fatal(err) 106 } 107 data, err := json.Marshal(src) 108 if err != nil { 109 t.Fatalf("marshaling to JSON failed: %v", err) 110 } 111 got := string(data) 112 expected := `{"date_range":{"field":"created_at","keyed":true,"ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` 113 if got != expected { 114 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 115 } 116} 117 118func TestDateRangeAggregationWithKeys(t *testing.T) { 119 agg := NewDateRangeAggregation().Field("created_at"). 120 Keyed(true). 121 LtWithKey("pre-2012", "2012-12-31"). 122 BetweenWithKey("2013", "2013-01-01", "2013-12-31"). 123 GtWithKey("post-2013", "2014-01-01") 124 src, err := agg.Source() 125 if err != nil { 126 t.Fatal(err) 127 } 128 data, err := json.Marshal(src) 129 if err != nil { 130 t.Fatalf("marshaling to JSON failed: %v", err) 131 } 132 got := string(data) 133 expected := `{"date_range":{"field":"created_at","keyed":true,"ranges":[{"key":"pre-2012","to":"2012-12-31"},{"from":"2013-01-01","key":"2013","to":"2013-12-31"},{"from":"2014-01-01","key":"post-2013"}]}}` 134 if got != expected { 135 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 136 } 137} 138 139func TestDateRangeAggregationWithSpecialNames(t *testing.T) { 140 agg := NewDateRangeAggregation().Field("created_at"). 141 AddRange("now-10M/M", "now+10M/M") 142 src, err := agg.Source() 143 if err != nil { 144 t.Fatal(err) 145 } 146 data, err := json.Marshal(src) 147 if err != nil { 148 t.Fatalf("marshaling to JSON failed: %v", err) 149 } 150 got := string(data) 151 expected := `{"date_range":{"field":"created_at","ranges":[{"from":"now-10M/M","to":"now+10M/M"}]}}` 152 if got != expected { 153 t.Errorf("expected\n%s\n,got:\n%s", expected, got) 154 } 155} 156