Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
955b9347
Commit
955b9347
authored
Sep 21, 2016
by
Kamil Trzcinski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add tests to verify the correctness of returned environments
parent
d891051c
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
93 additions
and
11 deletions
+93
-11
CHANGELOG
CHANGELOG
+1
-0
app/models/merge_request.rb
app/models/merge_request.rb
+3
-3
app/models/project.rb
app/models/project.rb
+1
-1
app/views/projects/merge_requests/widget/_heading.html.haml
app/views/projects/merge_requests/widget/_heading.html.haml
+1
-1
spec/models/merge_request_spec.rb
spec/models/merge_request_spec.rb
+46
-6
spec/models/project_spec.rb
spec/models/project_spec.rb
+41
-0
No files found.
CHANGELOG
View file @
955b9347
...
...
@@ -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
...
...
app/models/merge_request.rb
View file @
955b9347
...
...
@@ -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
...
...
app/models/project.rb
View file @
955b9347
...
...
@@ -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
...
...
app/views/projects/merge_requests/widget/_heading.html.haml
View file @
955b9347
...
...
@@ -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
...
...
spec/models/merge_request_spec.rb
View file @
955b9347
...
...
@@ -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
)
}
context
'with multiple environments'
do
let
(
:environments
)
{
create_list
(
:environment
,
3
,
project:
project
)
}
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
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
)
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
)
}
expect
(
merge_request
.
environments
).
to
eq
[
environments
.
first
]
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
...
...
spec/models/project_spec.rb
View file @
955b9347
...
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment