Skip to content

Commit

Permalink
Added boolean and date Painless scripted field types
Browse files Browse the repository at this point in the history
  • Loading branch information
LeeDr committed Dec 15, 2016
1 parent 75eb350 commit 1854ee3
Show file tree
Hide file tree
Showing 5 changed files with 257 additions and 23 deletions.
11 changes: 11 additions & 0 deletions test/functional/apps/management/_kibana_settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,15 @@ bdd.describe('creating and deleting default index', function describeIndexTests(
expect(advancedSetting).to.be('America/Phoenix');
});
});

bdd.after(function () {
return PageObjects.settings.clickKibanaSettings()
.then(function TestCallSetAdvancedSettingsForTimezone() {
PageObjects.common.saveScreenshot('Settings-advanced-tab');
PageObjects.common.debug('calling setAdvancedSetting');
return PageObjects.settings.setAdvancedSettings('dateFormat:tz', 'UTC');
});
});


});
190 changes: 178 additions & 12 deletions test/functional/apps/management/_scripted_fields.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
// Tests for 3 scripted fields;
// Tests for 5 scripted fields;
// 1. Lucene expression (number type)
// 2. Painless (number type)
// 3. Painless (string type)
// 3. Painless (boolean type)
// 3. Painless (date type)
//
// Each of these scripted fields has 4 tests (12 tests total);
// 1. Create scripted field
Expand All @@ -19,24 +21,32 @@ import {

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

bdd.before(async function () {
await PageObjects.remote.setWindowSize(1200,800);
// delete .kibana index and then wait for Kibana to re-create it
await esClient.deleteAndUpdateConfigDoc({'dateFormat:tz':'UTC'});
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndicies();
await PageObjects.settings.createIndexPattern();
await esClient.updateConfigDoc({'dateFormat:tz':'UTC'});
});

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

const scriptedExpressionFieldName = 'ram_expr1';

bdd.it('should create scripted field', async function () {
// delete .kibana index and then wait for Kibana to re-create it
await esClient.deleteAndUpdateConfigDoc({'dateFormat:tz':'UTC'});
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndicies();
await PageObjects.settings.createIndexPattern();
const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount());
await PageObjects.settings.clickScriptedFieldsTab();
await PageObjects.common.debug('add scripted field');
await PageObjects.settings
.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');
expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be(startingCount + 1);
});
});

Expand All @@ -58,6 +68,7 @@ bdd.describe('creating and using Lucence expression scripted fields', function d
const rowData = await PageObjects.discover.getDocTableIndex(1);
expect(rowData).to.be('September 18th 2015, 18:20:57.916 18');
});

});

bdd.it('should filter by scripted field value in Discover', async function () {
Expand All @@ -83,7 +94,7 @@ bdd.describe('creating and using Lucence expression scripted fields', function d
await PageObjects.visualize.waitForVisualization();
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');
var data = await PageObjects.visualize.getDataTableData();
const 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);
Expand All @@ -95,18 +106,18 @@ bdd.describe('creating and using Lucence expression scripted fields', function d

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

const scriptedExpressionFieldName = 'ram_expr1';
const scriptedPainlessFieldName = 'ram_Pain1';

bdd.it('should create scripted field', async function () {
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndicies();
const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount());
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');
expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be(startingCount + 1);
});
});

Expand Down Expand Up @@ -153,7 +164,7 @@ bdd.describe('creating and using Painless numeric scripted fields', function des
await PageObjects.visualize.waitForVisualization();
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');
var data = await PageObjects.visualize.getDataTableData();
const 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);
Expand All @@ -170,13 +181,14 @@ bdd.describe('creating and using Painless string scripted fields', function desc
bdd.it('should create scripted field', async function () {
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndicies();
const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount());
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\'}');
await PageObjects.common.try(async function() {
expect(await PageObjects.settings.getScriptedFieldsTabCount()).to.be('3');
expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be(startingCount + 1);
});
});

Expand All @@ -201,7 +213,7 @@ bdd.describe('creating and using Painless string scripted fields', function desc
});
});

bdd.it('should filter by expression scripted field value in Discover', async function () {
bdd.it('should filter by scripted field value in Discover', async function () {
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.common.debug('filter by "bad" in the expanded scripted field list');
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName2, 'bad');
Expand All @@ -220,13 +232,167 @@ bdd.describe('creating and using Painless string scripted fields', function desc
await PageObjects.visualize.waitForVisualization();
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');
var data = await PageObjects.visualize.getDataTableData();
const 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);
expect(data.trim().split('\n')).to.eql([ 'good 359', 'bad 27' ]);
});

});


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

const scriptedPainlessFieldName2 = 'painBool';

bdd.it('should create scripted field', async function () {
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndicies();
const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount());
await PageObjects.settings.clickScriptedFieldsTab();
await PageObjects.common.debug('add scripted field');
await PageObjects.settings
.addScriptedField(scriptedPainlessFieldName2, 'painless', 'boolean', null, '1',
'doc[\'response.raw\'].value == \'200\'');
await PageObjects.common.try(async function() {
expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be(startingCount + 1);
});
});

bdd.it('should see 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();
await PageObjects.common.try(async function() {
const rowData = await PageObjects.discover.getDocTableIndex(1);
expect(rowData).to.be('September 18th 2015, 18:20:57.916 true');

});
});

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

bdd.it('should visualize scripted field in vertical bar chart', async function () {
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');
const 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);
expect(data.trim().split('\n')).to.eql([ 'true 359', 'false 27' ]);
});

});


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

const scriptedPainlessFieldName2 = 'painDate';

bdd.it('should create scripted field', async function () {
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndicies();
const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount());
await PageObjects.settings.clickScriptedFieldsTab();
await PageObjects.common.debug('add scripted field');
await PageObjects.settings
.addScriptedField(scriptedPainlessFieldName2, 'painless', 'date', {format: 'Date', datePattern: 'YYYY-MM-DD HH:00'}, '1',
'doc[\'utc_time\'].value + (1000) * 60 * 60');
await PageObjects.common.try(async function() {
expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be(startingCount + 1);
});
});

bdd.it('should see scripted field value in Discover', async function () {
const fromTime = '2015-09-17 19:22:00.000';
const toTime = '2015-09-18 07:00:00.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();
await PageObjects.common.try(async function() {
const rowData = await PageObjects.discover.getDocTableIndex(1);
expect(rowData).to.be('September 18th 2015, 06:52:55.953 2015-09-18 07:00');
});
});

bdd.it('should filter by scripted field value in Discover', async function () {
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.common.debug('filter by "2015-09-17 23:00" in the expanded scripted field list');
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName2, '2015-09-17 23:00');
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
expect(await PageObjects.discover.getHitCount()).to.be('1');
});
await PageObjects.discover.removeAllFilters();
});

bdd.it('should visualize scripted field in vertical bar chart', async function () {
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');
const 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);
expect(data.trim().split('\n')).to.eql([
'2015-09-17 20:00 1',
'2015-09-17 21:00 1',
'2015-09-17 23:00 1',
'2015-09-18 00:00 1',
'2015-09-18 03:00 1',
'2015-09-18 04:00 1',
'2015-09-18 04:00 1',
'2015-09-18 04:00 1',
'2015-09-18 04:00 1',
'2015-09-18 05:00 1',
'2015-09-18 05:00 1',
'2015-09-18 05:00 1',
'2015-09-18 05:00 1',
'2015-09-18 06:00 1',
'2015-09-18 06:00 1',
'2015-09-18 06:00 1',
'2015-09-18 06:00 1',
'2015-09-18 07:00 1',
'2015-09-18 07:00 1',
'2015-09-18 07:00 1'
]);
});

});
13 changes: 6 additions & 7 deletions test/functional/apps/management/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@ bdd.describe('settings app', function () {

// on setup, we create an settingsPage instance
// that we will use for all the tests
bdd.before(function () {
return scenarioManager.loadIfEmpty('makelogs');
bdd.before(async function () {
await scenarioManager.unload('logstashFunctional');
await scenarioManager.loadIfEmpty('makelogs');
});

bdd.after(function () {
return scenarioManager.unload('makelogs')
.then(function () {
return esClient.delete('.kibana');
});
bdd.after(async function () {
await scenarioManager.unload('makelogs');
await esClient.delete('.kibana');
});

require('./_initial_state');
Expand Down
8 changes: 6 additions & 2 deletions test/support/page_objects/discover_page.js
Original file line number Diff line number Diff line change
Expand Up @@ -302,13 +302,17 @@ export default class DiscoverPage {

clickFieldListPlusFilter(field, value) {
// this method requires the field details to be open from clickFieldListItem()
return PageObjects.common.findTestSubject('plus-' + field + '-' + value)
// findTestSubject doesn't handle spaces in the data-test-subj value
return this.findTimeout
.findByCssSelector('i[data-test-subj="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)
// findTestSubject doesn't handle spaces in the data-test-subj value
return this.findTimeout
.findByCssSelector('i[data-test-subj="minus-' + field + '-' + value + '"]')
.click();
}

Expand Down
Loading

0 comments on commit 1854ee3

Please sign in to comment.