Skip to content

Commit

Permalink
[WIP] new scripted field tests
Browse files Browse the repository at this point in the history
  • Loading branch information
LeeDr committed Nov 29, 2016
1 parent 31a6cba commit 6440101
Show file tree
Hide file tree
Showing 8 changed files with 385 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ <h5 ng-show="!field.details.error">Quick Count <kbn-info info="Top 5 values base
<div>
<span ng-show="field.filterable" class="pull-right">
<i aria-hidden="true" class="fa fa-search-minus pull-right discover-field-details-filter"
ng-click="updateFilterInQuery(field, bucket.value, '-')"></i>
ng-click="updateFilterInQuery(field, bucket.value, '-')" data-test-subj="minus-{{::field.name}}-{{::bucket.display}}"></i>
<i aria-hidden="true" class="fa fa-search-plus pull-right discover-field-details-filter"
ng-click="updateFilterInQuery(field, bucket.value, '+')"></i>
ng-click="updateFilterInQuery(field, bucket.value, '+')" data-test-subj="plus-{{::field.name}}-{{::bucket.display}}"></i>
</span>
<div css-truncate css-truncate-expandable="true" class="discover-field-details-value" title="{{::bucket.display}}">
{{::bucket.display}} <i ng-show="bucket.display === ''">Empty string</i>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@

<!-- tab list -->
<ul class="nav nav-tabs">
<li class="kbn-management-tab" ng-class="{ active: state.tab === editSection.index }" ng-repeat="editSection in editSections">
<a ng-click="changeTab(editSection)">
<li class="kbn-management-tab" ng-class="{ active: state.tab === editSection.index }" ng-repeat="editSection in editSections" data-test-subj="li-{{ editSection.index }}">
<a ng-click="changeTab(editSection)" data-test-subj="tab-{{ editSection.index }}" >
{{ editSection.title }}
<small>({{ editSection.count }})</small>
</a>
Expand Down
8 changes: 4 additions & 4 deletions src/ui/public/filter_bar/filter_bar.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,20 @@
<span ng-if="!filter.meta.alias">"{{ filter.meta.value }}"</span>
</div>
<div class="filter-actions">
<a class="action filter-toggle" ng-click="toggleFilter(filter)">
<a class="action filter-toggle" ng-click="toggleFilter(filter)" data-test-subj="disableFilter-{{ filter.meta.key }}">
<i ng-show="filter.meta.disabled" class="fa fa-fw fa-square-o disabled"></i>
<i ng-hide="filter.meta.disabled" class="fa fa-fw fa-check-square-o enabled"></i>
</a>
<a class="action filter-pin" ng-click="pinFilter(filter)">
<a class="action filter-pin" ng-click="pinFilter(filter)" data-test-subj="pinFilter-{{ filter.meta.key }}">
<i ng-show="filter.$state.store == 'globalState'" class="fa fa-fw fa-thumb-tack pinned"></i>
<i ng-hide="filter.$state.store == 'globalState'" class="fa fa-fw fa-thumb-tack fa-rotate-270 unpinned"></i>
</a>
<a class="action filter-invert" ng-click="invertFilter(filter)">
<a class="action filter-invert" ng-click="invertFilter(filter)" data-test-subj="invertFilter-{{ filter.meta.key }}">
<i ng-show="filter.meta.negate" class="fa fa-fw fa-search-plus negative"></i>
<i ng-hide="filter.meta.negate" class="fa fa-fw fa-search-minus positive"></i>
</a>
<a class="action filter-remove" ng-click="removeFilter(filter)">
<i class="fa fa-fw fa-trash"></i>
<i class="fa fa-fw fa-trash" data-test-subj="removeFilter-{{ filter.meta.key }}"></i>
</a>
<a class="action filter-edit" ng-click="startEditingFilter(filter)">
<i class="fa fa-fw fa-edit"></i>
Expand Down
220 changes: 220 additions & 0 deletions test/functional/apps/management/_scripted_fields.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@

import expect from 'expect.js';

import {
bdd,
scenarioManager,
esClient
} from '../../../support';

import PageObjects from '../../../support/page_objects';

