diff options
author | Phil Hughes <me@iamphill.com> | 2017-04-18 11:57:54 +0100 |
---|---|---|
committer | Phil Hughes <me@iamphill.com> | 2017-04-18 11:57:54 +0100 |
commit | 5d8891fb85a4646557e2f478c6c08c997868c8fb (patch) | |
tree | 1611428d0a18ebfe8b3c05a7de09ff0f2560ff47 | |
parent | da2a7823cc6b4db1bcd09153edac64d1cc2cb463 (diff) | |
download | gitlab-ce-5d8891fb85a4646557e2f478c6c08c997868c8fb.tar.gz |
Added tests
4 files changed, 128 insertions, 12 deletions
diff --git a/app/assets/javascripts/monitoring/deployments.js b/app/assets/javascripts/monitoring/deployments.js index c41ec73b5f3..a6d7a1fbd7c 100644 --- a/app/assets/javascripts/monitoring/deployments.js +++ b/app/assets/javascripts/monitoring/deployments.js @@ -30,9 +30,9 @@ export default class Deployments { this.data = []; data.deployments.forEach((deployment) => { - const coeff = 1000 * 60; + const minInSeconds = 1000 * 60; let time = new Date(deployment.created_at); - time = new Date(Math.round(time.getTime() / coeff) * coeff); + time = new Date(Math.round(time.getTime() / minInSeconds) * minInSeconds); time.setSeconds(this.chartData[0].time.getSeconds()); const xPos = Math.floor(this.x(time)); diff --git a/app/assets/javascripts/monitoring/prometheus_graph.js b/app/assets/javascripts/monitoring/prometheus_graph.js index 22e08d5ffe5..03d47c052c8 100644 --- a/app/assets/javascripts/monitoring/prometheus_graph.js +++ b/app/assets/javascripts/monitoring/prometheus_graph.js @@ -222,15 +222,6 @@ class PrometheusGraph { d3.selectAll(`${prometheusGraphContainer} .circle-metric`).remove(); d3.selectAll(`${prometheusGraphContainer} .rect-text-metric:not(.deploy-info-rect)`).remove(); - chart.append('circle') - .attr('class', 'circle-metric') - .attr('fill', graphSpecifics.line_color) - .attr('cx', currentTimeCoordinate) - .attr('cy', y(currentData.value)) - .attr('r', this.commonGraphProperties.circle_radius_metric); - - if (shouldHideTextMetric) return; - chart.append('line') .attr('class', 'selected-metric-line') .attr({ @@ -240,6 +231,15 @@ class PrometheusGraph { y2: maxValueMetric, }); + chart.append('circle') + .attr('class', 'circle-metric') + .attr('fill', graphSpecifics.line_color) + .attr('cx', currentTimeCoordinate) + .attr('cy', y(currentData.value)) + .attr('r', this.commonGraphProperties.circle_radius_metric); + + if (shouldHideTextMetric) return; + // The little box with text const rectTextMetric = chart.append('svg') .attr('class', 'rect-text-metric') diff --git a/spec/javascripts/fixtures/environments/metrics.html.haml b/spec/javascripts/fixtures/environments/metrics.html.haml index e104c536fe9..858fb4d45ec 100644 --- a/spec/javascripts/fixtures/environments/metrics.html.haml +++ b/spec/javascripts/fixtures/environments/metrics.html.haml @@ -1,4 +1,4 @@ -%div +#js-metrics{ data: { endpoint: '/test' } } %svg.graph-line-shadow .top-area .row diff --git a/spec/javascripts/monitoring/deployments_spec.js b/spec/javascripts/monitoring/deployments_spec.js new file mode 100644 index 00000000000..c0e7fc9fb0e --- /dev/null +++ b/spec/javascripts/monitoring/deployments_spec.js @@ -0,0 +1,116 @@ +import d3 from 'd3'; +import PrometheusGraph from '~/monitoring/prometheus_graph'; +import Deployments from '~/monitoring/deployments'; +import { prometheusMockData } from './prometheus_mock_data'; + +fdescribe('Metrics deployments', () => { + const fixtureName = 'static/environments/metrics.html.raw'; + let deployment; + let prometheusGraph; + + const createDeploymentMockData = (done) => { + return { + deployments: [{ + id: 1, + created_at: deployment.chartData[10].time, + sha: 'testing', + tag: false, + ref: { + name: 'testing', + }, + }, { + id: 2, + created_at: deployment.chartData[15].time, + sha: '', + tag: true, + ref: { + name: 'tag', + }, + }], + }; + }; + + const graphElement = () => document.querySelector('.prometheus-graph'); + + preloadFixtures(fixtureName); + + beforeEach((done) => { + // Setup the view + loadFixtures(fixtureName); + + d3.selectAll('.prometheus-graph') + .append('g') + .attr('class', 'graph-container'); + + prometheusGraph = new PrometheusGraph(); + deployment = new Deployments(1000, 500); + + spyOn(prometheusGraph, 'init'); + spyOn($, 'ajax').and.callFake(() => { + const d = $.Deferred(); + d.resolve(createDeploymentMockData()); + + setTimeout(done); + + return d.promise(); + }); + + prometheusGraph.transformData(prometheusMockData.metrics); + + deployment.init(prometheusGraph.data.memory_values); + }); + + it('creates line on graph for deploment', () => { + expect( + graphElement().querySelectorAll('.deployment-line').length, + ).toBe(2); + }); + + it('creates hidden deploy boxes', () => { + expect( + graphElement().querySelectorAll('.prometheus-graph .js-deploy-info-box').length, + ).toBe(2); + }); + + it('hides the info boxes by default', () => { + expect( + graphElement().querySelectorAll('.prometheus-graph .js-deploy-info-box.hidden').length, + ).toBe(2); + }); + + it('shows sha short code when tag is false', () => { + expect( + graphElement().querySelector('.deploy-info-1 .js-deploy-info-box').textContent.trim(), + ).toContain('testin'); + }); + + it('shows ref name when tag is true', () => { + expect( + graphElement().querySelector('.deploy-info-2 .js-deploy-info-box').textContent.trim(), + ).toContain('tag'); + }); + + it('shows info box when moving mouse over line', () => { + deployment.mouseOverDeployInfo(deployment.data[0].xPos); + + expect( + graphElement().querySelectorAll('.prometheus-graph .js-deploy-info-box.hidden').length, + ).toBe(1); + + expect( + graphElement().querySelector('.deploy-info-1 .js-deploy-info-box.hidden'), + ).toBeNull(); + }); + + it('hides previously visible info box when moving mouse away', () => { + deployment.mouseOverDeployInfo(500); + + expect( + graphElement().querySelectorAll('.prometheus-graph .js-deploy-info-box.hidden').length, + ).toBe(2); + + expect( + graphElement().querySelector('.deploy-info-1 .js-deploy-info-box.hidden'), + ).not.toBeNull(); + }); +}); |