Commit c5bca03b authored by Thong Kuah's avatar Thong Kuah

Use subject in controller spec

Swap out `go` method with subject which is the convention.

Re-organize 'PUT update' to remove un-necessary context nesting.

DRY up repeated blocks to `add_maintainer` and `sign_in`
parent 4127b357
...@@ -6,8 +6,6 @@ describe Projects::ClustersController do ...@@ -6,8 +6,6 @@ describe Projects::ClustersController do
set(:project) { create(:project) } set(:project) { create(:project) }
describe 'GET index' do
describe 'functionality' do
let(:user) { create(:user) } let(:user) { create(:user) }
before do before do
...@@ -15,12 +13,18 @@ describe Projects::ClustersController do ...@@ -15,12 +13,18 @@ describe Projects::ClustersController do
sign_in(user) sign_in(user)
end end
describe 'GET index' do
subject do
get :index, namespace_id: project.namespace.to_param, project_id: project
end
describe 'functionality' do
context 'when project has one or more clusters' do context 'when project has one or more clusters' do
let(:project) { create(:project) } let(:project) { create(:project) }
let!(:enabled_cluster) { create(:cluster, :provided_by_gcp, projects: [project]) } let!(:enabled_cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
let!(:disabled_cluster) { create(:cluster, :disabled, :provided_by_gcp, :production_environment, projects: [project]) } let!(:disabled_cluster) { create(:cluster, :disabled, :provided_by_gcp, :production_environment, projects: [project]) }
it 'lists available clusters' do it 'lists available clusters' do
go subject
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
expect(response).to render_template(:index) expect(response).to render_template(:index)
...@@ -30,13 +34,18 @@ describe Projects::ClustersController do ...@@ -30,13 +34,18 @@ describe Projects::ClustersController do
context 'when page is specified' do context 'when page is specified' do
let(:last_page) { project.clusters.page.total_pages } let(:last_page) { project.clusters.page.total_pages }
subject do
get :index, namespace_id: project.namespace, project_id: project, page: last_page
end
before do before do
allow(Clusters::Cluster).to receive(:paginates_per).and_return(1) allow(Clusters::Cluster).to receive(:paginates_per).and_return(1)
create_list(:cluster, 2, :provided_by_gcp, :production_environment, projects: [project]) create_list(:cluster, 2, :provided_by_gcp, :production_environment, projects: [project])
get :index, namespace_id: project.namespace, project_id: project, page: last_page
end end
it 'redirects to the page' do it 'redirects to the page' do
subject
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
expect(assigns(:clusters).current_page).to eq(last_page) expect(assigns(:clusters).current_page).to eq(last_page)
end end
...@@ -47,7 +56,7 @@ describe Projects::ClustersController do ...@@ -47,7 +56,7 @@ describe Projects::ClustersController do
let(:project) { create(:project) } let(:project) { create(:project) }
it 'returns an empty state page' do it 'returns an empty state page' do
go subject
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
expect(response).to render_template(:index, partial: :empty_state) expect(response).to render_template(:index, partial: :empty_state)
...@@ -59,30 +68,23 @@ describe Projects::ClustersController do ...@@ -59,30 +68,23 @@ describe Projects::ClustersController do
describe 'security' do describe 'security' do
let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) } let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
it { expect { go }.to be_allowed_for(:admin) } it { expect { subject }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(project) } it { expect { subject }.to be_allowed_for(:owner).of(project) }
it { expect { go }.to be_allowed_for(:maintainer).of(project) } it { expect { subject }.to be_allowed_for(:maintainer).of(project) }
it { expect { go }.to be_denied_for(:developer).of(project) } it { expect { subject }.to be_denied_for(:developer).of(project) }
it { expect { go }.to be_denied_for(:reporter).of(project) } it { expect { subject }.to be_denied_for(:reporter).of(project) }
it { expect { go }.to be_denied_for(:guest).of(project) } it { expect { subject }.to be_denied_for(:guest).of(project) }
it { expect { go }.to be_denied_for(:user) } it { expect { subject }.to be_denied_for(:user) }
it { expect { go }.to be_denied_for(:external) } it { expect { subject }.to be_denied_for(:external) }
end
def go
get :index, namespace_id: project.namespace.to_param, project_id: project
end end
end end
describe 'GET new' do describe 'GET new' do
describe 'functionality for new cluster' do subject do
let(:user) { create(:user) } get :new, namespace_id: project.namespace, project_id: project
before do
project.add_maintainer(user)
sign_in(user)
end end
describe 'functionality for new cluster' do
context 'when omniauth has been configured' do context 'when omniauth has been configured' do
let(:key) { 'secret-key' } let(:key) { 'secret-key' }
let(:session_key_for_redirect_uri) do let(:session_key_for_redirect_uri) do
...@@ -94,7 +96,7 @@ describe Projects::ClustersController do ...@@ -94,7 +96,7 @@ describe Projects::ClustersController do
end end
it 'has authorize_url' do it 'has authorize_url' do
go subject
expect(assigns(:authorize_url)).to include(key) expect(assigns(:authorize_url)).to include(key)
expect(session[session_key_for_redirect_uri]).to eq(new_project_cluster_path(project)) expect(session[session_key_for_redirect_uri]).to eq(new_project_cluster_path(project))
...@@ -107,7 +109,7 @@ describe Projects::ClustersController do ...@@ -107,7 +109,7 @@ describe Projects::ClustersController do
end end
it 'does not have authorize_url' do it 'does not have authorize_url' do
go subject
expect(assigns(:authorize_url)).to be_nil expect(assigns(:authorize_url)).to be_nil
end end
...@@ -119,7 +121,7 @@ describe Projects::ClustersController do ...@@ -119,7 +121,7 @@ describe Projects::ClustersController do
end end
it 'has new object' do it 'has new object' do
go subject
expect(assigns(:gcp_cluster)).to be_an_instance_of(Clusters::Cluster) expect(assigns(:gcp_cluster)).to be_an_instance_of(Clusters::Cluster)
end end
...@@ -139,33 +141,22 @@ describe Projects::ClustersController do ...@@ -139,33 +141,22 @@ describe Projects::ClustersController do
end end
describe 'functionality for existing cluster' do describe 'functionality for existing cluster' do
let(:user) { create(:user) }
before do
project.add_maintainer(user)
sign_in(user)
end
it 'has new object' do it 'has new object' do
go subject
expect(assigns(:user_cluster)).to be_an_instance_of(Clusters::Cluster) expect(assigns(:user_cluster)).to be_an_instance_of(Clusters::Cluster)
end end
end end
describe 'security' do describe 'security' do
it { expect { go }.to be_allowed_for(:admin) } it { expect { subject }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(project) } it { expect { subject }.to be_allowed_for(:owner).of(project) }
it { expect { go }.to be_allowed_for(:maintainer).of(project) } it { expect { subject }.to be_allowed_for(:maintainer).of(project) }
it { expect { go }.to be_denied_for(:developer).of(project) } it { expect { subject }.to be_denied_for(:developer).of(project) }
it { expect { go }.to be_denied_for(:reporter).of(project) } it { expect { subject }.to be_denied_for(:reporter).of(project) }
it { expect { go }.to be_denied_for(:guest).of(project) } it { expect { subject }.to be_denied_for(:guest).of(project) }
it { expect { go }.to be_denied_for(:user) } it { expect { subject }.to be_denied_for(:user) }
it { expect { go }.to be_denied_for(:external) } it { expect { subject }.to be_denied_for(:external) }
end
def go
get :new, namespace_id: project.namespace, project_id: project
end end
end end
...@@ -183,14 +174,11 @@ describe Projects::ClustersController do ...@@ -183,14 +174,11 @@ describe Projects::ClustersController do
} }
end end
describe 'functionality' do subject do
let(:user) { create(:user) } post :create_gcp, params.merge(namespace_id: project.namespace, project_id: project)
before do
project.add_maintainer(user)
sign_in(user)
end end
describe 'functionality' do
context 'when access token is valid' do context 'when access token is valid' do
before do before do
stub_google_api_validate_token stub_google_api_validate_token
...@@ -198,7 +186,7 @@ describe Projects::ClustersController do ...@@ -198,7 +186,7 @@ describe Projects::ClustersController do
it 'creates a new cluster' do it 'creates a new cluster' do
expect(ClusterProvisionWorker).to receive(:perform_async) expect(ClusterProvisionWorker).to receive(:perform_async)
expect { go }.to change { Clusters::Cluster.count } expect { subject }.to change { Clusters::Cluster.count }
.and change { Clusters::Providers::Gcp.count } .and change { Clusters::Providers::Gcp.count }
expect(response).to redirect_to(project_cluster_path(project, project.clusters.first)) expect(response).to redirect_to(project_cluster_path(project, project.clusters.first))
expect(project.clusters.first).to be_gcp expect(project.clusters.first).to be_gcp
...@@ -211,7 +199,7 @@ describe Projects::ClustersController do ...@@ -211,7 +199,7 @@ describe Projects::ClustersController do
it 'creates a new cluster with legacy_abac_disabled' do it 'creates a new cluster with legacy_abac_disabled' do
expect(ClusterProvisionWorker).to receive(:perform_async) expect(ClusterProvisionWorker).to receive(:perform_async)
expect { go }.to change { Clusters::Cluster.count } expect { subject }.to change { Clusters::Cluster.count }
.and change { Clusters::Providers::Gcp.count } .and change { Clusters::Providers::Gcp.count }
expect(project.clusters.first.provider_gcp).not_to be_legacy_abac expect(project.clusters.first.provider_gcp).not_to be_legacy_abac
end end
...@@ -248,18 +236,14 @@ describe Projects::ClustersController do ...@@ -248,18 +236,14 @@ describe Projects::ClustersController do
allow(WaitForClusterCreationWorker).to receive(:perform_in).and_return(nil) allow(WaitForClusterCreationWorker).to receive(:perform_in).and_return(nil)
end end
it { expect { go }.to be_allowed_for(:admin) } it { expect { subject }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(project) } it { expect { subject }.to be_allowed_for(:owner).of(project) }
it { expect { go }.to be_allowed_for(:maintainer).of(project) } it { expect { subject }.to be_allowed_for(:maintainer).of(project) }
it { expect { go }.to be_denied_for(:developer).of(project) } it { expect { subject }.to be_denied_for(:developer).of(project) }
it { expect { go }.to be_denied_for(:reporter).of(project) } it { expect { subject }.to be_denied_for(:reporter).of(project) }
it { expect { go }.to be_denied_for(:guest).of(project) } it { expect { subject }.to be_denied_for(:guest).of(project) }
it { expect { go }.to be_denied_for(:user) } it { expect { subject }.to be_denied_for(:user) }
it { expect { go }.to be_denied_for(:external) } it { expect { subject }.to be_denied_for(:external) }
end
def go
post :create_gcp, params.merge(namespace_id: project.namespace, project_id: project)
end end
end end
...@@ -277,19 +261,16 @@ describe Projects::ClustersController do ...@@ -277,19 +261,16 @@ describe Projects::ClustersController do
} }
end end
describe 'functionality' do subject do
let(:user) { create(:user) } post :create_user, params.merge(namespace_id: project.namespace, project_id: project)
before do
project.add_maintainer(user)
sign_in(user)
end end
describe 'functionality' do
context 'when creates a cluster' do context 'when creates a cluster' do
it 'creates a new cluster' do it 'creates a new cluster' do
expect(ClusterProvisionWorker).to receive(:perform_async) expect(ClusterProvisionWorker).to receive(:perform_async)
expect { go }.to change { Clusters::Cluster.count } expect { subject }.to change { Clusters::Cluster.count }
.and change { Clusters::Platforms::Kubernetes.count } .and change { Clusters::Platforms::Kubernetes.count }
expect(response).to redirect_to(project_cluster_path(project, project.clusters.first)) expect(response).to redirect_to(project_cluster_path(project, project.clusters.first))
...@@ -317,7 +298,7 @@ describe Projects::ClustersController do ...@@ -317,7 +298,7 @@ describe Projects::ClustersController do
it 'creates a new cluster' do it 'creates a new cluster' do
expect(ClusterProvisionWorker).to receive(:perform_async) expect(ClusterProvisionWorker).to receive(:perform_async)
expect { go }.to change { Clusters::Cluster.count } expect { subject }.to change { Clusters::Cluster.count }
.and change { Clusters::Platforms::Kubernetes.count } .and change { Clusters::Platforms::Kubernetes.count }
expect(response).to redirect_to(project_cluster_path(project, project.clusters.first)) expect(response).to redirect_to(project_cluster_path(project, project.clusters.first))
...@@ -330,34 +311,30 @@ describe Projects::ClustersController do ...@@ -330,34 +311,30 @@ describe Projects::ClustersController do
end end
describe 'security' do describe 'security' do
it { expect { go }.to be_allowed_for(:admin) } it { expect { subject }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(project) } it { expect { subject }.to be_allowed_for(:owner).of(project) }
it { expect { go }.to be_allowed_for(:maintainer).of(project) } it { expect { subject }.to be_allowed_for(:maintainer).of(project) }
it { expect { go }.to be_denied_for(:developer).of(project) } it { expect { subject }.to be_denied_for(:developer).of(project) }
it { expect { go }.to be_denied_for(:reporter).of(project) } it { expect { subject }.to be_denied_for(:reporter).of(project) }
it { expect { go }.to be_denied_for(:guest).of(project) } it { expect { subject }.to be_denied_for(:guest).of(project) }
it { expect { go }.to be_denied_for(:user) } it { expect { subject }.to be_denied_for(:user) }
it { expect { go }.to be_denied_for(:external) } it { expect { subject }.to be_denied_for(:external) }
end
def go
post :create_user, params.merge(namespace_id: project.namespace, project_id: project)
end end
end end
describe 'GET status' do describe 'GET status' do
let(:cluster) { create(:cluster, :providing_by_gcp, projects: [project]) } let(:cluster) { create(:cluster, :providing_by_gcp, projects: [project]) }
describe 'functionality' do subject do
let(:user) { create(:user) } get :status, namespace_id: project.namespace,
project_id: project,
before do id: cluster,
project.add_maintainer(user) format: :json
sign_in(user)
end end
describe 'functionality' do
it "responds with matching schema" do it "responds with matching schema" do
go subject
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
expect(response).to match_response_schema('cluster_status') expect(response).to match_response_schema('cluster_status')
...@@ -366,42 +343,34 @@ describe Projects::ClustersController do ...@@ -366,42 +343,34 @@ describe Projects::ClustersController do
it 'invokes schedule_status_update on each application' do it 'invokes schedule_status_update on each application' do
expect_any_instance_of(Clusters::Applications::Ingress).to receive(:schedule_status_update) expect_any_instance_of(Clusters::Applications::Ingress).to receive(:schedule_status_update)
go subject
end end
end end
describe 'security' do describe 'security' do
it { expect { go }.to be_allowed_for(:admin) } it { expect { subject }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(project) } it { expect { subject }.to be_allowed_for(:owner).of(project) }
it { expect { go }.to be_allowed_for(:maintainer).of(project) } it { expect { subject }.to be_allowed_for(:maintainer).of(project) }
it { expect { go }.to be_denied_for(:developer).of(project) } it { expect { subject }.to be_denied_for(:developer).of(project) }
it { expect { go }.to be_denied_for(:reporter).of(project) } it { expect { subject }.to be_denied_for(:reporter).of(project) }
it { expect { go }.to be_denied_for(:guest).of(project) } it { expect { subject }.to be_denied_for(:guest).of(project) }
it { expect { go }.to be_denied_for(:user) } it { expect { subject }.to be_denied_for(:user) }
it { expect { go }.to be_denied_for(:external) } it { expect { subject }.to be_denied_for(:external) }
end
def go
get :status, namespace_id: project.namespace,
project_id: project,
id: cluster,
format: :json
end end
end end
describe 'GET show' do describe 'GET show' do
let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) } let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
describe 'functionality' do subject do
let(:user) { create(:user) } get :show, namespace_id: project.namespace,
project_id: project,
before do id: cluster
project.add_maintainer(user)
sign_in(user)
end end
describe 'functionality' do
it "renders view" do it "renders view" do
go subject
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
expect(assigns(:cluster)).to eq(cluster) expect(assigns(:cluster)).to eq(cluster)
...@@ -409,34 +378,20 @@ describe Projects::ClustersController do ...@@ -409,34 +378,20 @@ describe Projects::ClustersController do
end end
describe 'security' do describe 'security' do
it { expect { go }.to be_allowed_for(:admin) } it { expect { subject }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(project) } it { expect { subject }.to be_allowed_for(:owner).of(project) }
it { expect { go }.to be_allowed_for(:maintainer).of(project) } it { expect { subject }.to be_allowed_for(:maintainer).of(project) }
it { expect { go }.to be_denied_for(:developer).of(project) } it { expect { subject }.to be_denied_for(:developer).of(project) }
it { expect { go }.to be_denied_for(:reporter).of(project) } it { expect { subject }.to be_denied_for(:reporter).of(project) }
it { expect { go }.to be_denied_for(:guest).of(project) } it { expect { subject }.to be_denied_for(:guest).of(project) }
it { expect { go }.to be_denied_for(:user) } it { expect { subject }.to be_denied_for(:user) }
it { expect { go }.to be_denied_for(:external) } it { expect { subject }.to be_denied_for(:external) }
end
def go
get :show, namespace_id: project.namespace,
project_id: project,
id: cluster
end end
end end
describe 'PUT update' do describe 'PUT update' do
context 'when cluster is provided by GCP' do
let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) } let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
let(:user) { create(:user) }
before do
project.add_maintainer(user)
sign_in(user)
end
context 'when changing parameters' do
let(:params) do let(:params) do
{ {
cluster: { cluster: {
...@@ -449,8 +404,15 @@ describe Projects::ClustersController do ...@@ -449,8 +404,15 @@ describe Projects::ClustersController do
} }
end end
subject do
put :update, params.merge(namespace_id: project.namespace,
project_id: project,
id: cluster)
end
context 'when cluster is provided by GCP' do
it "updates and redirects back to show page" do it "updates and redirects back to show page" do
go subject
cluster.reload cluster.reload
expect(response).to redirect_to(project_cluster_path(project, cluster)) expect(response).to redirect_to(project_cluster_path(project, cluster))
...@@ -459,8 +421,9 @@ describe Projects::ClustersController do ...@@ -459,8 +421,9 @@ describe Projects::ClustersController do
end end
it "does not change cluster name" do it "does not change cluster name" do
go subject
cluster.reload
expect(cluster.name).to eq('test-cluster') expect(cluster.name).to eq('test-cluster')
end end
...@@ -468,7 +431,7 @@ describe Projects::ClustersController do ...@@ -468,7 +431,7 @@ describe Projects::ClustersController do
let(:cluster) { create(:cluster, :providing_by_gcp, projects: [project]) } let(:cluster) { create(:cluster, :providing_by_gcp, projects: [project]) }
it "rejects changes" do it "rejects changes" do
go subject
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
expect(response).to render_template(:show) expect(response).to render_template(:show)
...@@ -476,20 +439,10 @@ describe Projects::ClustersController do ...@@ -476,20 +439,10 @@ describe Projects::ClustersController do
end end
end end
end end
end
context 'when cluster is provided by user' do context 'when cluster is provided by user' do
let(:cluster) { create(:cluster, :provided_by_user, projects: [project]) } let(:cluster) { create(:cluster, :provided_by_user, projects: [project]) }
let(:user) { create(:user) }
before do
project.add_maintainer(user)
sign_in(user)
end
context 'when format is json' do
context 'when changing parameters' do
context 'when valid parameters are used' do
let(:params) do let(:params) do
{ {
cluster: { cluster: {
...@@ -502,61 +455,73 @@ describe Projects::ClustersController do ...@@ -502,61 +455,73 @@ describe Projects::ClustersController do
} }
end end
subject do
put :update, params.merge(namespace_id: project.namespace,
project_id: project,
id: cluster)
end
it "updates and redirects back to show page" do it "updates and redirects back to show page" do
go_json subject
cluster.reload cluster.reload
expect(response).to have_http_status(:no_content) expect(response).to redirect_to(project_cluster_path(project, cluster))
expect(flash[:notice]).to eq('Kubernetes cluster was successfully updated.')
expect(cluster.enabled).to be_falsey expect(cluster.enabled).to be_falsey
expect(cluster.name).to eq('my-new-cluster-name') expect(cluster.name).to eq('my-new-cluster-name')
expect(cluster.platform_kubernetes.namespace).to eq('my-namespace') expect(cluster.platform_kubernetes.namespace).to eq('my-namespace')
end end
context 'when format is json' do
subject do
put :update, params.merge(namespace_id: project.namespace,
project_id: project,
id: cluster,
format: :json)
end end
context 'when invalid parameters are used' do context 'when changing parameters' do
context 'when valid parameters are used' do
let(:params) do let(:params) do
{ {
cluster: { cluster: {
enabled: false, enabled: false,
name: 'my-new-cluster-name',
platform_kubernetes_attributes: { platform_kubernetes_attributes: {
namespace: 'my invalid namespace #@' namespace: 'my-namespace'
} }
} }
} }
end end
it "rejects changes" do it "updates and redirects back to show page" do
go_json subject
expect(response).to have_http_status(:bad_request) cluster.reload
end expect(response).to have_http_status(:no_content)
end 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
end end
context 'when format is html' do context 'when invalid parameters are used' do
context 'when update enabled' do
let(:params) do let(:params) do
{ {
cluster: { cluster: {
enabled: false, enabled: false,
name: 'my-new-cluster-name',
platform_kubernetes_attributes: { platform_kubernetes_attributes: {
namespace: 'my-namespace' namespace: 'my invalid namespace #@'
} }
} }
} }
end end
it "updates and redirects back to show page" do it "rejects changes" do
go subject
cluster.reload expect(response).to have_http_status(:bad_request)
expect(response).to redirect_to(project_cluster_path(project, cluster)) end
expect(flash[:notice]).to eq('Kubernetes cluster was successfully updated.')
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
end end
end end
...@@ -565,49 +530,31 @@ describe Projects::ClustersController do ...@@ -565,49 +530,31 @@ describe Projects::ClustersController do
describe 'security' do describe 'security' do
set(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) } set(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
let(:params) do it { expect { subject }.to be_allowed_for(:admin) }
{ cluster: { enabled: false } } it { expect { subject }.to be_allowed_for(:owner).of(project) }
it { expect { subject }.to be_allowed_for(:maintainer).of(project) }
it { expect { subject }.to be_denied_for(:developer).of(project) }
it { expect { subject }.to be_denied_for(:reporter).of(project) }
it { expect { subject }.to be_denied_for(:guest).of(project) }
it { expect { subject }.to be_denied_for(:user) }
it { expect { subject }.to be_denied_for(:external) }
end end
it { expect { go }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(project) }
it { expect { go }.to be_allowed_for(:maintainer).of(project) }
it { expect { go }.to be_denied_for(:developer).of(project) }
it { expect { go }.to be_denied_for(:reporter).of(project) }
it { expect { go }.to be_denied_for(:guest).of(project) }
it { expect { go }.to be_denied_for(:user) }
it { expect { go }.to be_denied_for(:external) }
end end
def go describe 'DELETE destroy' do
put :update, params.merge(namespace_id: project.namespace, let!(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, projects: [project]) }
project_id: project,
id: cluster)
end
def go_json subject do
put :update, params.merge(namespace_id: project.namespace, delete :destroy, namespace_id: project.namespace,
project_id: project, project_id: project,
id: cluster, id: cluster
format: :json)
end
end end
describe 'DELETE destroy' do
describe 'functionality' do describe 'functionality' do
let(:user) { create(:user) }
before do
project.add_maintainer(user)
sign_in(user)
end
context 'when cluster is provided by GCP' do context 'when cluster is provided by GCP' do
context 'when cluster is created' do context 'when cluster is created' do
let!(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, projects: [project]) }
it "destroys and redirects back to clusters list" do it "destroys and redirects back to clusters list" do
expect { go } expect { subject }
.to change { Clusters::Cluster.count }.by(-1) .to change { Clusters::Cluster.count }.by(-1)
.and change { Clusters::Platforms::Kubernetes.count }.by(-1) .and change { Clusters::Platforms::Kubernetes.count }.by(-1)
.and change { Clusters::Providers::Gcp.count }.by(-1) .and change { Clusters::Providers::Gcp.count }.by(-1)
...@@ -621,7 +568,7 @@ describe Projects::ClustersController do ...@@ -621,7 +568,7 @@ describe Projects::ClustersController do
let!(:cluster) { create(:cluster, :providing_by_gcp, :production_environment, projects: [project]) } let!(:cluster) { create(:cluster, :providing_by_gcp, :production_environment, projects: [project]) }
it "destroys and redirects back to clusters list" do it "destroys and redirects back to clusters list" do
expect { go } expect { subject }
.to change { Clusters::Cluster.count }.by(-1) .to change { Clusters::Cluster.count }.by(-1)
.and change { Clusters::Providers::Gcp.count }.by(-1) .and change { Clusters::Providers::Gcp.count }.by(-1)
...@@ -635,7 +582,7 @@ describe Projects::ClustersController do ...@@ -635,7 +582,7 @@ describe Projects::ClustersController do
let!(:cluster) { create(:cluster, :provided_by_user, :production_environment, projects: [project]) } let!(:cluster) { create(:cluster, :provided_by_user, :production_environment, projects: [project]) }
it "destroys and redirects back to clusters list" do it "destroys and redirects back to clusters list" do
expect { go } expect { subject }
.to change { Clusters::Cluster.count }.by(-1) .to change { Clusters::Cluster.count }.by(-1)
.and change { Clusters::Platforms::Kubernetes.count }.by(-1) .and change { Clusters::Platforms::Kubernetes.count }.by(-1)
.and change { Clusters::Providers::Gcp.count }.by(0) .and change { Clusters::Providers::Gcp.count }.by(0)
...@@ -649,20 +596,14 @@ describe Projects::ClustersController do ...@@ -649,20 +596,14 @@ describe Projects::ClustersController do
describe 'security' do describe 'security' do
set(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, projects: [project]) } set(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, projects: [project]) }
it { expect { go }.to be_allowed_for(:admin) } it { expect { subject }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(project) } it { expect { subject }.to be_allowed_for(:owner).of(project) }
it { expect { go }.to be_allowed_for(:maintainer).of(project) } it { expect { subject }.to be_allowed_for(:maintainer).of(project) }
it { expect { go }.to be_denied_for(:developer).of(project) } it { expect { subject }.to be_denied_for(:developer).of(project) }
it { expect { go }.to be_denied_for(:reporter).of(project) } it { expect { subject }.to be_denied_for(:reporter).of(project) }
it { expect { go }.to be_denied_for(:guest).of(project) } it { expect { subject }.to be_denied_for(:guest).of(project) }
it { expect { go }.to be_denied_for(:user) } it { expect { subject }.to be_denied_for(:user) }
it { expect { go }.to be_denied_for(:external) } it { expect { subject }.to be_denied_for(:external) }
end
def go
delete :destroy, namespace_id: project.namespace,
project_id: project,
id: cluster
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment