diff options
author | Pawel Chojnacki <pawel@chojnacki.ws> | 2018-01-03 15:06:20 +0100 |
---|---|---|
committer | Pawel Chojnacki <pawel@chojnacki.ws> | 2018-01-03 18:34:31 +0100 |
commit | 10637f0ba9f908c02d6c8e3b2cadf694e9d1170a (patch) | |
tree | ca4cc5c511f2bc7adc2a4d5d3a4050b2e595f1fe | |
parent | 91cb64bf0fb3096f07174585f5a0e3db69181571 (diff) | |
download | gitlab-ce-pawel/last-deployment-check.tar.gz |
Add first? deployment check to see if a deployment is a first one for given environmentpawel/last-deployment-check
-rw-r--r-- | app/models/deployment.rb | 4 | ||||
-rw-r--r-- | app/models/environment.rb | 1 | ||||
-rw-r--r-- | app/serializers/deployment_entity.rb | 1 | ||||
-rw-r--r-- | app/serializers/deployment_serializer.rb | 2 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/deployments.json | 4 | ||||
-rw-r--r-- | spec/models/deployment_spec.rb | 32 | ||||
-rw-r--r-- | spec/models/environment_spec.rb | 30 |
7 files changed, 73 insertions, 1 deletions
diff --git a/app/models/deployment.rb b/app/models/deployment.rb index 7bcded5b5e1..aa69e0e5621 100644 --- a/app/models/deployment.rb +++ b/app/models/deployment.rb @@ -30,6 +30,10 @@ class Deployment < ActiveRecord::Base self == environment.last_deployment end + def first? + self == environment.first_deployment + end + def create_ref project.repository.create_ref(ref, ref_path) end diff --git a/app/models/environment.rb b/app/models/environment.rb index bf69b4c50f0..0a8398ff29b 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -9,6 +9,7 @@ class Environment < ActiveRecord::Base has_many :deployments, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent has_one :last_deployment, -> { order('deployments.id DESC') }, class_name: 'Deployment' + has_one :first_deployment, -> { order('deployments.id ASC') }, class_name: 'Deployment' before_validation :nullify_external_url before_validation :generate_slug, if: ->(env) { env.slug.blank? } diff --git a/app/serializers/deployment_entity.rb b/app/serializers/deployment_entity.rb index 241c689bccd..6bacf746246 100644 --- a/app/serializers/deployment_entity.rb +++ b/app/serializers/deployment_entity.rb @@ -18,6 +18,7 @@ class DeploymentEntity < Grape::Entity expose :created_at expose :tag expose :last? + expose :first? expose :user, using: UserEntity expose :commit, using: CommitEntity diff --git a/app/serializers/deployment_serializer.rb b/app/serializers/deployment_serializer.rb index cba5c3f311f..001efc22135 100644 --- a/app/serializers/deployment_serializer.rb +++ b/app/serializers/deployment_serializer.rb @@ -2,7 +2,7 @@ class DeploymentSerializer < BaseSerializer entity DeploymentEntity def represent_concise(resource, opts = {}) - opts[:only] = [:iid, :id, :sha, :created_at, :tag, :last?, :id, ref: [:name]] + opts[:only] = [:iid, :id, :sha, :created_at, :tag, :last?, :first?, :id, ref: [:name]] represent(resource, opts) end end diff --git a/spec/fixtures/api/schemas/deployments.json b/spec/fixtures/api/schemas/deployments.json index 1112f23aab2..80b7faecf1e 100644 --- a/spec/fixtures/api/schemas/deployments.json +++ b/spec/fixtures/api/schemas/deployments.json @@ -17,6 +17,9 @@ "last?": { "type": "boolean" }, + "first?": { + "type": "boolean" + }, "ref": { "additionalProperties": false, "properties": { @@ -42,6 +45,7 @@ "iid", "tag", "last?", + "first?", "ref", "id" ], diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index ba8aa13d5ad..a9226340d96 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -29,6 +29,38 @@ describe Deployment do end end + describe '#last?' do + let(:environment) { create(:environment) } + let!(:first_deployment) { create(:deployment, environment: environment) } + let!(:middle_deployment) { create(:deployment, environment: environment) } + let!(:last_deployment) { create(:deployment, environment: environment) } + + it 'is true for last deployment ' do + expect(last_deployment.last?).to be(true) + end + + it 'is false for previous deployments' do + expect(middle_deployment.last?).to be(false) + expect(first_deployment.last?).to be(false) + end + end + + describe '#first?' do + let(:environment) { create(:environment) } + let!(:first_deployment) { create(:deployment, environment: environment) } + let!(:second_deployment) { create(:deployment, environment: environment) } + let!(:last_deployment) { create(:deployment, environment: environment) } + + it 'is true for first deployment' do + expect(first_deployment.first?).to be(true) + end + + it 'is false for subsequent deployments' do + expect(second_deployment.first?).to be(false) + expect(last_deployment.first?).to be(false) + end + end + describe '#includes_commit?' do let(:project) { create(:project, :repository) } let(:environment) { create(:environment, project: project) } diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb index 6f24a039998..191753fa56a 100644 --- a/spec/models/environment_spec.rb +++ b/spec/models/environment_spec.rb @@ -154,6 +154,36 @@ describe Environment do end end + describe '#first_deployment' do + let(:project) { create(:project, :repository) } + let!(:deployment) { create(:deployment, environment: environment) } + let!(:deployment1) { create(:deployment, environment: environment) } + let(:empty_environment) { create(:environment) } + + it 'returns deployment id for the environment' do + expect(environment.first_deployment).to eq(deployment) + end + + it 'return nil when no deployment is found' do + expect(empty_environment.first_deployment).to eq(nil) + end + end + + describe '#last_deployment' do + let(:project) { create(:project, :repository) } + let!(:deployment) { create(:deployment, environment: environment) } + let!(:deployment1) { create(:deployment, environment: environment) } + let(:empty_environment) { create(:environment) } + + it 'returns deployment id for the environment' do + expect(environment.last_deployment).to eq(deployment1) + end + + it 'return nil when no deployment is found' do + expect(empty_environment.last_deployment).to eq(nil) + end + end + describe '#environment_type' do subject { environment.environment_type } |