diff --git a/src/core_plugins/kbn_vislib_vis_types/public/controls/point_series/value_axes.html b/src/core_plugins/kbn_vislib_vis_types/public/controls/point_series/value_axes.html index 13369ae7f5fa..d23b7456b54a 100644 --- a/src/core_plugins/kbn_vislib_vis_types/public/controls/point_series/value_axes.html +++ b/src/core_plugins/kbn_vislib_vis_types/public/controls/point_series/value_axes.html @@ -21,6 +21,7 @@ >
+
diff --git a/src/ui/public/vislib/lib/axis/axis_labels.js b/src/ui/public/vislib/lib/axis/axis_labels.js index 376e92fd53b4..a71969812175 100644 --- a/src/ui/public/vislib/lib/axis/axis_labels.js +++ b/src/ui/public/vislib/lib/axis/axis_labels.js @@ -100,7 +100,7 @@ export function VislibAxisLabelsProvider() { const el = $(config.get('rootEl')).find(config.get('elSelector')); const maxSize = config.isHorizontal() ? el.width() : el.height(); const scaleRange = self.axisScale.scale.range(); - const scaleWidth = scaleRange[scaleRange.length - 1] - scaleRange[0]; + const scaleWidth = Math.abs(scaleRange[scaleRange.length - 1] - scaleRange[0]); const scaleStartPad = .5 * (maxSize - scaleWidth); selection.selectAll('.tick text') diff --git a/test/functional/apps/visualize/_area_chart.js b/test/functional/apps/visualize/_area_chart.js index 02997f20387e..d114ca9edabc 100644 --- a/test/functional/apps/visualize/_area_chart.js +++ b/test/functional/apps/visualize/_area_chart.js @@ -28,7 +28,7 @@ export default function ({ getService, getPageObjects }) { describe('area charts', function indexPatternCreation() { const vizName1 = 'Visualization AreaChart Name Test'; - before(async function () { + const initAreaChart = async () => { const fromTime = '2015-09-19 06:31:44.000'; const toTime = '2015-09-23 18:31:44.000'; @@ -52,7 +52,9 @@ export default function ({ getService, getPageObjects }) { log.debug('intervalValue = ' + intervalValue); expect(intervalValue).to.be('Auto'); return PageObjects.visualize.clickGo(); - }); + }; + + before(initAreaChart); it('should save and load with special characters', async function () { const vizNamewithSpecialChars = vizName1 + '/?&=%'; @@ -153,5 +155,79 @@ export default function ({ getService, getPageObjects }) { const sideEditorExists = await PageObjects.visualize.getSideEditorExists(); expect(sideEditorExists).to.be(false); }); + + describe('switch between Y axis scale types', () => { + before(initAreaChart); + const axisId = 'ValueAxis-1'; + + it('should show ticks on selecting log scale', async () => { + await PageObjects.visualize.clickMetricsAndAxes(); + await PageObjects.visualize.clickYAxisOptions(axisId); + await PageObjects.visualize.selectYAxisScaleType(axisId, 'log'); + await PageObjects.visualize.clickYAxisAdvancedOptions(axisId); + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '2', '3', '5', '7', '10', '20', '30', '50', '70', '100', '200', + '300', '500', '700', '1,000', '2,000', '3,000', '5,000', '7,000', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show filtered ticks on selecting log scale', async () => { + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '2', '3', '5', '7', '10', '20', '30', '50', '70', '100', '200', + '300', '500', '700', '1,000', '2,000', '3,000', '5,000', '7,000', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show ticks on selecting square root scale', async () => { + await PageObjects.visualize.selectYAxisScaleType(axisId, 'square root'); + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '0', '200', '400', '600', '800', '1,000', '1,200', '1,400', '1,600', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show filtered ticks on selecting square root scale', async () => { + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '200', '400', '600', '800', '1,000', '1,200', '1,400', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show ticks on selecting linear scale', async () => { + await PageObjects.visualize.selectYAxisScaleType(axisId, 'linear'); + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + log.debug(labels); + const expectedLabels = [ + '0', '200', '400', '600', '800', '1,000', '1,200', '1,400', '1,600', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show filtered ticks on selecting linear scale', async () => { + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '200', '400', '600', '800', '1,000', '1,200', '1,400', + ]; + expect(labels).to.eql(expectedLabels); + }); + }); }); } diff --git a/test/functional/apps/visualize/_line_chart.js b/test/functional/apps/visualize/_line_chart.js index 3c2971f1ce55..ac03f983275f 100644 --- a/test/functional/apps/visualize/_line_chart.js +++ b/test/functional/apps/visualize/_line_chart.js @@ -27,7 +27,7 @@ export default function ({ getService, getPageObjects }) { describe('line charts', function () { const vizName1 = 'Visualization LineChart'; - before(async function () { + const initLineChart = async function () { const fromTime = '2015-09-19 06:31:44.000'; const toTime = '2015-09-23 18:31:44.000'; @@ -47,7 +47,9 @@ export default function ({ getService, getPageObjects }) { log.debug('switch from Rows to Columns'); await PageObjects.visualize.clickColumns(); await PageObjects.visualize.clickGo(); - }); + }; + + before(initLineChart); afterEach(async () => { await PageObjects.visualize.closeInspector(); @@ -120,5 +122,79 @@ export default function ({ getService, getPageObjects }) { await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForVisualization(); }); + + describe('switch between Y axis scale types', () => { + before(initLineChart); + const axisId = 'ValueAxis-1'; + + it('should show ticks on selecting log scale', async () => { + await PageObjects.visualize.clickMetricsAndAxes(); + await PageObjects.visualize.clickYAxisOptions(axisId); + await PageObjects.visualize.selectYAxisScaleType(axisId, 'log'); + await PageObjects.visualize.clickYAxisAdvancedOptions(axisId); + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '2', '3', '5', '7', '10', '20', '30', '50', '70', '100', '200', + '300', '500', '700', '1,000', '2,000', '3,000', '5,000', '7,000', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show filtered ticks on selecting log scale', async () => { + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '2', '3', '5', '7', '10', '20', '30', '50', '70', '100', '200', + '300', '500', '700', '1,000', '2,000', '3,000', '5,000', '7,000', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show ticks on selecting square root scale', async () => { + await PageObjects.visualize.selectYAxisScaleType(axisId, 'square root'); + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '0', '2,000', '4,000', '6,000', '8,000', '10,000', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show filtered ticks on selecting square root scale', async () => { + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '2,000', '4,000', '6,000', '8,000', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show ticks on selecting linear scale', async () => { + await PageObjects.visualize.selectYAxisScaleType(axisId, 'linear'); + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + log.debug(labels); + const expectedLabels = [ + '0', '2,000', '4,000', '6,000', '8,000', '10,000', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show filtered ticks on selecting linear scale', async () => { + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '2,000', '4,000', '6,000', '8,000', + ]; + expect(labels).to.eql(expectedLabels); + }); + }); }); } diff --git a/test/functional/apps/visualize/_vertical_bar_chart.js b/test/functional/apps/visualize/_vertical_bar_chart.js index 974cb09f4807..c6cfbd2e02a0 100644 --- a/test/functional/apps/visualize/_vertical_bar_chart.js +++ b/test/functional/apps/visualize/_vertical_bar_chart.js @@ -115,6 +115,80 @@ export default function ({ getService, getPageObjects }) { expect(data).to.eql(expectedChartData); }); + describe('switch between Y axis scale types', () => { + before(initBarChart); + const axisId = 'ValueAxis-1'; + + it('should show ticks on selecting log scale', async () => { + await PageObjects.visualize.clickMetricsAndAxes(); + await PageObjects.visualize.clickYAxisOptions(axisId); + await PageObjects.visualize.selectYAxisScaleType(axisId, 'log'); + await PageObjects.visualize.clickYAxisAdvancedOptions(axisId); + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '2', '3', '5', '7', '10', '20', '30', '50', '70', '100', '200', + '300', '500', '700', '1,000', '2,000', '3,000', '5,000', '7,000', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show filtered ticks on selecting log scale', async () => { + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '2', '3', '5', '7', '10', '20', '30', '50', '70', '100', '200', + '300', '500', '700', '1,000', '2,000', '3,000', '5,000', '7,000', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show ticks on selecting square root scale', async () => { + await PageObjects.visualize.selectYAxisScaleType(axisId, 'square root'); + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '0', '200', '400', '600', '800', '1,000', '1,200', '1,400', '1,600', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show filtered ticks on selecting square root scale', async () => { + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '200', '400', '600', '800', '1,000', '1,200', '1,400', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show ticks on selecting linear scale', async () => { + await PageObjects.visualize.selectYAxisScaleType(axisId, 'linear'); + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + log.debug(labels); + const expectedLabels = [ + '0', '200', '400', '600', '800', '1,000', '1,200', '1,400', '1,600', + ]; + expect(labels).to.eql(expectedLabels); + }); + + it('should show filtered ticks on selecting linear scale', async () => { + await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true); + await PageObjects.visualize.clickGo(); + const labels = await PageObjects.visualize.getYAxisLabels(); + const expectedLabels = [ + '200', '400', '600', '800', '1,000', '1,200', '1,400', + ]; + expect(labels).to.eql(expectedLabels); + }); + }); + describe('vertical bar with split series', function () { before(initBarChart); diff --git a/test/functional/page_objects/visualize_page.js b/test/functional/page_objects/visualize_page.js index 3d3a37a4743e..b694e53c13f3 100644 --- a/test/functional/page_objects/visualize_page.js +++ b/test/functional/page_objects/visualize_page.js @@ -599,11 +599,29 @@ export function VisualizePageProvider({ getService, getPageObjects }) { await testSubjects.click('visEditorTabadvanced'); } + async clickYAxisOptions(axisId) { + await testSubjects.click(`toggleYAxisOptions-${axisId}`); + } + async clickYAxisAdvancedOptions(axisId) { + await testSubjects.click(`toggleYAxisAdvancedOptions-${axisId}`); + } + + async changeYAxisFilterLabelsCheckbox(axisId, enabled) { + const selector = `yAxisFilterLabelsCheckbox-${axisId}`; + enabled ? await this.checkCheckbox(selector) : await this.uncheckCheckbox(selector); + } + async selectChartMode(mode) { const selector = await find.byCssSelector(`#seriesMode0 > option[label="${mode}"]`); await selector.click(); } + async selectYAxisScaleType(axisId, scaleType) { + const selectElement = await testSubjects.find(`scaleSelectYAxis-${axisId}`); + const selector = await selectElement.findByCssSelector(`option[label="${scaleType}"]`); + await selector.click(); + } + async clickData() { await testSubjects.click('visualizeEditDataLink'); }