Read about our upcoming Code of Conduct on this issue

Commit 955b9347 authored by Kamil Trzcinski's avatar Kamil Trzcinski
Browse files

Add tests to verify the correctness of returned environments

parent 16842c75e7d7
......@@ -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
......
......@@ -672,10 +672,10 @@ def environments
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
......
......@@ -1304,7 +1304,7 @@ def environments_for(ref, commit, with_tags: false)
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
......
......@@ -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
......
......@@ -701,16 +701,56 @@
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
......
......@@ -1647,6 +1647,47 @@ def create_build(new_pipeline = pipeline, name = 'test')
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
......
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