Move shared examples into the only file where used
This will make it easier to perform in place adjustments, etc for future MRs involving group clusters.
This commit is contained in:
parent
b69a047409
commit
c3c22cb210
|
@ -2,33 +2,104 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe Clusters::CreateService do
|
describe Clusters::CreateService do
|
||||||
let(:access_token) { 'xxx' }
|
let(:access_token) { 'xxx' }
|
||||||
let(:project) { create(:project) }
|
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
|
let(:service) { described_class.new(user, params) }
|
||||||
|
|
||||||
subject { described_class.new(user, params).execute(project: project, access_token: access_token) }
|
describe '#execute' do
|
||||||
|
before do
|
||||||
|
allow(ClusterProvisionWorker).to receive(:perform_async)
|
||||||
|
end
|
||||||
|
|
||||||
context 'when provider is gcp' do
|
shared_context 'valid cluster create params' do
|
||||||
context 'when project has no clusters' do
|
let(:params) do
|
||||||
context 'when correct params' do
|
{
|
||||||
include_context 'valid cluster create params'
|
name: 'test-cluster',
|
||||||
|
provider_type: :gcp,
|
||||||
include_examples 'create cluster service success'
|
provider_gcp_attributes: {
|
||||||
end
|
gcp_project_id: 'gcp-project',
|
||||||
|
zone: 'us-central1-a',
|
||||||
context 'when invalid params' do
|
num_nodes: 1,
|
||||||
include_context 'invalid cluster create params'
|
machine_type: 'machine_type-a',
|
||||||
|
legacy_abac: 'true'
|
||||||
include_examples 'create cluster service error'
|
}
|
||||||
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when project has a cluster' do
|
shared_context 'invalid cluster create params' do
|
||||||
include_context 'valid cluster create params'
|
let(:params) do
|
||||||
let!(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, projects: [project]) }
|
{
|
||||||
|
name: 'test-cluster',
|
||||||
|
provider_type: :gcp,
|
||||||
|
provider_gcp_attributes: {
|
||||||
|
gcp_project_id: '!!!!!!!',
|
||||||
|
zone: 'us-central1-a',
|
||||||
|
num_nodes: 1,
|
||||||
|
machine_type: 'machine_type-a'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it 'does not create a cluster' do
|
shared_examples 'create cluster service success' do
|
||||||
|
it 'creates a cluster object and performs a worker' do
|
||||||
|
expect(ClusterProvisionWorker).to receive(:perform_async)
|
||||||
|
|
||||||
|
expect { subject }
|
||||||
|
.to change { Clusters::Cluster.count }.by(1)
|
||||||
|
.and change { Clusters::Providers::Gcp.count }.by(1)
|
||||||
|
|
||||||
|
expect(subject.name).to eq('test-cluster')
|
||||||
|
expect(subject.user).to eq(user)
|
||||||
|
expect(subject.provider.gcp_project_id).to eq('gcp-project')
|
||||||
|
expect(subject.provider.zone).to eq('us-central1-a')
|
||||||
|
expect(subject.provider.num_nodes).to eq(1)
|
||||||
|
expect(subject.provider.machine_type).to eq('machine_type-a')
|
||||||
|
expect(subject.provider.access_token).to eq(access_token)
|
||||||
|
expect(subject.provider).to be_legacy_abac
|
||||||
|
expect(subject.platform).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples 'create cluster service error' do
|
||||||
|
it 'returns an error' do
|
||||||
expect(ClusterProvisionWorker).not_to receive(:perform_async)
|
expect(ClusterProvisionWorker).not_to receive(:perform_async)
|
||||||
expect { subject }.to raise_error(ArgumentError).and change { Clusters::Cluster.count }.by(0)
|
expect { subject }.to change { Clusters::Cluster.count }.by(0)
|
||||||
|
expect(subject.errors[:"provider_gcp.gcp_project_id"]).to be_present
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'create cluster for project' do
|
||||||
|
let(:project) { create(:project) }
|
||||||
|
|
||||||
|
subject { service.execute(project: project, access_token: access_token) }
|
||||||
|
|
||||||
|
context 'when project has no clusters' do
|
||||||
|
context 'when correct params' do
|
||||||
|
include_context 'valid cluster create params'
|
||||||
|
|
||||||
|
include_examples 'create cluster service success'
|
||||||
|
|
||||||
|
it 'associates project to the cluster' do
|
||||||
|
expect(subject.project).to eq(project)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when invalid params' do
|
||||||
|
include_context 'invalid cluster create params'
|
||||||
|
|
||||||
|
include_examples 'create cluster service error'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when project has a cluster' do
|
||||||
|
include_context 'valid cluster create params'
|
||||||
|
let!(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, projects: [project]) }
|
||||||
|
|
||||||
|
it 'does not create a cluster' do
|
||||||
|
expect(ClusterProvisionWorker).not_to receive(:perform_async)
|
||||||
|
expect { subject }.to raise_error(ArgumentError).and change { Clusters::Cluster.count }.by(0)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
shared_context 'valid cluster create params' do
|
|
||||||
let(:params) do
|
|
||||||
{
|
|
||||||
name: 'test-cluster',
|
|
||||||
provider_type: :gcp,
|
|
||||||
provider_gcp_attributes: {
|
|
||||||
gcp_project_id: 'gcp-project',
|
|
||||||
zone: 'us-central1-a',
|
|
||||||
num_nodes: 1,
|
|
||||||
machine_type: 'machine_type-a',
|
|
||||||
legacy_abac: 'true'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_context 'invalid cluster create params' do
|
|
||||||
let(:params) do
|
|
||||||
{
|
|
||||||
name: 'test-cluster',
|
|
||||||
provider_type: :gcp,
|
|
||||||
provider_gcp_attributes: {
|
|
||||||
gcp_project_id: '!!!!!!!',
|
|
||||||
zone: 'us-central1-a',
|
|
||||||
num_nodes: 1,
|
|
||||||
machine_type: 'machine_type-a'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples 'create cluster service success' do
|
|
||||||
it 'creates a cluster object and performs a worker' do
|
|
||||||
expect(ClusterProvisionWorker).to receive(:perform_async)
|
|
||||||
|
|
||||||
expect { subject }
|
|
||||||
.to change { Clusters::Cluster.count }.by(1)
|
|
||||||
.and change { Clusters::Providers::Gcp.count }.by(1)
|
|
||||||
|
|
||||||
expect(subject.name).to eq('test-cluster')
|
|
||||||
expect(subject.user).to eq(user)
|
|
||||||
expect(subject.project).to eq(project)
|
|
||||||
expect(subject.provider.gcp_project_id).to eq('gcp-project')
|
|
||||||
expect(subject.provider.zone).to eq('us-central1-a')
|
|
||||||
expect(subject.provider.num_nodes).to eq(1)
|
|
||||||
expect(subject.provider.machine_type).to eq('machine_type-a')
|
|
||||||
expect(subject.provider.access_token).to eq(access_token)
|
|
||||||
expect(subject.provider).to be_legacy_abac
|
|
||||||
expect(subject.platform).to be_nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples 'create cluster service error' do
|
|
||||||
it 'returns an error' do
|
|
||||||
expect(ClusterProvisionWorker).not_to receive(:perform_async)
|
|
||||||
expect { subject }.to change { Clusters::Cluster.count }.by(0)
|
|
||||||
expect(subject.errors[:"provider_gcp.gcp_project_id"]).to be_present
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue