Update specs
This commit is contained in:
parent
90c09efe7e
commit
83346192ce
6 changed files with 230 additions and 111 deletions
|
@ -5,6 +5,8 @@ class Projects::ClustersController < Projects::ApplicationController
|
|||
before_action :authorize_update_cluster!, only: [:update]
|
||||
before_action :authorize_admin_cluster!, only: [:destroy]
|
||||
|
||||
STATUS_POLLING_INTERVAL = 10_000
|
||||
|
||||
def index
|
||||
if project.cluster
|
||||
redirect_to project_cluster_path(project, project.cluster)
|
||||
|
|
|
@ -8,6 +8,6 @@
|
|||
%h4.prepend-top-0= s_('ClusterIntegration|Choose how to set up cluster integration')
|
||||
|
||||
%p= s_('ClusterIntegration|Create a new cluster on Google Engine right from GitLab')
|
||||
= link_to s_('ClusterIntegration|Create on GKE'), new_namespace_project_gcp_path(@project.namespace, @project), class: 'btn append-bottom-20'
|
||||
= link_to s_('ClusterIntegration|Create on GKE'), gcp_new_namespace_project_clusters_path(@project.namespace, @project), class: 'btn append-bottom-20'
|
||||
%p= s_('ClusterIntegration|Enter the details for an existing Kubernetes cluster')
|
||||
= link_to s_('ClusterIntegration|Add an existing cluster'), new_namespace_project_user_path(@project.namespace, @project), class: 'btn append-bottom-20'
|
||||
= link_to s_('ClusterIntegration|Add an existing cluster'), user_new_namespace_project_clusters_path(@project.namespace, @project), class: 'btn append-bottom-20'
|
||||
|
|
|
@ -8,7 +8,7 @@ feature 'Clusters Applications', :js do
|
|||
|
||||
before do
|
||||
project.add_master(user)
|
||||
gitlab_sign_in(user)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
describe 'Installing applications' do
|
||||
|
|
124
spec/features/projects/clusters/gcp_spec.rb
Normal file
124
spec/features/projects/clusters/gcp_spec.rb
Normal file
|
@ -0,0 +1,124 @@
|
|||
require 'spec_helper'
|
||||
|
||||
feature 'Gcp Cluster', :js do
|
||||
include GoogleApi::CloudPlatformHelpers
|
||||
|
||||
let(:project) { create(:project) }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
project.add_master(user)
|
||||
gitlab_sign_in(user)
|
||||
allow(Projects::ClustersController).to receive(:STATUS_POLLING_INTERVAL) { 100 }
|
||||
end
|
||||
|
||||
context 'when user has signed with Google' do
|
||||
before do
|
||||
allow_any_instance_of(Projects::Clusters::GcpController)
|
||||
.to receive(:token_in_session).and_return('token')
|
||||
allow_any_instance_of(Projects::Clusters::GcpController)
|
||||
.to receive(:expires_at_in_session).and_return(1.hour.since.to_i.to_s)
|
||||
end
|
||||
|
||||
context 'when user does not have a cluster and visits cluster index page' do
|
||||
before do
|
||||
visit project_clusters_path(project)
|
||||
|
||||
click_link 'Create on GKE'
|
||||
end
|
||||
|
||||
context 'when user filled form with valid parameters' do
|
||||
before do
|
||||
allow_any_instance_of(GoogleApi::CloudPlatform::Client)
|
||||
.to receive(:projects_zones_clusters_create) do
|
||||
OpenStruct.new(
|
||||
self_link: 'projects/gcp-project-12345/zones/us-central1-a/operations/ope-123',
|
||||
status: 'RUNNING'
|
||||
)
|
||||
end
|
||||
|
||||
allow(WaitForClusterCreationWorker).to receive(:perform_in).and_return(nil)
|
||||
|
||||
fill_in 'cluster_provider_gcp_attributes_gcp_project_id', with: 'gcp-project-123'
|
||||
fill_in 'cluster_name', with: 'dev-cluster'
|
||||
click_button 'Create cluster'
|
||||
end
|
||||
|
||||
it 'user sees a cluster details page and creation status' do
|
||||
expect(page).to have_content('Cluster is being created on Google Container Engine...')
|
||||
|
||||
Clusters::Cluster.last.provider.make_created!
|
||||
|
||||
expect(page).to have_content('Cluster was successfully created on Google Container Engine')
|
||||
end
|
||||
|
||||
it 'user sees a error if something worng during creation' do
|
||||
expect(page).to have_content('Cluster is being created on Google Container Engine...')
|
||||
|
||||
Clusters::Cluster.last.provider.make_errored!('Something wrong!')
|
||||
|
||||
expect(page).to have_content('Something wrong!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user filled form with invalid parameters' do
|
||||
before do
|
||||
click_button 'Create cluster'
|
||||
end
|
||||
|
||||
it 'user sees a validation error' do
|
||||
expect(page).to have_css('#error_explanation')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user does have a cluster and visits cluster page' do
|
||||
let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
|
||||
|
||||
before do
|
||||
visit project_cluster_path(project, cluster)
|
||||
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
|
||||
|
||||
context 'when user disables the cluster' do
|
||||
before do
|
||||
page.find(:css, '.js-toggle-cluster').click
|
||||
click_button 'Save'
|
||||
end
|
||||
|
||||
it 'user sees the successful message' do
|
||||
expect(page).to have_content('Cluster was successfully updated.')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user destroy the cluster' do
|
||||
before do
|
||||
page.accept_confirm do
|
||||
click_link 'Remove integration'
|
||||
end
|
||||
end
|
||||
|
||||
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')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user has not signed with Google' do
|
||||
before do
|
||||
visit project_clusters_path(project)
|
||||
|
||||
click_link 'Create on GKE'
|
||||
end
|
||||
|
||||
it 'user sees a login page' do
|
||||
expect(page).to have_css('.signin-with-google')
|
||||
end
|
||||
end
|
||||
end
|
96
spec/features/projects/clusters/user_spec.rb
Normal file
96
spec/features/projects/clusters/user_spec.rb
Normal file
|
@ -0,0 +1,96 @@
|
|||
require 'spec_helper'
|
||||
|
||||
feature 'User Cluster', :js do
|
||||
include GoogleApi::CloudPlatformHelpers
|
||||
|
||||
let(:project) { create(:project) }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
project.add_master(user)
|
||||
gitlab_sign_in(user)
|
||||
allow(Projects::ClustersController).to receive(:STATUS_POLLING_INTERVAL) { 100 }
|
||||
end
|
||||
|
||||
context 'when user does not have a cluster and visits cluster index page' do
|
||||
before do
|
||||
visit project_clusters_path(project)
|
||||
|
||||
click_link 'Add an existing cluster'
|
||||
end
|
||||
|
||||
context 'when user filled form with valid parameters' do
|
||||
before do
|
||||
fill_in 'cluster_provider_gcp_attributes_gcp_project_id', with: 'gcp-project-123'
|
||||
fill_in 'cluster_platform_kubernetes_attributes_api_url', with: 'http://example.com'
|
||||
fill_in 'cluster_platform_kubernetes_attributes_token', with: 'my-token'
|
||||
fill_in 'cluster_name', with: 'dev-cluster'
|
||||
click_button 'Create cluster'
|
||||
end
|
||||
|
||||
it 'user sees a cluster details page and creation status' do
|
||||
expect(page).to have_content('Cluster was successfully created on Google Container Engine')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user filled form with invalid parameters' do
|
||||
before do
|
||||
click_button 'Create cluster'
|
||||
end
|
||||
|
||||
it 'user sees a validation error' do
|
||||
expect(page).to have_css('#error_explanation')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user does have a cluster and visits cluster page' do
|
||||
let(:cluster) { create(:cluster, :provided_by_user, projects: [project]) }
|
||||
|
||||
before do
|
||||
visit project_cluster_path(project, cluster)
|
||||
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
|
||||
|
||||
context 'when user disables the cluster' do
|
||||
before do
|
||||
page.find(:css, '.js-toggle-cluster').click
|
||||
fill_in 'cluster_name', with: 'dev-cluster'
|
||||
click_button 'Save'
|
||||
end
|
||||
|
||||
it 'user sees the successful message' do
|
||||
expect(page).to have_content('Cluster was successfully updated.')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user changes cluster name' do
|
||||
before do
|
||||
fill_in 'cluster_name', with: 'my-dev-cluster'
|
||||
click_button 'Save'
|
||||
end
|
||||
|
||||
it 'user sees the successful message' do
|
||||
expect(page).to have_content('Cluster was successfully updated.')
|
||||
expect(cluster.reload.cluster_name).to eq('my-dev-cluster')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user destroy the cluster' do
|
||||
before do
|
||||
page.accept_confirm do
|
||||
click_link 'Remove integration'
|
||||
end
|
||||
end
|
||||
|
||||
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')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -3,126 +3,23 @@ require 'spec_helper'
|
|||
feature 'Clusters', :js do
|
||||
include GoogleApi::CloudPlatformHelpers
|
||||
|
||||
let!(:project) { create(:project, :repository) }
|
||||
let!(:user) { create(:user) }
|
||||
let(:project) { create(:project) }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
project.add_master(user)
|
||||
gitlab_sign_in(user)
|
||||
end
|
||||
|
||||
context 'when user has signed in Google' do
|
||||
before do
|
||||
allow_any_instance_of(Projects::ClustersController)
|
||||
.to receive(:token_in_session).and_return('token')
|
||||
allow_any_instance_of(Projects::ClustersController)
|
||||
.to receive(:expires_at_in_session).and_return(1.hour.since.to_i.to_s)
|
||||
end
|
||||
|
||||
context 'when user does not have a cluster and visits cluster index page' do
|
||||
before do
|
||||
visit project_clusters_path(project)
|
||||
|
||||
click_link 'Create on GKE'
|
||||
end
|
||||
|
||||
it 'user sees a new page' do
|
||||
expect(page).to have_button('Create cluster')
|
||||
end
|
||||
|
||||
context 'when user filled form with valid parameters' do
|
||||
before do
|
||||
double.tap do |dbl|
|
||||
allow(dbl).to receive(:status).and_return('RUNNING')
|
||||
allow(dbl).to receive(:self_link)
|
||||
.and_return('projects/gcp-project-12345/zones/us-central1-a/operations/ope-123')
|
||||
allow_any_instance_of(GoogleApi::CloudPlatform::Client)
|
||||
.to receive(:projects_zones_clusters_create).and_return(dbl)
|
||||
end
|
||||
|
||||
allow(WaitForClusterCreationWorker).to receive(:perform_in).and_return(nil)
|
||||
|
||||
fill_in 'cluster_provider_gcp_attributes_gcp_project_id', with: 'gcp-project-123'
|
||||
fill_in 'cluster_name', with: 'dev-cluster'
|
||||
click_button 'Create cluster'
|
||||
end
|
||||
|
||||
it 'user sees a cluster details page and creation status' do
|
||||
expect(page).to have_content('Cluster is being created on Google Container Engine...')
|
||||
|
||||
Clusters::Cluster.last.provider.make_created!
|
||||
|
||||
expect(page).to have_content('Cluster was successfully created on Google Container Engine')
|
||||
end
|
||||
|
||||
it 'user sees a error if something worng during creation' do
|
||||
expect(page).to have_content('Cluster is being created on Google Container Engine...')
|
||||
|
||||
Clusters::Cluster.last.provider.make_errored!('Something wrong!')
|
||||
|
||||
expect(page).to have_content('Something wrong!')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user filled form with invalid parameters' do
|
||||
before do
|
||||
click_button 'Create cluster'
|
||||
end
|
||||
|
||||
it 'user sees a validation error' do
|
||||
expect(page).to have_css('#error_explanation')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
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 an cluster details page' do
|
||||
expect(page).to have_button('Save')
|
||||
expect(page.find(:css, '.cluster-name').value).to eq(cluster.name)
|
||||
end
|
||||
|
||||
context 'when user disables the cluster' do
|
||||
before do
|
||||
page.find(:css, '.js-toggle-cluster').click
|
||||
click_button 'Save'
|
||||
end
|
||||
|
||||
it 'user sees the succeccful message' do
|
||||
expect(page).to have_content('Cluster was successfully updated.')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user destory the cluster' do
|
||||
before do
|
||||
page.accept_confirm do
|
||||
click_link 'Remove integration'
|
||||
end
|
||||
end
|
||||
|
||||
it 'user sees creation form with the succeccful message' do
|
||||
expect(page).to have_content('Cluster integration was successfully removed.')
|
||||
expect(page).to have_link('Create on GKE')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user has not signed in Google' do
|
||||
context 'when user does not have a cluster and visits cluster index page' do
|
||||
before do
|
||||
visit project_clusters_path(project)
|
||||
|
||||
click_link 'Create on GKE'
|
||||
end
|
||||
|
||||
it 'user sees a login page' do
|
||||
expect(page).to have_css('.signin-with-google')
|
||||
it 'user sees a new page' do
|
||||
expect(page).to have_button('Create cluster')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue