query_builder_specs.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. ///<amd-dependency path="../query_builder" name="ElasticQueryBuilder"/>
  2. import {describe, beforeEach, it, sinon, expect} from 'test/lib/common';
  3. declare var ElasticQueryBuilder: any;
  4. describe('ElasticQueryBuilder', function() {
  5. var builder;
  6. beforeEach(function() {
  7. builder = new ElasticQueryBuilder({timeField: '@timestamp'});
  8. });
  9. it('with defaults', function() {
  10. var query = builder.build({
  11. metrics: [{type: 'Count', id: '0'}],
  12. timeField: '@timestamp',
  13. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '1'}],
  14. });
  15. expect(query.query.filtered.filter.bool.must[0].range["@timestamp"].gte).to.be("$timeFrom");
  16. expect(query.aggs["1"].date_histogram.extended_bounds.min).to.be("$timeFrom");
  17. });
  18. it('with multiple bucket aggs', function() {
  19. var query = builder.build({
  20. metrics: [{type: 'count', id: '1'}],
  21. timeField: '@timestamp',
  22. bucketAggs: [
  23. {type: 'terms', field: '@host', id: '2'},
  24. {type: 'date_histogram', field: '@timestamp', id: '3'}
  25. ],
  26. });
  27. expect(query.aggs["2"].terms.field).to.be("@host");
  28. expect(query.aggs["2"].aggs["3"].date_histogram.field).to.be("@timestamp");
  29. });
  30. it('with select field', function() {
  31. var query = builder.build({
  32. metrics: [{type: 'avg', field: '@value', id: '1'}],
  33. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '2'}],
  34. }, 100, 1000);
  35. var aggs = query.aggs["2"].aggs;
  36. expect(aggs["1"].avg.field).to.be("@value");
  37. });
  38. it('with term agg and order by metric agg', function() {
  39. var query = builder.build({
  40. metrics: [
  41. {type: 'count', id: '1'},
  42. {type: 'avg', field: '@value', id: '5'}
  43. ],
  44. bucketAggs: [
  45. {type: 'terms', field: '@host', settings: {size: 5, order: 'asc', orderBy: '5'}, id: '2' },
  46. {type: 'date_histogram', field: '@timestamp', id: '3'}
  47. ],
  48. }, 100, 1000);
  49. var firstLevel = query.aggs["2"];
  50. var secondLevel = firstLevel.aggs["3"];
  51. expect(firstLevel.aggs["5"].avg.field).to.be("@value");
  52. expect(secondLevel.aggs["5"].avg.field).to.be("@value");
  53. });
  54. it('with metric percentiles', function() {
  55. var query = builder.build({
  56. metrics: [
  57. {
  58. id: '1',
  59. type: 'percentiles',
  60. field: '@load_time',
  61. settings: {
  62. percents: [1,2,3,4]
  63. }
  64. }
  65. ],
  66. bucketAggs: [
  67. {type: 'date_histogram', field: '@timestamp', id: '3'}
  68. ],
  69. }, 100, 1000);
  70. var firstLevel = query.aggs["3"];
  71. expect(firstLevel.aggs["1"].percentiles.field).to.be("@load_time");
  72. expect(firstLevel.aggs["1"].percentiles.percents).to.eql([1,2,3,4]);
  73. });
  74. it('with filters aggs', function() {
  75. var query = builder.build({
  76. metrics: [{type: 'count', id: '1'}],
  77. timeField: '@timestamp',
  78. bucketAggs: [
  79. {
  80. id: '2',
  81. type: 'filters',
  82. settings: {
  83. filters: [
  84. {query: '@metric:cpu' },
  85. {query: '@metric:logins.count' },
  86. ]
  87. }
  88. },
  89. {type: 'date_histogram', field: '@timestamp', id: '4'}
  90. ],
  91. });
  92. expect(query.aggs["2"].filters.filters["@metric:cpu"].query.query_string.query).to.be("@metric:cpu");
  93. expect(query.aggs["2"].filters.filters["@metric:logins.count"].query.query_string.query).to.be("@metric:logins.count");
  94. expect(query.aggs["2"].aggs["4"].date_histogram.field).to.be("@timestamp");
  95. });
  96. it('with raw_document metric', function() {
  97. var query = builder.build({
  98. metrics: [{type: 'raw_document', id: '1'}],
  99. timeField: '@timestamp',
  100. bucketAggs: [],
  101. });
  102. expect(query.size).to.be(500);
  103. });
  104. });