diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-09-21 12:08:11 +0200 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-09-21 12:08:11 +0200 |
commit | 955b9347a470a9c546bd1777640bfeb6104e3dd6 (patch) | |
tree | 4704705aa8dced5a5850a17b207abdfbb2d97ce3 | |
parent | d891051cd24e8ef15ed091e16bf80925c08907d6 (diff) | |
download | gitlab-ce-955b9347a470a9c546bd1777640bfeb6104e3dd6.tar.gz |
Add tests to verify the correctness of returned environments
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | app/models/merge_request.rb | 6 | ||||
-rw-r--r-- | app/models/project.rb | 2 | ||||
-rw-r--r-- | app/views/projects/merge_requests/widget/_heading.html.haml | 2 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 52 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 41 |
6 files changed, 93 insertions, 11 deletions
diff --git a/CHANGELOG b/CHANGELOG index 9370bdd17d2..7743aa01ce7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -24,6 +24,7 @@ v 8.12.0 (unreleased) - Cycle analytics (first iteration) !5986 - Remove vendor prefixes for linear-gradient CSS (ClemMakesApps) - Move pushes_since_gc from the database to Redis + - Limit number of shown environments on Merge Request: show only environments for target_branch, source_branch and tags - Add font color contrast to external label in admin area (ClemMakesApps) - Change logo animation to CSS (ClemMakesApps) - Instructions for enabling Git packfile bitmaps !6104 diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 1cdd0585b68..4c51c979599 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -672,10 +672,10 @@ class MergeRequest < ActiveRecord::Base environments = source_project.environments_for( source_branch, diff_head_commit) - environments <<= target_project.environments_for( - source_branch, diff_head_commit, with_tags: true) + environments += target_project.environments_for( + target_branch, diff_head_commit, with_tags: true) - environments + environments.uniq end def state_human_name diff --git a/app/models/project.rb b/app/models/project.rb index 22402305f59..0fe18e41cce 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1304,7 +1304,7 @@ class Project < ActiveRecord::Base environment_ids.where(ref: ref) end - Environment.where(id: environment_ids).map do |environment| + Environment.where(id: environment_ids).select do |environment| environment.includes_commit?(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 d8b19d8c951..8b7bd7f728e 100644 --- a/app/views/projects/merge_requests/widget/_heading.html.haml +++ b/app/views/projects/merge_requests/widget/_heading.html.haml @@ -43,7 +43,7 @@ = icon("times-circle") Could not connect to the CI server. Please check your settings and try again. -- @merge_request.environments.each do |environment| +- @merge_request.environments.sort_by(&:name).each do |environment| - if can?(current_user, :read_environment, environment) .mr-widget-heading .ci_widget.ci-success diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 06feeb1bbba..4636f2023f6 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -701,16 +701,56 @@ describe MergeRequest, models: true do end end - describe "#environments" do + describe '#environments' do let(:project) { create(:project) } let(:merge_request) { create(:merge_request, source_project: project) } - it 'selects deployed environments' do - environments = create_list(:environment, 3, project: project) - create(:deployment, environment: environments.first, sha: project.commit('master').id) - create(:deployment, environment: environments.second, sha: project.commit('feature').id) + context 'with multiple environments' do + let(:environments) { create_list(:environment, 3, project: project) } - expect(merge_request.environments).to eq [environments.first] + before do + create(:deployment, environment: environments.first, ref: 'master', sha: project.commit('master').id) + create(:deployment, environment: environments.second, ref: 'feature', sha: project.commit('feature').id) + end + + it 'selects deployed environments' do + expect(merge_request.environments).to contain_exactly(environments.first) + end + end + + context 'with environments on source project' do + let(:source_project) do + create(:project) do |fork_project| + fork_project.create_forked_project_link(forked_to_project_id: fork_project.id, forked_from_project_id: project.id) + end + end + let(:merge_request) do + create(:merge_request, + source_project: source_project, source_branch: 'feature', + target_project: project) + end + + let(:source_environment) { create(:environment, project: source_project) } + + before do + create(:deployment, environment: source_environment, ref: 'feature', sha: merge_request.diff_head_sha) + end + + it 'selects deployed environments' do + expect(merge_request.environments).to contain_exactly(source_environment) + end + + context 'with environments on target project' do + let(:target_environment) { create(:environment, project: project) } + + before do + create(:deployment, environment: target_environment, tag: true, sha: merge_request.diff_head_sha) + end + + it 'selects deployed environments' do + expect(merge_request.environments).to contain_exactly(source_environment, target_environment) + end + end end context 'without a diff_head_commit' do diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index a388ff703a6..68f3128bf63 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -1647,6 +1647,47 @@ describe Project, models: true do end end + describe '#environments_for' do + let(:project) { create(:project) } + let(:environment) { create(:environment, project: project) } + + context 'tagged deployment' do + before do + create(:deployment, environment: environment, ref: '1.0', tag: true, sha: project.commit.id) + end + + it 'returns environment when with_tags is set' do + expect(project.environments_for('master', project.commit, with_tags: true)).to contain_exactly(environment) + end + + it 'does not return environment when no with_tags is set' do + expect(project.environments_for('master', project.commit)).not_to contain_exactly(environment) + end + + it 'does not return environment when commit is not part of deployment' do + expect(project.environments_for('master', project.commit('feature'))).not_to contain_exactly(environment) + end + end + + context 'branch deployment' do + before do + create(:deployment, environment: environment, ref: 'master', sha: project.commit.id) + end + + it 'returns environment when ref is set' do + expect(project.environments_for('master', project.commit)).to contain_exactly(environment) + end + + it 'does not environment when ref is different' do + expect(project.environments_for('feature', project.commit)).not_to contain_exactly(environment) + end + + it 'does not return environment when commit is not part of deployment' do + expect(project.environments_for('master', project.commit('feature'))).not_to contain_exactly(environment) + end + end + end + def enable_lfs allow(Gitlab.config.lfs).to receive(:enabled).and_return(true) end |