From 49f72e705fa225175834b5e6b2b1f78f1f608b9c Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Tue, 2 Aug 2016 14:01:22 +0200 Subject: Show deployment status on a MR view --- CHANGELOG | 1 + app/models/deployment.rb | 7 ++++ app/models/environment.rb | 6 ++++ app/models/merge_request.rb | 6 ++++ .../merge_requests/widget/_heading.html.haml | 40 ++++++++++++++-------- 5 files changed, 46 insertions(+), 14 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 8cefaf5d70a..7fb3ccb09ab 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -37,6 +37,7 @@ v 8.11.0 (unreleased) - Update `timeago` plugin to use multiple string/locale settings - Remove unused images (ClemMakesApps) - Limit git rev-list output count to one in forced push check + - Show deployment status on merge requests - Clean up unused routes (Josef Strzibny) - Fix issue on empty project to allow developers to only push to protected branches if given permission - Add green outline to New Branch button. !5447 (winniehell) diff --git a/app/models/deployment.rb b/app/models/deployment.rb index 1a7cd60817e..67a4f3998ec 100644 --- a/app/models/deployment.rb +++ b/app/models/deployment.rb @@ -36,4 +36,11 @@ class Deployment < ActiveRecord::Base def manual_actions deployable.try(:other_actions) end + + def deployed_to(ref) + commit = project.commit(ref) + return false unless commit + + project.repository.merge_base(commit.id, sha) == commit.id + end end diff --git a/app/models/environment.rb b/app/models/environment.rb index baed106e8c8..f6fdb8d1ecf 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -25,4 +25,10 @@ class Environment < ActiveRecord::Base def nullify_external_url self.external_url = nil if self.external_url.blank? end + + def deployed_to?(ref) + return unless last_deployment + + last_deployment.deployed_to(ref) + end end diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index b1fb3ce5d69..85e4d1f6b51 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -590,6 +590,12 @@ class MergeRequest < ActiveRecord::Base !pipeline || pipeline.success? end + def environments + target_project.environments.select do |environment| + environment.deployed_to?(ref_path) + end + end + def state_human_name if merged? "Merged" diff --git a/app/views/projects/merge_requests/widget/_heading.html.haml b/app/views/projects/merge_requests/widget/_heading.html.haml index 6ef640bb654..0581659b742 100644 --- a/app/views/projects/merge_requests/widget/_heading.html.haml +++ b/app/views/projects/merge_requests/widget/_heading.html.haml @@ -1,21 +1,22 @@ - if @pipeline .mr-widget-heading - - %w[success success_with_warnings skipped canceled failed running pending].each do |status| - .ci_widget{ class: "ci-#{status}", style: ("display:none" unless @pipeline.status == status) } - = ci_icon_for_status(status) - %span - CI build - = ci_label_for_status(status) - for - - commit = @merge_request.diff_head_commit - = succeed "." do - = link_to @pipeline.short_sha, namespace_project_commit_path(@merge_request.source_project.namespace, @merge_request.source_project, @pipeline.sha), class: "monospace" - %span.ci-coverage - = link_to "View details", builds_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), class: "js-show-tab", data: {action: 'builds'} + - @merge_request.environments.each do |environments| + - %w[success success_with_warnings skipped canceled failed running pending].each do |status| + .ci_widget{ class: "ci-#{status}", style: ("display:none" unless @pipeline.status == status) } + = ci_icon_for_status(status) + %span + CI build + = ci_label_for_status(status) + for + - commit = @merge_request.diff_head_commit + = succeed "." do + = link_to @pipeline.short_sha, namespace_project_commit_path(@merge_request.source_project.namespace, @merge_request.source_project, @pipeline.sha), class: "monospace" + %span.ci-coverage + = link_to "View details", builds_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), class: "js-show-tab", data: {action: 'builds'} - elsif @merge_request.has_ci? - - # Compatibility with old CI integrations (ex jenkins) when you request status from CI server via AJAX - - # Remove in later versions when services like Jenkins will set CI status via Commit status API + // Compatibility with old CI integrations (ex jenkins) when you request status from CI server via AJAX + // Remove in later versions when services like Jenkins will set CI status via Commit status API .mr-widget-heading - %w[success skipped canceled failed running pending].each do |status| .ci_widget{class: "ci-#{status}", style: "display:none"} @@ -42,3 +43,14 @@ .ci_widget.ci-error{style: "display:none"} = icon("times-circle") Could not connect to the CI server. Please check your settings and try again. + +- @merge_request.environments.each do |environment| + .mr-widget-heading + .ci_widget{ class: "ci-success" } + = ci_icon_for_status("success") + %span + Released to #{environment.name} + = succeed '.' do + = time_ago_with_tooltip(environment.created_at, placement: 'bottom') + - if environment.external_url + = link_to icon('external-link'), environment.external_url -- cgit v1.2.3 From 826862d48ef80ddd849b9e3cb05ef37ba7be41e9 Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Wed, 3 Aug 2016 10:22:01 +0200 Subject: Tests for release status heading on MR#show --- .../merge_requests/widget/_heading.html.haml | 4 ++-- .../merge_requests/_heading.html.haml_spec.rb | 23 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 spec/views/projects/merge_requests/_heading.html.haml_spec.rb diff --git a/app/views/projects/merge_requests/widget/_heading.html.haml b/app/views/projects/merge_requests/widget/_heading.html.haml index 0581659b742..9590c1dbbd1 100644 --- a/app/views/projects/merge_requests/widget/_heading.html.haml +++ b/app/views/projects/merge_requests/widget/_heading.html.haml @@ -15,8 +15,8 @@ = link_to "View details", builds_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), class: "js-show-tab", data: {action: 'builds'} - elsif @merge_request.has_ci? - // Compatibility with old CI integrations (ex jenkins) when you request status from CI server via AJAX - // Remove in later versions when services like Jenkins will set CI status via Commit status API + - # Compatibility with old CI integrations (ex jenkins) when you request status from CI server via AJAX + - # Remove in later versions when services like Jenkins will set CI status via Commit status API .mr-widget-heading - %w[success skipped canceled failed running pending].each do |status| .ci_widget{class: "ci-#{status}", style: "display:none"} diff --git a/spec/views/projects/merge_requests/_heading.html.haml_spec.rb b/spec/views/projects/merge_requests/_heading.html.haml_spec.rb new file mode 100644 index 00000000000..b78c9c7e9ef --- /dev/null +++ b/spec/views/projects/merge_requests/_heading.html.haml_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +describe 'projects/merge_requests/widget/_heading' do + include Devise::TestHelpers + + context 'when released to an environment' do + let(:project) { merge_request.target_project } + let(:merge_request) { create(:merge_request, :merged) } + let(:environment) { create(:environment, project: project) } + let!(:deployment) { create(:deployment, environment: environment, + sha: 'a5391128b0ef5d21df5dd23d98557f4ef12fae20') } + + before do + assign(:merge_request, merge_request) + + render + end + + it 'displays that the environment is deployed' do + expect(rendered).to match('Released to') + end + end +end -- cgit v1.2.3 From b497b0ce3fc3c1882639f9c7d55f7991ce41f15d Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Wed, 3 Aug 2016 13:37:39 +0200 Subject: Incorporate feedback --- CHANGELOG | 2 +- app/models/deployment.rb | 4 ++-- app/models/environment.rb | 6 +++--- app/models/merge_request.rb | 2 +- spec/models/deployment_spec.rb | 20 ++++++++++++++++++++ spec/models/environment_spec.rb | 10 ++++++++++ spec/models/merge_request_spec.rb | 15 +++++++++++++++ .../merge_requests/_heading.html.haml_spec.rb | 6 ++++-- 8 files changed, 56 insertions(+), 9 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7fb3ccb09ab..b26216f33eb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -37,7 +37,7 @@ v 8.11.0 (unreleased) - Update `timeago` plugin to use multiple string/locale settings - Remove unused images (ClemMakesApps) - Limit git rev-list output count to one in forced push check - - Show deployment status on merge requests + - Show deployment status on merge requests with external URLs - Clean up unused routes (Josef Strzibny) - Fix issue on empty project to allow developers to only push to protected branches if given permission - Add green outline to New Branch button. !5447 (winniehell) diff --git a/app/models/deployment.rb b/app/models/deployment.rb index 67a4f3998ec..19b08f49d96 100644 --- a/app/models/deployment.rb +++ b/app/models/deployment.rb @@ -37,10 +37,10 @@ class Deployment < ActiveRecord::Base deployable.try(:other_actions) end - def deployed_to(ref) + def deployed_to?(ref) commit = project.commit(ref) return false unless commit - project.repository.merge_base(commit.id, sha) == commit.id + project.repository.is_ancestor?(commit.id, sha) end end diff --git a/app/models/environment.rb b/app/models/environment.rb index f6fdb8d1ecf..7247125f8a0 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -26,9 +26,9 @@ class Environment < ActiveRecord::Base self.external_url = nil if self.external_url.blank? end - def deployed_to?(ref) - return unless last_deployment + def deployed_from?(ref) + return false unless last_deployment - last_deployment.deployed_to(ref) + last_deployment.deployed_to?(ref) end end diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 85e4d1f6b51..945b0d76505 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -592,7 +592,7 @@ class MergeRequest < ActiveRecord::Base def environments target_project.environments.select do |environment| - environment.deployed_to?(ref_path) + environment.deployed_from?(ref_path) end end diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index 7df3df4bb9e..107f8b38acf 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -15,4 +15,24 @@ describe Deployment, models: true do it { is_expected.to validate_presence_of(:ref) } it { is_expected.to validate_presence_of(:sha) } + + describe '#deployed_to?' do + let(:project) { create(:project) } + let(:environment) { create(:environment, project: project) } + let(:deployment) do + create(:deployment, environment: environment, sha: '5f923865dde3436854e9ceb9cdb7815618d4e849') + end + + context 'when there is no project commit' do + it 'returns false' do + expect(deployment.deployed_to?('random-branch')).to be false + end + end + + context 'when they share the same tree branch' do + it 'returns true' do + expect(deployment.deployed_to?('HEAD')).to be true + end + end + end end diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb index 8a84ac0a7c7..e65b4f82eff 100644 --- a/spec/models/environment_spec.rb +++ b/spec/models/environment_spec.rb @@ -30,4 +30,14 @@ describe Environment, models: true do expect(env.external_url).to be_nil end end + + describe '#deployed_from?' do + let(:environment) { create(:environment) } + + context 'without a last deployment' do + it "returns false" do + expect(environment.deployed_from?('HEAD')).to be false + end + end + end end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 3270b877c1a..0727dd29951 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -674,6 +674,21 @@ describe MergeRequest, models: true do end end + describe "#environments" do + let(:project) { create(:project) } + + let!(:deployment) { create(:deployment, environment: environment, sha: '5f923865dde3436854e9ceb9cdb7815618d4e849') } + + let!(:environment) { create(:environment, project: project) } + let!(:environment1) { create(:environment, project: project) } + + let(:merge_request) { create(:merge_request, source_project: project) } + + it 'selects deployed environments' do + expect(merge_request.environments).to eq [environment] + end + end + describe "#reload_diff" do let(:note) { create(:diff_note_on_merge_request, project: subject.project, noteable: subject) } diff --git a/spec/views/projects/merge_requests/_heading.html.haml_spec.rb b/spec/views/projects/merge_requests/_heading.html.haml_spec.rb index b78c9c7e9ef..843a496f4c3 100644 --- a/spec/views/projects/merge_requests/_heading.html.haml_spec.rb +++ b/spec/views/projects/merge_requests/_heading.html.haml_spec.rb @@ -7,8 +7,10 @@ describe 'projects/merge_requests/widget/_heading' do let(:project) { merge_request.target_project } let(:merge_request) { create(:merge_request, :merged) } let(:environment) { create(:environment, project: project) } - let!(:deployment) { create(:deployment, environment: environment, - sha: 'a5391128b0ef5d21df5dd23d98557f4ef12fae20') } + let!(:deployment) do + create(:deployment, environment: environment, + sha: 'a5391128b0ef5d21df5dd23d98557f4ef12fae20') + end before do assign(:merge_request, merge_request) -- cgit v1.2.3 From 03ea01946524a74773b24430c81804c2724b84b6 Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Thu, 4 Aug 2016 11:29:41 +0200 Subject: CI build status not per environment --- .../merge_requests/widget/_heading.html.haml | 36 ++++++++++------------ spec/models/deployment_spec.rb | 3 +- spec/models/merge_request_spec.rb | 5 ++- .../merge_requests/_heading.html.haml_spec.rb | 2 +- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/app/views/projects/merge_requests/widget/_heading.html.haml b/app/views/projects/merge_requests/widget/_heading.html.haml index 9590c1dbbd1..16e923b831c 100644 --- a/app/views/projects/merge_requests/widget/_heading.html.haml +++ b/app/views/projects/merge_requests/widget/_heading.html.haml @@ -1,18 +1,17 @@ - if @pipeline .mr-widget-heading - - @merge_request.environments.each do |environments| - - %w[success success_with_warnings skipped canceled failed running pending].each do |status| - .ci_widget{ class: "ci-#{status}", style: ("display:none" unless @pipeline.status == status) } - = ci_icon_for_status(status) - %span - CI build - = ci_label_for_status(status) - for - - commit = @merge_request.diff_head_commit - = succeed "." do - = link_to @pipeline.short_sha, namespace_project_commit_path(@merge_request.source_project.namespace, @merge_request.source_project, @pipeline.sha), class: "monospace" - %span.ci-coverage - = link_to "View details", builds_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), class: "js-show-tab", data: {action: 'builds'} + - %w[success success_with_warnings skipped canceled failed running pending].each do |status| + .ci_widget{ class: "ci-#{status}", style: ("display:none" unless @pipeline.status == status) } + = ci_icon_for_status(status) + %span + CI build + = ci_label_for_status(status) + for + - commit = @merge_request.diff_head_commit + = succeed "." do + = link_to @pipeline.short_sha, namespace_project_commit_path(@merge_request.source_project.namespace, @merge_request.source_project, @pipeline.sha), class: "monospace" + %span.ci-coverage + = link_to "View details", builds_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), class: "js-show-tab", data: {action: 'builds'} - elsif @merge_request.has_ci? - # Compatibility with old CI integrations (ex jenkins) when you request status from CI server via AJAX @@ -48,9 +47,8 @@ .mr-widget-heading .ci_widget{ class: "ci-success" } = ci_icon_for_status("success") - %span - Released to #{environment.name} - = succeed '.' do - = time_ago_with_tooltip(environment.created_at, placement: 'bottom') - - if environment.external_url - = link_to icon('external-link'), environment.external_url + %span.hidden-sm + Released to #{environment.name}. + - external_url = environment.external_url + - if external_url + = link_to icon('external-link', text: "View on #{external_url.gsub(/\A.*?:\/\//, '')}"), external_url diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index 107f8b38acf..d7cb142dd32 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -20,7 +20,8 @@ describe Deployment, models: true do let(:project) { create(:project) } let(:environment) { create(:environment, project: project) } let(:deployment) do - create(:deployment, environment: environment, sha: '5f923865dde3436854e9ceb9cdb7815618d4e849') + create(:deployment, environment: environment, + sha: '5f923865dde3436854e9ceb9cdb7815618d4e849') end context 'when there is no project commit' do diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 0727dd29951..e605720a2dd 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -677,7 +677,10 @@ describe MergeRequest, models: true do describe "#environments" do let(:project) { create(:project) } - let!(:deployment) { create(:deployment, environment: environment, sha: '5f923865dde3436854e9ceb9cdb7815618d4e849') } + let!(:deployment) do + create(:deployment, environment: environment, + sha: '5f923865dde3436854e9ceb9cdb7815618d4e849') + end let!(:environment) { create(:environment, project: project) } let!(:environment1) { create(:environment, project: project) } diff --git a/spec/views/projects/merge_requests/_heading.html.haml_spec.rb b/spec/views/projects/merge_requests/_heading.html.haml_spec.rb index 843a496f4c3..0302f14e660 100644 --- a/spec/views/projects/merge_requests/_heading.html.haml_spec.rb +++ b/spec/views/projects/merge_requests/_heading.html.haml_spec.rb @@ -19,7 +19,7 @@ describe 'projects/merge_requests/widget/_heading' do end it 'displays that the environment is deployed' do - expect(rendered).to match('Released to') + expect(rendered).to match("Released to #{environment.name}") end end end -- cgit v1.2.3 From 07fc2f852a0b4136b6d97c1d9773819c47e7e8e7 Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Tue, 9 Aug 2016 15:11:14 +0200 Subject: Method names changed to #includes_commit? --- app/assets/stylesheets/pages/merge_requests.scss | 5 +++- app/models/deployment.rb | 3 +-- app/models/environment.rb | 4 +-- app/models/merge_request.rb | 4 ++- .../merge_requests/widget/_heading.html.haml | 9 ++++--- db/schema.rb | 2 +- spec/models/deployment_spec.rb | 13 +++++---- spec/models/environment_spec.rb | 31 +++++++++++++++++++--- spec/models/merge_request_spec.rb | 11 +++----- .../merge_requests/_heading.html.haml_spec.rb | 7 ++--- 10 files changed, 60 insertions(+), 29 deletions(-) diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index 0a661e529f0..b4636269518 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -69,6 +69,10 @@ &.ci-success { color: $gl-success; + + a.environment { + color: inherit; + } } &.ci-success_with_warnings { @@ -126,7 +130,6 @@ &.has-conflicts .fa-exclamation-triangle { color: $gl-warning; } - } p:last-child { diff --git a/app/models/deployment.rb b/app/models/deployment.rb index 19b08f49d96..1e338889714 100644 --- a/app/models/deployment.rb +++ b/app/models/deployment.rb @@ -37,8 +37,7 @@ class Deployment < ActiveRecord::Base deployable.try(:other_actions) end - def deployed_to?(ref) - commit = project.commit(ref) + def includes_commit?(commit) return false unless commit project.repository.is_ancestor?(commit.id, sha) diff --git a/app/models/environment.rb b/app/models/environment.rb index 7247125f8a0..75e6f869786 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -26,9 +26,9 @@ class Environment < ActiveRecord::Base self.external_url = nil if self.external_url.blank? end - def deployed_from?(ref) + def includes_commit?(commit) return false unless last_deployment - last_deployment.deployed_to?(ref) + last_deployment.includes_commit?(commit) end end diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 945b0d76505..491ee2792ec 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -591,8 +591,10 @@ class MergeRequest < ActiveRecord::Base end def environments + return unless diff_head_commit + target_project.environments.select do |environment| - environment.deployed_from?(ref_path) + environment.includes_commit?(diff_head_commit) end end diff --git a/app/views/projects/merge_requests/widget/_heading.html.haml b/app/views/projects/merge_requests/widget/_heading.html.haml index 16e923b831c..494695a03a5 100644 --- a/app/views/projects/merge_requests/widget/_heading.html.haml +++ b/app/views/projects/merge_requests/widget/_heading.html.haml @@ -45,10 +45,13 @@ - @merge_request.environments.each do |environment| .mr-widget-heading - .ci_widget{ class: "ci-success" } + .ci_widget.ci-success = ci_icon_for_status("success") %span.hidden-sm - Released to #{environment.name}. + Deployed to + = succeed '.' do + = link_to environment.name, namespace_project_environment_path(@project.namespace, @project, environment), class: 'environment' - external_url = environment.external_url - if external_url - = link_to icon('external-link', text: "View on #{external_url.gsub(/\A.*?:\/\//, '')}"), external_url + = link_to external_url, target: '_blank' do + = icon('external-link', text: "View on #{external_url.gsub(/\A.*?:\/\//, '')}", right: true) diff --git a/db/schema.rb b/db/schema.rb index 6c85e1e9dba..1aa4e8a73d0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -589,12 +589,12 @@ ActiveRecord::Schema.define(version: 20160810142633) do t.datetime "locked_at" t.integer "updated_by_id" t.string "merge_error" - t.text "merge_params" t.boolean "merge_when_build_succeeds", default: false, null: false t.integer "merge_user_id" t.string "merge_commit_sha" t.datetime "deleted_at" t.string "in_progress_merge_commit_sha" + t.text "merge_params" end add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index d7cb142dd32..bfff639ad78 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -16,23 +16,26 @@ describe Deployment, models: true do it { is_expected.to validate_presence_of(:ref) } it { is_expected.to validate_presence_of(:sha) } - describe '#deployed_to?' do + describe '#includes_commit?' do let(:project) { create(:project) } let(:environment) { create(:environment, project: project) } let(:deployment) do - create(:deployment, environment: environment, - sha: '5f923865dde3436854e9ceb9cdb7815618d4e849') + create(:deployment, environment: environment, sha: project.commit.id) end context 'when there is no project commit' do it 'returns false' do - expect(deployment.deployed_to?('random-branch')).to be false + commit = project.commit('feature') + + expect(deployment.includes_commit?(commit)).to be false end end context 'when they share the same tree branch' do it 'returns true' do - expect(deployment.deployed_to?('HEAD')).to be true + commit = project.commit + + expect(deployment.includes_commit?(commit)).to be true end end end diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb index e65b4f82eff..c881897926e 100644 --- a/spec/models/environment_spec.rb +++ b/spec/models/environment_spec.rb @@ -31,12 +31,35 @@ describe Environment, models: true do end end - describe '#deployed_from?' do - let(:environment) { create(:environment) } - + describe '#includes_commit?' do context 'without a last deployment' do it "returns false" do - expect(environment.deployed_from?('HEAD')).to be false + expect(environment.includes_commit?('HEAD')).to be false + end + end + + context 'with a last deployment' do + let(:project) { create(:project) } + let(:environment) { create(:environment, project: project) } + + let!(:deployment) do + create(:deployment, environment: environment, sha: project.commit('master').id) + end + + context 'in the same branch' do + it 'returns true' do + expect(environment.includes_commit?(RepoHelpers.sample_commit)).to be true + end + end + + context 'not in the same branch' do + before do + deployment.update(sha: project.commit('feature').id) + end + + it 'returns false' do + expect(environment.includes_commit?(RepoHelpers.sample_commit)).to be false + end end end end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index e605720a2dd..35a4418ebb3 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -676,18 +676,15 @@ describe MergeRequest, models: true do describe "#environments" do let(:project) { create(:project) } - - let!(:deployment) do - create(:deployment, environment: environment, - sha: '5f923865dde3436854e9ceb9cdb7815618d4e849') - end - let!(:environment) { create(:environment, project: project) } let!(:environment1) { create(:environment, project: project) } - + let!(:environment2) { create(:environment, project: project) } let(:merge_request) { create(:merge_request, source_project: project) } it 'selects deployed environments' do + create(:deployment, environment: environment, sha: project.commit('master').id) + create(:deployment, environment: environment1, sha: project.commit('feature').id) + expect(merge_request.environments).to eq [environment] end end diff --git a/spec/views/projects/merge_requests/_heading.html.haml_spec.rb b/spec/views/projects/merge_requests/_heading.html.haml_spec.rb index 0302f14e660..733b2dfa7ff 100644 --- a/spec/views/projects/merge_requests/_heading.html.haml_spec.rb +++ b/spec/views/projects/merge_requests/_heading.html.haml_spec.rb @@ -8,18 +8,19 @@ describe 'projects/merge_requests/widget/_heading' do let(:merge_request) { create(:merge_request, :merged) } let(:environment) { create(:environment, project: project) } let!(:deployment) do - create(:deployment, environment: environment, - sha: 'a5391128b0ef5d21df5dd23d98557f4ef12fae20') + create(:deployment, environment: environment, sha: project.commit('master').id) end before do assign(:merge_request, merge_request) + assign(:project, project) render end it 'displays that the environment is deployed' do - expect(rendered).to match("Released to #{environment.name}") + expect(rendered).to match("Deployed to") + expect(rendered).to match("#{environment.name}") end end end -- cgit v1.2.3