query_builder_specs.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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 raw query', function() {
  19. var query = builder.build({
  20. rawQuery: '{"query": "$lucene_query"}',
  21. });
  22. expect(query.query).to.be("$lucene_query");
  23. });
  24. it('with multiple bucket aggs', function() {
  25. var query = builder.build({
  26. metrics: [{type: 'count', id: '1'}],
  27. timeField: '@timestamp',
  28. bucketAggs: [
  29. {type: 'terms', field: '@host', id: '2'},
  30. {type: 'date_histogram', field: '@timestamp', id: '3'}
  31. ],
  32. });
  33. expect(query.aggs["2"].terms.field).to.be("@host");
  34. expect(query.aggs["2"].aggs["3"].date_histogram.field).to.be("@timestamp");
  35. });
  36. it('with select field', function() {
  37. var query = builder.build({
  38. metrics: [{type: 'avg', field: '@value', id: '1'}],
  39. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '2'}],
  40. }, 100, 1000);
  41. var aggs = query.aggs["2"].aggs;
  42. expect(aggs["1"].avg.field).to.be("@value");
  43. });
  44. it('with term agg and order by metric agg', function() {
  45. var query = builder.build({
  46. metrics: [
  47. {type: 'count', id: '1'},
  48. {type: 'avg', field: '@value', id: '5'}
  49. ],
  50. bucketAggs: [
  51. {type: 'terms', field: '@host', settings: {size: 5, order: 'asc', orderBy: '5'}, id: '2' },
  52. {type: 'date_histogram', field: '@timestamp', id: '3'}
  53. ],
  54. }, 100, 1000);
  55. var firstLevel = query.aggs["2"];
  56. var secondLevel = firstLevel.aggs["3"];
  57. expect(firstLevel.aggs["5"].avg.field).to.be("@value");
  58. expect(secondLevel.aggs["5"].avg.field).to.be("@value");
  59. });
  60. it('with metric percentiles', function() {
  61. var query = builder.build({
  62. metrics: [
  63. {
  64. id: '1',
  65. type: 'percentiles',
  66. field: '@load_time',
  67. settings: {
  68. percents: [1,2,3,4]
  69. }
  70. }
  71. ],
  72. bucketAggs: [
  73. {type: 'date_histogram', field: '@timestamp', id: '3'}
  74. ],
  75. }, 100, 1000);
  76. var firstLevel = query.aggs["3"];
  77. expect(firstLevel.aggs["1"].percentiles.field).to.be("@load_time");
  78. expect(firstLevel.aggs["1"].percentiles.percents).to.eql([1,2,3,4]);
  79. });
  80. it('with filters aggs', function() {
  81. var query = builder.build({
  82. metrics: [{type: 'count', id: '1'}],
  83. timeField: '@timestamp',
  84. bucketAggs: [
  85. {
  86. id: '2',
  87. type: 'filters',
  88. settings: {
  89. filters: [
  90. {query: '@metric:cpu' },
  91. {query: '@metric:logins.count' },
  92. ]
  93. }
  94. },
  95. {type: 'date_histogram', field: '@timestamp', id: '4'}
  96. ],
  97. });
  98. expect(query.aggs["2"].filters.filters["@metric:cpu"].query.query_string.query).to.be("@metric:cpu");
  99. expect(query.aggs["2"].filters.filters["@metric:logins.count"].query.query_string.query).to.be("@metric:logins.count");
  100. expect(query.aggs["2"].aggs["4"].date_histogram.field).to.be("@timestamp");
  101. });
  102. it('with raw_document metric', function() {
  103. var query = builder.build({
  104. metrics: [{type: 'raw_document', id: '1'}],
  105. timeField: '@timestamp',
  106. bucketAggs: [],
  107. });
  108. expect(query.size).to.be(500);
  109. });
  110. });