bdd.describe('creating and using scripted fields', function describeIndexTests() {

const scriptedExpressionFieldName = 'ram_expr1';

bdd.it('should create Lucence expression scripted field', async function () {
// delete .kibana index and then wait for Kibana to re-create it
await esClient.deleteAndUpdateConfigDoc();
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndicies();
await PageObjects.settings.createIndexPattern();
await PageObjects.settings.clickScriptedFieldsTab();
await PageObjects.common.debug('add scripted field');
await PageObjects.settings
// .addScriptedField(scriptedExpressionFieldName, 'painless', 'number', null, '1', 'doc[\'machine.ram\'].value / (1024 * 1024 * 1024)');
.addScriptedField(scriptedExpressionFieldName,
'expression', 'number', null, '1', 'doc[\'machine.ram\'].value / (1024 * 1024 * 1024)'
);
await PageObjects.common.try(async function() {
expect(await PageObjects.settings.getScriptedFieldsTabCount()).to.be('1');
});
});

bdd.it('should see Lucence expression scripted field value in Discover', async function () {
const fromTime = '2015-09-17 06:31:44.000';
const toTime = '2015-09-18 18:31:44.000';
await PageObjects.common.navigateToApp('discover');
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
await PageObjects.discover.clickFieldListItem(scriptedExpressionFieldName);
await PageObjects.common.try(async function() {
await PageObjects.discover.clickFieldListItemAdd(scriptedExpressionFieldName);
});
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
const rowData = await PageObjects.discover.getDocTableIndex(1);
expect(rowData).to.be('September 18th 2015, 16:08:20.320 30');
});

bdd.it('should filter by expression scripted field value in Discover', async function () {
await PageObjects.discover.clickFieldListItem(scriptedExpressionFieldName);
await PageObjects.common.debug('filter by the first value (14) in the expanded scripted field list');
await PageObjects.discover.clickFieldListPlusFilter(scriptedExpressionFieldName, '14');
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
expect(await PageObjects.discover.getHitCount()).to.be('29');
});
});

bdd.it('should visualize Lucence expression scripted field in vertical bar chart', async function () {
const expectedChartValues = [ 28, 28, 24, 23, 22, 22, 20, 20, 19, 18, 18, 17,
16, 15, 14, 13, 12, 12, 9, 9
];
await PageObjects.discover.removeAllFilters();
await PageObjects.discover.clickFieldListItem(scriptedExpressionFieldName);
await PageObjects.discover.clickFieldListItemVisualize(scriptedExpressionFieldName);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
// const data = await PageObjects.visualize.getBarChartData();
// await PageObjects.common.debug('data=' + data);
// await PageObjects.common.debug('data.length=' + data.length);
// await PageObjects.common.saveScreenshot('Visualize-vertical-bar-chart');
// expect(data).to.eql(expectedChartValues);
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');
var data = await PageObjects.visualize.getDataTableData();
await PageObjects.common.debug('getDataTableData = ' + data.split('\n'));
await PageObjects.common.debug('data=' + data);
await PageObjects.common.debug('data.length=' + data.length);
await PageObjects.common.saveScreenshot('Visualize-vertical-bar-chart');
expect(data.trim().split('\n')).to.eql(expectedChartValues);
});

// ///////////////////////////////////////////////////
const scriptedPainlessFieldName = 'ram_Pain1';

bdd.it('should create Painless expression scripted field', async function () {
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndicies();
await PageObjects.settings.clickScriptedFieldsTab();
await PageObjects.common.debug('add scripted field');
await PageObjects.settings
.addScriptedField(scriptedPainlessFieldName, 'painless', 'number', null, '1', 'doc[\'machine.ram\'].value / (1024 * 1024 * 1024)');
await PageObjects.common.try(async function() {
expect(await PageObjects.settings.getScriptedFieldsTabCount()).to.be('2');
});
});

bdd.it('should see Lucence expression scripted field value in Discover', async function () {
const fromTime = '2015-09-17 06:31:44.000';
const toTime = '2015-09-18 18:31:44.000';
await PageObjects.common.navigateToApp('discover');
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName);
await PageObjects.common.try(async function() {
await PageObjects.discover.clickFieldListItemAdd(scriptedPainlessFieldName);
});
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
const rowData = await PageObjects.discover.getDocTableIndex(1);
expect(rowData).to.be('September 18th 2015, 16:08:20.320 30');
});

bdd.it('should filter by expression scripted field value in Discover', async function () {
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName);
await PageObjects.common.debug('filter by the first value (14) in the expanded scripted field list');
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName, '14');
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
expect(await PageObjects.discover.getHitCount()).to.be('29');
});
});

bdd.it('should visualize Lucence expression scripted field in vertical bar chart', async function () {
const expectedChartValues = [ 28, 28, 24, 23, 22, 22, 20, 20, 19, 18, 18, 17,
16, 15, 14, 13, 12, 12, 9, 9
];
await PageObjects.discover.removeAllFilters();
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName);
await PageObjects.discover.clickFieldListItemVisualize(scriptedPainlessFieldName);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
// const data = await PageObjects.visualize.getBarChartData();
// await PageObjects.common.debug('data=' + data);
// await PageObjects.common.debug('data.length=' + data.length);
// await PageObjects.common.saveScreenshot('Visualize-vertical-bar-chart');
// expect(data).to.eql(expectedChartValues);
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');
var data = await PageObjects.visualize.getDataTableData();
await PageObjects.common.debug('getDataTableData = ' + data.split('\n'));
await PageObjects.common.debug('data=' + data);
await PageObjects.common.debug('data.length=' + data.length);
await PageObjects.common.saveScreenshot('Visualize-vertical-bar-chart');
expect(data.trim().split('\n')).to.eql(expectedChartValues);
});

