Commit 10637f0b authored by Pawel Chojnacki's avatar Pawel Chojnacki
Browse files

Add first? deployment check to see if a deployment is a first one for given environment

parent 91cb64bf
......@@ -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
......
......@@ -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? }
......
......@@ -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
......
......@@ -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
......@@ -17,6 +17,9 @@
"last?": {
"type": "boolean"
},
"first?": {
"type": "boolean"
},
"ref": {
"additionalProperties": false,
"properties": {
......@@ -42,6 +45,7 @@
"iid",
"tag",
"last?",
"first?",
"ref",
"id"
],
......
......@@ -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) }
......
......@@ -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 }
......
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