diff --git a/spec/controllers/projects/clusters_controller_spec.rb b/spec/controllers/projects/clusters_controller_spec.rb index e4e25db68de..9ff0b745073 100644 --- a/spec/controllers/projects/clusters_controller_spec.rb +++ b/spec/controllers/projects/clusters_controller_spec.rb @@ -242,31 +242,42 @@ describe Projects::ClustersController do end context 'when format is json' do - context 'when update enabled' do - let(:params) do - { - cluster: { - enabled: false, - name: 'my-new-cluster-name', - platform_kubernetes_attributes: { - namespace: 'my-namespace' + context 'when changing parameters' do + context 'when valid parameters are used' do + let(:params) do + { + cluster: { + enabled: false, + name: 'my-new-cluster-name', + platform_kubernetes_attributes: { + namespace: 'my-namespace' + } } } - } + end + + it "updates and redirects back to show page" do + go_json + + cluster.reload + expect(response).to have_http_status(:no_content) + expect(cluster.enabled).to be_falsey + expect(cluster.name).to eq('my-new-cluster-name') + expect(cluster.platform_kubernetes.namespace).to eq('my-namespace') + end end - it "updates and redirects back to show page" do - go_json - - cluster.reload - expect(response).to have_http_status(:no_content) - expect(cluster.enabled).to be_falsey - expect(cluster.name).to eq('my-new-cluster-name') - expect(cluster.platform_kubernetes.namespace).to eq('my-namespace') - end - - context 'when cluster is being created' do - let(:cluster) { create(:cluster, :project, :providing_by_gcp) } + context 'when invalid parameters are used' do + let(:params) do + { + cluster: { + enabled: false, + platform_kubernetes_attributes: { + namespace: 'my invalid namespace #@' + } + } + } + end it "rejects changes" do go_json @@ -281,7 +292,13 @@ describe Projects::ClustersController do context 'when update enabled' do let(:params) do { - cluster: { enabled: false } + cluster: { + enabled: false, + name: 'my-new-cluster-name', + platform_kubernetes_attributes: { + namespace: 'my-namespace' + } + } } end @@ -295,18 +312,6 @@ describe Projects::ClustersController do expect(cluster.name).to eq('my-new-cluster-name') expect(cluster.platform_kubernetes.namespace).to eq('my-namespace') end - - context 'when cluster is being created' do - let(:cluster) { create(:cluster, :project, :providing_by_gcp) } - - it "rejects changes" do - go - - expect(response).to have_gitlab_http_status(:ok) - expect(response).to render_template(:show) - expect(cluster.enabled).to be_truthy - end - end end end end diff --git a/spec/features/projects/clusters/gcp_spec.rb b/spec/features/projects/clusters/gcp_spec.rb index df568ebaed2..82f94dc4422 100644 --- a/spec/features/projects/clusters/gcp_spec.rb +++ b/spec/features/projects/clusters/gcp_spec.rb @@ -24,6 +24,7 @@ feature 'Gcp Cluster', :js do before do visit project_clusters_path(project) + click_link 'Add cluster' click_link 'Create on GKE' end @@ -116,7 +117,7 @@ feature 'Gcp Cluster', :js do it 'user sees creation form with the successful message' do expect(page).to have_content('Cluster integration was successfully removed.') - expect(page).to have_link('Create on GKE') + expect(page).to have_link('Add cluster') end end end @@ -126,6 +127,7 @@ feature 'Gcp Cluster', :js do before do visit project_clusters_path(project) + click_link 'Add cluster' click_link 'Create on GKE' end diff --git a/spec/features/projects/clusters/user_spec.rb b/spec/features/projects/clusters/user_spec.rb index fe2f6a293c2..c30f13c4682 100644 --- a/spec/features/projects/clusters/user_spec.rb +++ b/spec/features/projects/clusters/user_spec.rb @@ -16,6 +16,7 @@ feature 'User Cluster', :js do before do visit project_clusters_path(project) + click_link 'Add cluster' click_link 'Add an existing cluster' end @@ -89,7 +90,7 @@ feature 'User Cluster', :js do it 'user sees creation form with the successful message' do expect(page).to have_content('Cluster integration was successfully removed.') - expect(page).to have_link('Add an existing cluster') + expect(page).to have_link('Add cluster') end end end diff --git a/spec/features/projects/clusters_spec.rb b/spec/features/projects/clusters_spec.rb index 8683d758b0a..2c71e9bd760 100644 --- a/spec/features/projects/clusters_spec.rb +++ b/spec/features/projects/clusters_spec.rb @@ -14,15 +14,82 @@ feature 'Clusters', :js do context 'when user does not have a cluster and visits cluster index page' do before do visit project_clusters_path(project) - - click_link 'Add cluster' - click_link 'Create on GKE' end - it 'user sees a new page' do - expect(page).to have_button('Create cluster') + it 'sees empty state' do + expect(page).to have_link('Add cluster') + expect(page).to have_selector('.empty-state') end end - context + context 'when user has a cluster and visits cluster index page' do + let!(:cluster) { create(:cluster, :project, :provided_by_gcp) } + let(:project) { cluster.project } + + before do + visit project_clusters_path(project) + end + + it 'user sees a table with one cluster' do + # One is the header row, the other the cluster row + expect(page).to have_selector('.gl-responsive-table-row', count: 2) + end + + it 'user sees a disabled add cluster button ' do + expect(page).to have_selector('.js-add-cluster.disabled') + end + + it 'user sees navigation tabs' do + expect(page.find('.js-active-tab').text).to include('Active') + expect(page.find('.js-active-tab .badge').text).to include('1') + + expect(page.find('.js-inactive-tab').text).to include('Inactive') + expect(page.find('.js-inactive-tab .badge').text).to include('0') + + expect(page.find('.js-all-tab').text).to include('All') + expect(page.find('.js-all-tab .badge').text).to include('1') + end + + context 'inline update of cluster' do + it 'user can update cluster' do + expect(page).to have_selector('.js-toggle-cluster-list') + end + + context 'with sucessfull request' do + it 'user sees updated cluster' do + expect do + page.find('.js-toggle-cluster-list').click + wait_for_requests + end.to change { cluster.reload.enabled } + + expect(page).not_to have_selector('.is-checked') + expect(cluster.reload).not_to be_enabled + end + end + + context 'with failed request' do + it 'user sees not update cluster and error message' do + expect_any_instance_of(Clusters::UpdateService).to receive(:execute).and_call_original + allow_any_instance_of(Clusters::Cluster).to receive(:valid?) { false } + + page.find('.js-toggle-cluster-list').click + + expect(page).to have_content('Something went wrong on our end.') + expect(page).to have_selector('.is-checked') + expect(cluster.reload).to be_enabled + end + end + end + + context 'when user clicks on a cluster' do + before do + click_link cluster.name + end + + it 'user sees a cluster details page' do + expect(page).to have_button('Save') + expect(page.find(:css, '.cluster-name').value).to eq(cluster.name) + end + end + end end