// ///////////////////////////////////////////////////
const scriptedPainlessFieldName2 = 'painString';

bdd.it('should create Painless expression scripted field', async function () {
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndicies();
await PageObjects.settings.clickScriptedFieldsTab();
await PageObjects.common.debug('add scripted field');
await PageObjects.settings
.addScriptedField(scriptedPainlessFieldName2, 'painless', 'string', null, '1',
'if (doc[\'response.raw\'].value == \'200\') { return \'good\'} else { return \'bad\'}');
// 'if (doc[\'response.raw\'].value === 200) { return \'good\'} else { return \'bad\'}');
await PageObjects.common.try(async function() {
expect(await PageObjects.settings.getScriptedFieldsTabCount()).to.be('3');
});
});

bdd.it('should see Lucence expression scripted field value in Discover', async function () {
const fromTime = '2015-09-17 06:31:44.000';
const toTime = '2015-09-18 18:31:44.000';
await PageObjects.common.navigateToApp('discover');
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.common.try(async function() {
await PageObjects.discover.clickFieldListItemAdd(scriptedPainlessFieldName2);
});
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
const rowData = await PageObjects.discover.getDocTableIndex(1);
expect(rowData).to.be('September 18th 2015, 16:08:20.320 good');
});

// bdd.it('should filter by expression scripted field value in Discover', async function () {
// await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
// await PageObjects.common.debug('filter by the first value (14) in the expanded scripted field list');
// await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName2, 'bad');
// await PageObjects.header.isGlobalLoadingIndicatorHidden();
// await PageObjects.visualize.waitForVisualization();
// await PageObjects.common.try(async function() {
// expect(await PageObjects.discover.getHitCount()).to.be('29');
// });
// await PageObjects.discover.removeAllFilters();
// });

bdd.it('should visualize Lucence expression scripted field in vertical bar chart', async function () {
const expectedChartValues = [ 334, 25 ];
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.discover.clickFieldListItemVisualize(scriptedPainlessFieldName2);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');
var data = await PageObjects.visualize.getDataTableData();
await PageObjects.common.debug('getDataTableData = ' + data.split('\n'));
await PageObjects.common.debug('data=' + data);
await PageObjects.common.debug('data.length=' + data.length);
// await PageObjects.common.saveScreenshot('Visualize-vertical-bar-chart');
expect(data.trim().split('\n')).to.eql(expectedChartValues);
});



});
1 change: 1 addition & 0 deletions test/functional/apps/management/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ bdd.describe('settings app', function () {
require('./_index_pattern_results_sort');
require('./_index_pattern_popularity');
require('./_kibana_settings');
require('./_scripted_fields');
});
51 changes: 51 additions & 0 deletions test/support/page_objects/discover_page.js
Original file line number Diff line number Diff line change
Expand Up @@ -249,4 +249,55 @@ export default class DiscoverPage {
.catch(() => false);
}

clickFieldListItem(field) {
return this.findTimeout
.findByCssSelector('li[attr-field="' + field + '"]').click();
}

clickFieldListItemAdd(field) {
return this.findTimeout
.findByCssSelector('li[attr-field="' + field + '"] > div > button').click();
}

clickFieldListItemVisualize(field) {
return this.findTimeout
.findByCssSelector('li[attr-field="' + field + '"] > a').click();
}

clickFieldListPlusFilter(field, value) {
// this method requires the field details to be open from clickFieldListItem()
return PageObjects.common.findTestSubject('plus-' + field + '-' + value)
.click();
}

clickFieldListMinusFilter(field, value) {
// this method requires the field details to be open from clickFieldListItem()
return PageObjects.common.findTestSubject('minus-' + field + '-' + value)
.click();
}

// this doesn't work yet. Seems like we have to mouse over first to get it to appear?
removeFilter(field) {
return PageObjects.common.findTestSubject('removeFilter-' + field)
.click();
}

// this doesn't work yet. Seems like we have to mouse over first to get it to appear?
disableFilter(field) {
return PageObjects.common.findTestSubject('disableFilter-' + field)
.click();
}

removeAllFilters() {
return this.findTimeout
.findByCssSelector('a[ng-click="showFilterActions = !showFilterActions"]')
.click()
.then(() => {
return this.findTimeout
.findByCssSelector('a[ng-click="removeAll()"]')
.click();
});
}


}
Loading

0 comments on commit 6440101

Please sign in to comment.