summaryrefslogtreecommitdiff
path: root/spec/features/clusters/cluster_health_dashboard_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/features/clusters/cluster_health_dashboard_spec.rb')
-rw-r--r--spec/features/clusters/cluster_health_dashboard_spec.rb93
1 files changed, 93 insertions, 0 deletions
diff --git a/spec/features/clusters/cluster_health_dashboard_spec.rb b/spec/features/clusters/cluster_health_dashboard_spec.rb
new file mode 100644
index 00000000000..e9e3b48e9c0
--- /dev/null
+++ b/spec/features/clusters/cluster_health_dashboard_spec.rb
@@ -0,0 +1,93 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Cluster Health board', :js, :kubeclient, :use_clean_rails_memory_store_caching, :sidekiq_inline do
+ include KubernetesHelpers
+ include PrometheusHelpers
+
+ let_it_be(:current_user) { create(:user) }
+ let_it_be(:clusterable) { create(:project) }
+ let_it_be(:cluster) { create(:cluster, :provided_by_gcp, :project, projects: [clusterable]) }
+ let_it_be(:cluster_path) { project_cluster_path(clusterable, cluster) }
+
+ before do
+ clusterable.add_maintainer(current_user)
+
+ sign_in(current_user)
+ end
+
+ it 'shows cluster board section within the page' do
+ visit cluster_path
+
+ expect(page).to have_text('Health')
+
+ click_link 'Health'
+
+ expect(page).to have_css('.cluster-health-graphs')
+ end
+
+ context 'no prometheus installed' do
+ it 'shows install prometheus message' do
+ visit cluster_path
+
+ click_link 'Health'
+
+ expect(page).to have_text('you must first install Prometheus in the Applications tab')
+ end
+ end
+
+ context 'when there is cluster with installed prometheus' do
+ before do
+ create(:clusters_applications_prometheus, :installed, cluster: cluster)
+ stub_kubeclient_discover(cluster.platform.api_url)
+ end
+
+ context 'waiting for data' do
+ before do
+ stub_empty_response
+ end
+
+ it 'shows container and waiting for data message' do
+ visit cluster_path
+
+ click_link 'Health'
+
+ wait_for_requests
+
+ expect(page).to have_css('.prometheus-graphs')
+ expect(page).to have_text('Waiting for performance data')
+ end
+ end
+
+ context 'connected, prometheus returns data' do
+ before do
+ stub_connected
+ end
+
+ it 'renders charts' do
+ visit cluster_path
+
+ click_link 'Health'
+
+ wait_for_requests
+
+ expect(page).to have_css('.prometheus-graphs')
+ expect(page).to have_css('.prometheus-graph')
+ expect(page).to have_css('.prometheus-graph-title')
+ expect(page).to have_css('[_echarts_instance_]')
+ expect(page).to have_content('Avg')
+ end
+ end
+
+ def stub_empty_response
+ stub_prometheus_request(/prometheus-prometheus-server/, status: 204, body: {})
+ stub_prometheus_request(/prometheus\/api\/v1/, status: 204, body: {})
+ end
+
+ def stub_connected
+ stub_prometheus_request(/prometheus-prometheus-server/, body: prometheus_values_body)
+ stub_prometheus_request(/prometheus\/api\/v1/, body: prometheus_values_body)
+ end
+ end
+end