Commit 4a369185 authored by Kamil Trzcinski's avatar Kamil Trzcinski

Work on specs

parent 25dd1712
...@@ -9,7 +9,7 @@ class CreateDeploymentService < BaseService ...@@ -9,7 +9,7 @@ class CreateDeploymentService < BaseService
@environment = environment @environment = environment
@environment.external_url = expanded_url if expanded_url @environment.external_url = expanded_url if expanded_url
@environment.state_event = action @environment.fire_state_event(action)
@environment.save! @environment.save!
return if @environment.stopped? return if @environment.stopped?
...@@ -68,6 +68,6 @@ class CreateDeploymentService < BaseService ...@@ -68,6 +68,6 @@ class CreateDeploymentService < BaseService
end end
def action def action
params[:options].fetch(:action, 'start') options[:action] || 'start'
end end
end end
...@@ -48,4 +48,50 @@ describe Deployment, models: true do ...@@ -48,4 +48,50 @@ describe Deployment, models: true do
end end
end end
end end
describe '#stop_action' do
let(:build) { create(:ci_build) }
subject { deployment.stop_action }
context 'when no other actions' do
let(:deployment) { FactoryGirl.build(:deployment, deployable: build) }
it { is_expected.to be_nil }
end
context 'with other actions' do
let!(:close_action) { create(:ci_build, pipeline: build.pipeline, name: 'close_app', when: :manual) }
context 'when matching action is defined' do
let(:deployment) { FactoryGirl.build(:deployment, deployable: build, on_stop: 'close_other_app') }
it { is_expected.to be_nil }
end
context 'when no matching action is defined' do
let(:deployment) { FactoryGirl.build(:deployment, deployable: build, on_stop: 'close_app') }
it { is_expected.to eq(close_action) }
end
end
end
describe '#stoppable?' do
subject { deployment.stoppable? }
context 'when no other actions' do
let(:deployment) { build(:deployment) }
it { is_expected.to be_falsey }
end
context 'when matching action is defined' do
let(:build) { create(:ci_build) }
let(:deployment) { FactoryGirl.build(:deployment, deployable: build, on_stop: 'close_app') }
let!(:close_action) { create(:ci_build, pipeline: build.pipeline, name: 'close_app', when: :manual) }
it { is_expected.to be_truthy }
end
end
end end
...@@ -8,6 +8,8 @@ describe Environment, models: true do ...@@ -8,6 +8,8 @@ describe Environment, models: true do
it { is_expected.to delegate_method(:last_deployment).to(:deployments).as(:last) } it { is_expected.to delegate_method(:last_deployment).to(:deployments).as(:last) }
it { is_expected.to delegate_method(:stop_action).to(:last_deployment).as(:last) }
it { is_expected.to validate_presence_of(:name) } it { is_expected.to validate_presence_of(:name) }
it { is_expected.to validate_uniqueness_of(:name).scoped_to(:project_id) } it { is_expected.to validate_uniqueness_of(:name).scoped_to(:project_id) }
it { is_expected.to validate_length_of(:name).is_within(0..255) } it { is_expected.to validate_length_of(:name).is_within(0..255) }
...@@ -96,4 +98,34 @@ describe Environment, models: true do ...@@ -96,4 +98,34 @@ describe Environment, models: true do
is_expected.to be_nil is_expected.to be_nil
end end
end end
describe '#stoppable?' do
subject { environment.stoppable? }
context 'when no other actions' do
it { is_expected.to be_falsey }
end
context 'when matching action is defined' do
let(:build) { create(:ci_build) }
let!(:deployment) { create(:deployment, environment: environment, deployable: build, on_stop: 'close_app') }
let!(:close_action) { create(:ci_build, pipeline: build.pipeline, name: 'close_app', when: :manual) }
context 'when environment is available' do
before do
environment.start
end
it { is_expected.to be_truthy }
end
context 'when environment is stopped' do
before do
environment.stop
end
it { is_expected.to be_falsey }
end
end
end
end end
...@@ -7,11 +7,13 @@ describe CreateDeploymentService, services: true do ...@@ -7,11 +7,13 @@ describe CreateDeploymentService, services: true do
let(:service) { described_class.new(project, user, params) } let(:service) { described_class.new(project, user, params) }
describe '#execute' do describe '#execute' do
let(:options) { nil }
let(:params) do let(:params) do
{ environment: 'production', { environment: 'production',
ref: 'master', ref: 'master',
tag: false, tag: false,
sha: '97de212e80737a608d939f648d959671fb0a0142', sha: '97de212e80737a608d939f648d959671fb0a0142',
options: options
} }
end end
...@@ -28,7 +30,7 @@ describe CreateDeploymentService, services: true do ...@@ -28,7 +30,7 @@ describe CreateDeploymentService, services: true do
end end
context 'when environment exist' do context 'when environment exist' do
before { create(:environment, project: project, name: 'production') } let!(:environment) { create(:environment, project: project, name: 'production') }
it 'does not create a new environment' do it 'does not create a new environment' do
expect { subject }.not_to change { Environment.count } expect { subject }.not_to change { Environment.count }
...@@ -37,6 +39,46 @@ describe CreateDeploymentService, services: true do ...@@ -37,6 +39,46 @@ describe CreateDeploymentService, services: true do
it 'does create a deployment' do it 'does create a deployment' do
expect(subject).to be_persisted expect(subject).to be_persisted
end end
context 'and start action is defined' do
let(:options) { { action: 'start' } }
context 'and environment is stopped' do
before do
environment.stop
end
it 'makes environment available' do
subject
expect(environment.reload).to be_available
end
it 'does not create a deployment' do
expect(subject).not_to be_persisted
end
end
end
context 'and stop action is defined' do
let(:options) { { action: 'stop' } }
context 'and environment is available' do
before do
environment.start
end
it 'makes environment stopped' do
subject
expect(environment.reload).to be_stopped
end
it 'does not create a deployment' do
expect(subject).to be_nil
end
end
end
end end
context 'for environment with invalid name' do context 'for environment with invalid name' do
...@@ -83,6 +125,23 @@ describe CreateDeploymentService, services: true do ...@@ -83,6 +125,23 @@ describe CreateDeploymentService, services: true do
it 'does create a new deployment' do it 'does create a new deployment' do
expect(subject).to be_persisted expect(subject).to be_persisted
end end
context 'and environment exist' do
it 'does not create a new environment' do
expect { subject }.not_to change { Environment.count }
end
it 'updates external url' do
subject
expect(subject.environment.name).to eq('review-apps/feature-review-apps')
expect(subject.environment.external_url).to eq('http://feature-review-apps.review-apps.gitlab.com')
end
it 'does create a new deployment' do
expect(subject).to be_persisted
end
end
end end
context 'when project was removed' do context 'when project was removed' do
......
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