summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Hughes <me@iamphill.com>2017-04-18 11:57:54 +0100
committerPhil Hughes <me@iamphill.com>2017-04-18 11:57:54 +0100
commit5d8891fb85a4646557e2f478c6c08c997868c8fb (patch)
tree1611428d0a18ebfe8b3c05a7de09ff0f2560ff47
parentda2a7823cc6b4db1bcd09153edac64d1cc2cb463 (diff)
downloadgitlab-ce-5d8891fb85a4646557e2f478c6c08c997868c8fb.tar.gz
Added tests
-rw-r--r--app/assets/javascripts/monitoring/deployments.js4
-rw-r--r--app/assets/javascripts/monitoring/prometheus_graph.js18
-rw-r--r--spec/javascripts/fixtures/environments/metrics.html.haml2
-rw-r--r--spec/javascripts/monitoring/deployments_spec.js116
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();
+ });
+});