BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
522f4b2c
Commit
522f4b2c
authored
Feb 21, 2018
by
Tiago Botelho
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adapt cycle analytics spec helper and cycle analytics usage data spec
parent
335ee79a
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
229 additions
and
110 deletions
+229
-110
analytics_stage_entity.rb
app/serializers/analytics_stage_entity.rb
+2
-3
41777-include-cycle-time-in-usage-ping.yml
...ogs/unreleased/41777-include-cycle-time-in-usage-ping.yml
+5
-0
base_query.rb
lib/gitlab/cycle_analytics/base_query.rb
+1
-1
base_stage.rb
lib/gitlab/cycle_analytics/base_stage.rb
+5
-1
median.rb
lib/gitlab/database/median.rb
+12
-10
cycle_analytics_controller_spec.rb
spec/controllers/projects/cycle_analytics_controller_spec.rb
+1
-1
cycle_analytics_spec.rb
spec/features/cycle_analytics_spec.rb
+3
-3
base_event_fetcher_spec.rb
spec/lib/gitlab/cycle_analytics/base_event_fetcher_spec.rb
+1
-1
events_spec.rb
spec/lib/gitlab/cycle_analytics/events_spec.rb
+5
-5
usage_data_spec.rb
spec/lib/gitlab/cycle_analytics/usage_data_spec.rb
+121
-17
median_spec.rb
spec/lib/gitlab/database/median_spec.rb
+9
-7
code_spec.rb
spec/models/cycle_analytics/code_spec.rb
+10
-10
issue_spec.rb
spec/models/cycle_analytics/issue_spec.rb
+4
-4
plan_spec.rb
spec/models/cycle_analytics/plan_spec.rb
+4
-4
production_spec.rb
spec/models/cycle_analytics/production_spec.rb
+7
-7
review_spec.rb
spec/models/cycle_analytics/review_spec.rb
+2
-2
staging_spec.rb
spec/models/cycle_analytics/staging_spec.rb
+7
-7
test_spec.rb
spec/models/cycle_analytics/test_spec.rb
+8
-8
cycle_analytics_spec.rb
spec/models/cycle_analytics_spec.rb
+2
-2
cycle_analytics_events_spec.rb
spec/requests/projects/cycle_analytics_events_spec.rb
+3
-3
spec_helper.rb
spec/spec_helper.rb
+4
-0
cycle_analytics_helpers.rb
spec/support/cycle_analytics_helpers.rb
+13
-14
No files found.
app/serializers/analytics_stage_entity.rb
View file @
522f4b2c
...
@@ -7,8 +7,7 @@ class AnalyticsStageEntity < Grape::Entity
...
@@ -7,8 +7,7 @@ class AnalyticsStageEntity < Grape::Entity
expose
:description
expose
:description
expose
:median
,
as: :value
do
|
stage
|
expose
:median
,
as: :value
do
|
stage
|
if
stage
.
median
&&
!
(
stage
.
median
.
nil?
||
stage
.
median
.
zero?
)
# median returns a BatchLoader instance which we first have to unwrap by using to_i
distance_of_time_in_words
(
stage
.
median
)
!
stage
.
median
.
to_i
.
zero?
?
distance_of_time_in_words
(
stage
.
median
)
:
nil
end
end
end
end
end
changelogs/unreleased/41777-include-cycle-time-in-usage-ping.yml
0 → 100644
View file @
522f4b2c
---
title
:
Include cycle time in usage ping data
merge_request
:
16973
author
:
type
:
added
lib/gitlab/cycle_analytics/base_query.rb
View file @
522f4b2c
...
@@ -15,7 +15,7 @@ module Gitlab
...
@@ -15,7 +15,7 @@ module Gitlab
query
=
mr_closing_issues_table
.
join
(
issue_table
).
on
(
issue_table
[
:id
].
eq
(
mr_closing_issues_table
[
:issue_id
]))
query
=
mr_closing_issues_table
.
join
(
issue_table
).
on
(
issue_table
[
:id
].
eq
(
mr_closing_issues_table
[
:issue_id
]))
.
join
(
issue_metrics_table
).
on
(
issue_table
[
:id
].
eq
(
issue_metrics_table
[
:issue_id
]))
.
join
(
issue_metrics_table
).
on
(
issue_table
[
:id
].
eq
(
issue_metrics_table
[
:issue_id
]))
.
project
(
issue_table
[
:project_id
].
as
(
"project_id"
))
.
project
(
issue_table
[
:project_id
].
as
(
"project_id"
))
.
where
(
issue_table
[
:project_id
].
in
(
Array
(
project_ids
)
))
.
where
(
issue_table
[
:project_id
].
in
(
project_ids
))
.
where
(
issue_table
[
:created_at
].
gteq
(
@options
[
:from
]))
# rubocop:disable Gitlab/ModuleWithInstanceVariables
.
where
(
issue_table
[
:created_at
].
gteq
(
@options
[
:from
]))
# rubocop:disable Gitlab/ModuleWithInstanceVariables
# Load merge_requests
# Load merge_requests
...
...
lib/gitlab/cycle_analytics/base_stage.rb
View file @
522f4b2c
...
@@ -31,12 +31,16 @@ module Gitlab
...
@@ -31,12 +31,16 @@ module Gitlab
interval_query
=
Arel
::
Nodes
::
As
.
new
(
cte_table
,
interval_query
=
Arel
::
Nodes
::
As
.
new
(
cte_table
,
subtract_datetimes
(
stage_query
(
project_ids
),
start_time_attrs
,
end_time_attrs
,
name
.
to_s
))
subtract_datetimes
(
stage_query
(
project_ids
),
start_time_attrs
,
end_time_attrs
,
name
.
to_s
))
if
project_ids
.
size
==
1
if
project_ids
.
one?
loader
.
call
(
@project
.
id
,
median_datetime
(
cte_table
,
interval_query
,
name
))
loader
.
call
(
@project
.
id
,
median_datetime
(
cte_table
,
interval_query
,
name
))
else
else
begin
median_datetimes
(
cte_table
,
interval_query
,
name
,
:project_id
)
&
.
each
do
|
project_id
,
median
|
median_datetimes
(
cte_table
,
interval_query
,
name
,
:project_id
)
&
.
each
do
|
project_id
,
median
|
loader
.
call
(
project_id
,
median
)
loader
.
call
(
project_id
,
median
)
end
end
rescue
NotSupportedError
{}
end
end
end
end
end
end
end
...
...
lib/gitlab/database/median.rb
View file @
522f4b2c
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
module
Gitlab
module
Gitlab
module
Database
module
Database
module
Median
module
Median
NotSupportedError
=
Class
.
new
(
StandardError
)
def
median_datetime
(
arel_table
,
query_so_far
,
column_sym
)
def
median_datetime
(
arel_table
,
query_so_far
,
column_sym
)
extract_median
(
execute_queries
(
arel_table
,
query_so_far
,
column_sym
)).
presence
extract_median
(
execute_queries
(
arel_table
,
query_so_far
,
column_sym
)).
presence
end
end
...
@@ -23,11 +25,11 @@ module Gitlab
...
@@ -23,11 +25,11 @@ module Gitlab
end
end
def
extract_medians
(
results
)
def
extract_medians
(
results
)
return
{}
if
Gitlab
::
Database
.
mysql?
median_values
=
results
.
compact
.
first
.
values
results
.
compact
.
first
.
values
.
map
do
|
id
,
median
|
median_values
.
each_with_object
({})
do
|
(
id
,
median
),
hash
|
[
id
.
to_i
,
median
&
.
to_f
]
hash
[
id
.
to_i
]
=
median
&
.
to_f
end
.
to_h
end
end
end
def
mysql_median_datetime_sql
(
arel_table
,
query_so_far
,
column_sym
)
def
mysql_median_datetime_sql
(
arel_table
,
query_so_far
,
column_sym
)
...
@@ -113,6 +115,8 @@ module Gitlab
...
@@ -113,6 +115,8 @@ module Gitlab
if
Gitlab
::
Database
.
postgresql?
if
Gitlab
::
Database
.
postgresql?
pg_median_datetime_sql
(
arel_table
,
query_so_far
,
column_sym
,
partition_column
)
pg_median_datetime_sql
(
arel_table
,
query_so_far
,
column_sym
,
partition_column
)
elsif
Gitlab
::
Database
.
mysql?
elsif
Gitlab
::
Database
.
mysql?
raise
NotSupportedError
,
"partition_column is not supported for MySQL"
if
partition_column
mysql_median_datetime_sql
(
arel_table
,
query_so_far
,
column_sym
)
mysql_median_datetime_sql
(
arel_table
,
query_so_far
,
column_sym
)
end
end
end
end
...
@@ -159,12 +163,10 @@ module Gitlab
...
@@ -159,12 +163,10 @@ module Gitlab
end
end
def
median_projections
(
table
,
column_sym
,
partition_column
)
def
median_projections
(
table
,
column_sym
,
partition_column
)
if
partition_column
projections
=
[]
[
table
[
partition_column
],
projections
<<
table
[
partition_column
]
if
partition_column
average
([
extract_epoch
(
table
[
column_sym
])],
"median"
)]
projections
<<
average
([
extract_epoch
(
table
[
column_sym
])],
"median"
)
else
projections
[
average
([
extract_epoch
(
table
[
column_sym
])],
"median"
)]
end
end
end
def
extract_epoch
(
arel_attribute
)
def
extract_epoch
(
arel_attribute
)
...
...
spec/controllers/projects/cycle_analytics_controller_spec.rb
View file @
522f4b2c
...
@@ -27,7 +27,7 @@ describe Projects::CycleAnalyticsController do
...
@@ -27,7 +27,7 @@ describe Projects::CycleAnalyticsController do
milestone
=
create
(
:milestone
,
project:
project
,
created_at:
5
.
days
.
ago
)
milestone
=
create
(
:milestone
,
project:
project
,
created_at:
5
.
days
.
ago
)
issue
.
update
(
milestone:
milestone
)
issue
.
update
(
milestone:
milestone
)
create_merge_request_closing_issue
(
issue
)
create_merge_request_closing_issue
(
user
,
project
,
issue
)
end
end
it
'is false'
do
it
'is false'
do
...
...
spec/features/cycle_analytics_spec.rb
View file @
522f4b2c
...
@@ -6,7 +6,7 @@ feature 'Cycle Analytics', :js do
...
@@ -6,7 +6,7 @@ feature 'Cycle Analytics', :js do
let
(
:project
)
{
create
(
:project
,
:repository
)
}
let
(
:project
)
{
create
(
:project
,
:repository
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
project
,
created_at:
2
.
days
.
ago
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
project
,
created_at:
2
.
days
.
ago
)
}
let
(
:milestone
)
{
create
(
:milestone
,
project:
project
)
}
let
(
:milestone
)
{
create
(
:milestone
,
project:
project
)
}
let
(
:mr
)
{
create_merge_request_closing_issue
(
issue
,
commit_message:
"References
#{
issue
.
to_reference
}
"
)
}
let
(
:mr
)
{
create_merge_request_closing_issue
(
user
,
project
,
issue
,
commit_message:
"References
#{
issue
.
to_reference
}
"
)
}
let
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
status:
'created'
,
project:
project
,
ref:
mr
.
source_branch
,
sha:
mr
.
source_branch_sha
,
head_pipeline_of:
mr
)
}
let
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
status:
'created'
,
project:
project
,
ref:
mr
.
source_branch
,
sha:
mr
.
source_branch_sha
,
head_pipeline_of:
mr
)
}
context
'as an allowed user'
do
context
'as an allowed user'
do
...
@@ -42,7 +42,7 @@ feature 'Cycle Analytics', :js do
...
@@ -42,7 +42,7 @@ feature 'Cycle Analytics', :js do
project
.
add_master
(
user
)
project
.
add_master
(
user
)
@build
=
create_cycle
(
user
,
project
,
issue
,
mr
,
milestone
,
pipeline
)
@build
=
create_cycle
(
user
,
project
,
issue
,
mr
,
milestone
,
pipeline
)
deploy_master
deploy_master
(
user
,
project
)
sign_in
(
user
)
sign_in
(
user
)
visit
project_cycle_analytics_path
(
project
)
visit
project_cycle_analytics_path
(
project
)
...
@@ -118,7 +118,7 @@ feature 'Cycle Analytics', :js do
...
@@ -118,7 +118,7 @@ feature 'Cycle Analytics', :js do
allow_any_instance_of
(
Gitlab
::
ReferenceExtractor
).
to
receive
(
:issues
).
and_return
([
issue
])
allow_any_instance_of
(
Gitlab
::
ReferenceExtractor
).
to
receive
(
:issues
).
and_return
([
issue
])
create_cycle
(
user
,
project
,
issue
,
mr
,
milestone
,
pipeline
)
create_cycle
(
user
,
project
,
issue
,
mr
,
milestone
,
pipeline
)
deploy_master
deploy_master
(
user
,
project
)
sign_in
(
guest
)
sign_in
(
guest
)
visit
project_cycle_analytics_path
(
project
)
visit
project_cycle_analytics_path
(
project
)
...
...
spec/lib/gitlab/cycle_analytics/base_event_fetcher_spec.rb
View file @
522f4b2c
...
@@ -41,7 +41,7 @@ describe Gitlab::CycleAnalytics::BaseEventFetcher do
...
@@ -41,7 +41,7 @@ describe Gitlab::CycleAnalytics::BaseEventFetcher do
milestone
=
create
(
:milestone
,
project:
project
)
milestone
=
create
(
:milestone
,
project:
project
)
issue
.
update
(
milestone:
milestone
)
issue
.
update
(
milestone:
milestone
)
create_merge_request_closing_issue
(
issue
)
create_merge_request_closing_issue
(
user
,
project
,
issue
)
end
end
end
end
end
end
spec/lib/gitlab/cycle_analytics/events_spec.rb
View file @
522f4b2c
...
@@ -236,8 +236,8 @@ describe 'cycle analytics events' do
...
@@ -236,8 +236,8 @@ describe 'cycle analytics events' do
pipeline
.
run!
pipeline
.
run!
pipeline
.
succeed!
pipeline
.
succeed!
merge_merge_requests_closing_issue
(
context
)
merge_merge_requests_closing_issue
(
user
,
project
,
context
)
deploy_master
deploy_master
(
user
,
project
)
end
end
it
'has the name'
do
it
'has the name'
do
...
@@ -294,8 +294,8 @@ describe 'cycle analytics events' do
...
@@ -294,8 +294,8 @@ describe 'cycle analytics events' do
let!
(
:context
)
{
create
(
:issue
,
project:
project
,
created_at:
2
.
days
.
ago
)
}
let!
(
:context
)
{
create
(
:issue
,
project:
project
,
created_at:
2
.
days
.
ago
)
}
before
do
before
do
merge_merge_requests_closing_issue
(
context
)
merge_merge_requests_closing_issue
(
user
,
project
,
context
)
deploy_master
deploy_master
(
user
,
project
)
end
end
it
'has the total time'
do
it
'has the total time'
do
...
@@ -334,7 +334,7 @@ describe 'cycle analytics events' do
...
@@ -334,7 +334,7 @@ describe 'cycle analytics events' do
def
setup
(
context
)
def
setup
(
context
)
milestone
=
create
(
:milestone
,
project:
project
)
milestone
=
create
(
:milestone
,
project:
project
)
context
.
update
(
milestone:
milestone
)
context
.
update
(
milestone:
milestone
)
mr
=
create_merge_request_closing_issue
(
context
,
commit_message:
"References
#{
context
.
to_reference
}
"
)
mr
=
create_merge_request_closing_issue
(
user
,
project
,
context
,
commit_message:
"References
#{
context
.
to_reference
}
"
)
ProcessCommitWorker
.
new
.
perform
(
project
.
id
,
user
.
id
,
mr
.
commits
.
last
.
to_hash
)
ProcessCommitWorker
.
new
.
perform
(
project
.
id
,
user
.
id
,
mr
.
commits
.
last
.
to_hash
)
end
end
...
...
spec/lib/gitlab/cycle_analytics/usage_data_spec.rb
View file @
522f4b2c
require
'spec_helper'
require
'spec_helper'
describe
Gitlab
::
CycleAnalytics
::
UsageData
do
describe
Gitlab
::
CycleAnalytics
::
UsageData
do
let
(
:project
)
{
create
(
:project
,
:repository
)
}
let
(
:user
)
{
create
(
:user
,
:admin
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
project
,
created_at:
2
.
days
.
ago
)
}
let
(
:milestone
)
{
create
(
:milestone
,
project:
project
)
}
let
(
:mr
)
{
create_merge_request_closing_issue
(
issue
,
commit_message:
"References
#{
issue
.
to_reference
}
"
)
}
let
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
status:
'created'
,
project:
project
,
ref:
mr
.
source_branch
,
sha:
mr
.
source_branch_sha
,
head_pipeline_of:
mr
)
}
subject
{
described_class
.
new
([
project
])
}
describe
'#to_json'
do
describe
'#to_json'
do
before
do
before
do
Timecop
.
freeze
do
user
=
create
(
:user
,
:admin
)
projects
=
create_list
(
:project
,
2
,
:repository
)
projects
.
each_with_index
do
|
project
,
time
|
issue
=
create
(
:issue
,
project:
project
,
created_at:
(
time
+
1
).
hour
.
ago
)
allow_any_instance_of
(
Gitlab
::
ReferenceExtractor
).
to
receive
(
:issues
).
and_return
([
issue
])
allow_any_instance_of
(
Gitlab
::
ReferenceExtractor
).
to
receive
(
:issues
).
and_return
([
issue
])
milestone
=
create
(
:milestone
,
project:
project
)
mr
=
create_merge_request_closing_issue
(
user
,
project
,
issue
,
commit_message:
"References
#{
issue
.
to_reference
}
"
)
pipeline
=
create
(
:ci_empty_pipeline
,
status:
'created'
,
project:
project
,
ref:
mr
.
source_branch
,
sha:
mr
.
source_branch_sha
,
head_pipeline_of:
mr
)
create_cycle
(
user
,
project
,
issue
,
mr
,
milestone
,
pipeline
)
create_cycle
(
user
,
project
,
issue
,
mr
,
milestone
,
pipeline
)
deploy_master
deploy_master
(
user
,
project
,
environment:
'staging'
)
deploy_master
(
user
,
project
)
end
end
end
end
shared_examples
'a valid usage data result'
do
it
'returns the aggregated usage data of every selected project'
do
it
'returns the aggregated usage data of every selected project'
do
result
=
subject
.
to_json
result
=
subject
.
to_json
avg_cycle_analytics
=
result
[
:avg_cycle_analytics
]
expect
(
result
).
to
have_key
(
:avg_cycle_analytics
)
expect
(
result
).
to
have_key
(
:avg_cycle_analytics
)
CycleAnalytics
::
STAGES
.
each
do
|
stage_name
|
stage_values
=
avg_cycle_analytics
[
stage_name
]
expect
(
avg_cycle_analytics
).
to
have_key
(
stage_name
)
CycleAnalytics
::
STAGES
.
each
do
|
stage
|
expect
(
stage_values
).
to
have_key
(
:average
)
expect
(
result
[
:avg_cycle_analytics
]).
to
have_key
(
stage
)
expect
(
stage_values
).
to
have_key
(
:sd
)
expect
(
stage_values
).
to
have_key
(
:missing
)
stage_values
=
result
[
:avg_cycle_analytics
][
stage
]
expected_values
=
expect_values_per_stage
[
stage
]
expected_values
.
each_pair
do
|
op
,
value
|
expect
(
stage_values
).
to
have_key
(
op
)
if
op
==
:missing
expect
(
stage_values
[
op
]).
to
eq
(
value
)
else
# delta is used because of git timings that Timecop does not stub
expect
(
stage_values
[
op
].
to_i
).
to
be_within
(
5
).
of
(
value
.
to_i
)
end
end
end
end
end
end
end
end
context
'when using postgresql'
,
:postgresql
do
let
(
:expect_values_per_stage
)
do
{
issue:
{
average:
5400
,
sd:
2545
,
missing:
0
},
plan:
{
average:
2
,
sd:
2
,
missing:
0
},
code:
{
average:
nil
,
sd:
0
,
missing:
2
},
test:
{
average:
nil
,
sd:
0
,
missing:
2
},
review:
{
average:
0
,
sd:
0
,
missing:
0
},
staging:
{
average:
0
,
sd:
0
,
missing:
0
},
production:
{
average:
5400
,
sd:
2545
,
missing:
0
}
}
end
it_behaves_like
'a valid usage data result'
end
context
'when using mysql'
,
:mysql
do
let
(
:expect_values_per_stage
)
do
{
issue:
{
average:
nil
,
sd:
0
,
missing:
2
},
plan:
{
average:
nil
,
sd:
0
,
missing:
2
},
code:
{
average:
nil
,
sd:
0
,
missing:
2
},
test:
{
average:
nil
,
sd:
0
,
missing:
2
},
review:
{
average:
nil
,
sd:
0
,
missing:
2
},
staging:
{
average:
nil
,
sd:
0
,
missing:
2
},
production:
{
average:
nil
,
sd:
0
,
missing:
2
}
}
end
it_behaves_like
'a valid usage data result'
end
end
end
end
spec/lib/gitlab/database/median_spec.rb
View file @
522f4b2c
require
'spec_helper'
require
'spec_helper'
describe
Gitlab
::
Database
::
Median
do
describe
Gitlab
::
Database
::
Median
do
describe
'#extract_medians'
do
let
(
:dummy_class
)
do
context
'when using MySQL'
do
Class
.
new
do
it
'returns an empty hash'
do
include
Gitlab
::
Database
::
Median
values
=
[[
"1"
,
"1000"
]]
end
end
allow
(
Gitlab
::
Database
).
to
receive
(
:mysql?
).
and_return
(
true
)
subject
(
:median
)
{
dummy_class
.
new
}
expect
(
described_class
.
new
.
extract_median
(
values
)).
eq
({})
describe
'#median_datetimes'
do
end
it
'raises NotSupportedError'
,
:mysql
do
expect
{
median
.
median_datetimes
(
nil
,
nil
,
nil
,
:project_id
)
}.
to
raise_error
(
dummy_class
::
NotSupportedError
,
"partition_column is not supported for MySQL"
)
end
end
end
end
end
end
spec/models/cycle_analytics/code_spec.rb
View file @
522f4b2c
...
@@ -18,11 +18,11 @@ describe 'CycleAnalytics#code' do
...
@@ -18,11 +18,11 @@ describe 'CycleAnalytics#code' do
end
]],
end
]],
end_time_conditions:
[[
"merge request that closes issue is created"
,
end_time_conditions:
[[
"merge request that closes issue is created"
,
->
(
context
,
data
)
do
->
(
context
,
data
)
do
context
.
create_merge_request_closing_issue
(
data
[
:issue
])
context
.
create_merge_request_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
end
]],
end
]],
post_fn:
->
(
context
,
data
)
do
post_fn:
->
(
context
,
data
)
do
context
.
merge_merge_requests_closing_issue
(
data
[
:issue
])
context
.
merge_merge_requests_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
context
.
deploy_master
context
.
deploy_master
(
context
.
user
,
context
.
project
)
end
)
end
)
context
"when a regular merge request (that doesn't close the issue) is created"
do
context
"when a regular merge request (that doesn't close the issue) is created"
do
...
@@ -30,10 +30,10 @@ describe 'CycleAnalytics#code' do
...
@@ -30,10 +30,10 @@ describe 'CycleAnalytics#code' do
issue
=
create
(
:issue
,
project:
project
)
issue
=
create
(
:issue
,
project:
project
)
create_commit_referencing_issue
(
issue
)
create_commit_referencing_issue
(
issue
)
create_merge_request_closing_issue
(
issue
,
message:
"Closes nothing"
)
create_merge_request_closing_issue
(
user
,
project
,
issue
,
message:
"Closes nothing"
)
merge_merge_requests_closing_issue
(
issue
)
merge_merge_requests_closing_issue
(
user
,
project
,
issue
)
deploy_master
deploy_master
(
user
,
project
)
expect
(
subject
[
:code
].
median
).
to
be_nil
expect
(
subject
[
:code
].
median
).
to
be_nil
end
end
...
@@ -50,10 +50,10 @@ describe 'CycleAnalytics#code' do
...
@@ -50,10 +50,10 @@ describe 'CycleAnalytics#code' do
end
]],
end
]],
end_time_conditions:
[[
"merge request that closes issue is created"
,
end_time_conditions:
[[
"merge request that closes issue is created"
,
->
(
context
,
data
)
do
->
(
context
,
data
)
do
context
.
create_merge_request_closing_issue
(
data
[
:issue
])
context
.
create_merge_request_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
end
]],
end
]],
post_fn:
->
(
context
,
data
)
do
post_fn:
->
(
context
,
data
)
do
context
.
merge_merge_requests_closing_issue
(
data
[
:issue
])
context
.
merge_merge_requests_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
end
)
end
)
context
"when a regular merge request (that doesn't close the issue) is created"
do
context
"when a regular merge request (that doesn't close the issue) is created"
do
...
@@ -61,9 +61,9 @@ describe 'CycleAnalytics#code' do
...
@@ -61,9 +61,9 @@ describe 'CycleAnalytics#code' do
issue
=
create
(
:issue
,
project:
project
)
issue
=
create
(
:issue
,
project:
project
)
create_commit_referencing_issue
(
issue
)
create_commit_referencing_issue
(
issue
)
create_merge_request_closing_issue
(
issue
,
message:
"Closes nothing"
)
create_merge_request_closing_issue
(
user
,
project
,
issue
,
message:
"Closes nothing"
)
merge_merge_requests_closing_issue
(
issue
)
merge_merge_requests_closing_issue
(
user
,
project
,
issue
)
expect
(
subject
[
:code
].
median
).
to
be_nil
expect
(
subject
[
:code
].
median
).
to
be_nil
end
end
...
...
spec/models/cycle_analytics/issue_spec.rb
View file @
522f4b2c
...
@@ -26,8 +26,8 @@ describe 'CycleAnalytics#issue' do
...
@@ -26,8 +26,8 @@ describe 'CycleAnalytics#issue' do
end
]],
end
]],
post_fn:
->
(
context
,
data
)
do
post_fn:
->
(
context
,
data
)
do
if
data
[
:issue
].
persisted?
if
data
[
:issue
].
persisted?
context
.
create_merge_request_closing_issue
(
data
[
:issue
].
reload
)
context
.
create_merge_request_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
].
reload
)
context
.
merge_merge_requests_closing_issue
(
data
[
:issue
])
context
.
merge_merge_requests_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
end
end
end
)
end
)
...
@@ -37,8 +37,8 @@ describe 'CycleAnalytics#issue' do
...
@@ -37,8 +37,8 @@ describe 'CycleAnalytics#issue' do
issue
=
create
(
:issue
,
project:
project
)
issue
=
create
(
:issue
,
project:
project
)
issue
.
update
(
label_ids:
[
regular_label
.
id
])
issue
.
update
(
label_ids:
[
regular_label
.
id
])
create_merge_request_closing_issue
(
issue
)
create_merge_request_closing_issue
(
user
,
project
,
issue
)
merge_merge_requests_closing_issue
(
issue
)
merge_merge_requests_closing_issue
(
user
,
project
,
issue
)
expect
(
subject
[
:issue
].
median
).
to
be_nil
expect
(
subject
[
:issue
].
median
).
to
be_nil
end
end
...
...
spec/models/cycle_analytics/plan_spec.rb
View file @
522f4b2c
...
@@ -29,8 +29,8 @@ describe 'CycleAnalytics#plan' do
...
@@ -29,8 +29,8 @@ describe 'CycleAnalytics#plan' do
context
.
create_commit_referencing_issue
(
data
[
:issue
],
branch_name:
data
[
:branch_name
])
context
.
create_commit_referencing_issue
(
data
[
:issue
],
branch_name:
data
[
:branch_name
])
end
]],
end
]],
post_fn:
->
(
context
,
data
)
do
post_fn:
->
(
context
,
data
)
do
context
.
create_merge_request_closing_issue
(
data
[
:issue
],
source_branch:
data
[
:branch_name
])
context
.
create_merge_request_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
],
source_branch:
data
[
:branch_name
])
context
.
merge_merge_requests_closing_issue
(
data
[
:issue
])
context
.
merge_merge_requests_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
end
)
end
)
context
"when a regular label (instead of a list label) is added to the issue"
do
context
"when a regular label (instead of a list label) is added to the issue"
do
...
@@ -41,8 +41,8 @@ describe 'CycleAnalytics#plan' do
...
@@ -41,8 +41,8 @@ describe 'CycleAnalytics#plan' do
issue
.
update
(
label_ids:
[
label
.
id
])
issue
.
update
(
label_ids:
[
label
.
id
])
create_commit_referencing_issue
(
issue
,
branch_name:
branch_name
)
create_commit_referencing_issue
(
issue
,
branch_name:
branch_name
)
create_merge_request_closing_issue
(
issue
,
source_branch:
branch_name
)
create_merge_request_closing_issue
(
user
,
project
,
issue
,
source_branch:
branch_name
)
merge_merge_requests_closing_issue
(
issue
)
merge_merge_requests_closing_issue
(
user
,
project
,
issue
)
expect
(
subject
[
:issue
].
median
).
to
be_nil
expect
(
subject
[
:issue
].
median
).
to
be_nil
end
end
...
...
spec/models/cycle_analytics/production_spec.rb
View file @
522f4b2c
...
@@ -13,11 +13,11 @@ describe 'CycleAnalytics#production' do
...
@@ -13,11 +13,11 @@ describe 'CycleAnalytics#production' do
data_fn:
->
(
context
)
{
{
issue:
context
.
build
(
:issue
,
project:
context
.
project
)
}
},
data_fn:
->
(
context
)
{
{
issue:
context
.
build
(
:issue
,
project:
context
.
project
)
}
},
start_time_conditions:
[[
"issue is created"
,
->
(
context
,
data
)
{
data
[
:issue
].
save
}]],
start_time_conditions:
[[
"issue is created"
,
->
(
context
,
data
)
{
data
[
:issue
].
save
}]],
before_end_fn:
lambda
do
|
context
,
data
|
before_end_fn:
lambda
do
|
context
,
data
|
context
.
create_merge_request_closing_issue
(
data
[
:issue
])
context
.
create_merge_request_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
context
.
merge_merge_requests_closing_issue
(
data
[
:issue
])
context
.
merge_merge_requests_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
end
,
end
,
end_time_conditions:
end_time_conditions:
[[
"merge request that closes issue is deployed to production"
,
->
(
context
,
data
)
{
context
.
deploy_master
}],
[[
"merge request that closes issue is deployed to production"
,
->
(
context
,
data
)
{
context
.
deploy_master
(
context
.
user
,
context
.
project
)
}],
[
"production deploy happens after merge request is merged (along with other changes)"
,
[
"production deploy happens after merge request is merged (along with other changes)"
,
lambda
do
|
context
,
data
|
lambda
do
|
context
,
data
|
# Make other changes on master
# Make other changes on master
...
@@ -29,14 +29,14 @@ describe 'CycleAnalytics#production' do
...
@@ -29,14 +29,14 @@ describe 'CycleAnalytics#production' do
branch_name:
'master'
)
branch_name:
'master'
)
context
.
project
.
repository
.
commit
(
sha
)
context
.
project
.
repository
.
commit
(
sha
)
context
.
deploy_master
context
.
deploy_master
(
context
.
user
,
context
.
project
)
end
]])
end
]])
context
"when a regular merge request (that doesn't close the issue) is merged and deployed"
do
context
"when a regular merge request (that doesn't close the issue) is merged and deployed"
do
it
"returns nil"
do
it
"returns nil"
do
merge_request
=
create
(
:merge_request
)
merge_request
=
create
(
:merge_request
)
MergeRequests
::
MergeService
.
new
(
project
,
user
).
execute
(
merge_request
)
MergeRequests
::
MergeService
.
new
(
project
,
user
).
execute
(
merge_request
)
deploy_master
deploy_master
(
user
,
project
)
expect
(
subject
[
:production
].
median
).
to
be_nil
expect
(
subject
[
:production
].
median
).
to
be_nil
end
end
...
@@ -45,9 +45,9 @@ describe 'CycleAnalytics#production' do
...
@@ -45,9 +45,9 @@ describe 'CycleAnalytics#production' do
context
"when the deployment happens to a non-production environment"
do
context
"when the deployment happens to a non-production environment"
do
it
"returns nil"
do
it
"returns nil"
do
issue
=
create
(
:issue
,
project:
project
)
issue
=
create
(
:issue
,
project:
project
)
merge_request
=
create_merge_request_closing_issue
(
issue
)
merge_request
=
create_merge_request_closing_issue
(
user
,
project
,
issue
)
MergeRequests
::
MergeService
.
new
(
project
,
user
).
execute
(
merge_request
)
MergeRequests
::
MergeService
.
new
(
project
,
user
).
execute
(
merge_request
)
deploy_master
(
environment:
'staging'
)
deploy_master
(
user
,
project
,
environment:
'staging'
)
expect
(
subject
[
:production
].
median
).
to
be_nil
expect
(
subject
[
:production
].
median
).
to
be_nil
end
end
...
...
spec/models/cycle_analytics/review_spec.rb
View file @
522f4b2c
...
@@ -13,11 +13,11 @@ describe 'CycleAnalytics#review' do
...
@@ -13,11 +13,11 @@ describe 'CycleAnalytics#review' do
data_fn:
->
(
context
)
{
{
issue:
context
.
create
(
:issue
,
project:
context
.
project
)
}
},
data_fn:
->
(
context
)
{
{
issue:
context
.
create
(
:issue
,
project:
context
.
project
)
}
},
start_time_conditions:
[[
"merge request that closes issue is created"
,
start_time_conditions:
[[
"merge request that closes issue is created"
,
->
(
context
,
data
)
do
->
(
context
,
data
)
do
context
.
create_merge_request_closing_issue
(
data
[
:issue
])
context
.
create_merge_request_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
end
]],
end
]],
end_time_conditions:
[[
"merge request that closes issue is merged"
,
end_time_conditions:
[[
"merge request that closes issue is merged"
,
->
(
context
,
data
)
do
->
(
context
,
data
)
do
context
.
merge_merge_requests_closing_issue
(
data
[
:issue
])
context
.
merge_merge_requests_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
end
]],
end
]],
post_fn:
nil
)
post_fn:
nil
)
...
...
spec/models/cycle_analytics/staging_spec.rb
View file @
522f4b2c
...
@@ -13,15 +13,15 @@ describe 'CycleAnalytics#staging' do
...
@@ -13,15 +13,15 @@ describe 'CycleAnalytics#staging' do
phase: :staging
,
phase: :staging
,
data_fn:
lambda
do
|
context
|
data_fn:
lambda
do
|
context
|
issue
=
context
.
create
(
:issue
,
project:
context
.
project
)
issue
=
context
.
create
(
:issue
,
project:
context
.
project
)
{
issue:
issue
,
merge_request:
context
.
create_merge_request_closing_issue
(
issue
)
}
{
issue:
issue
,
merge_request:
context
.
create_merge_request_closing_issue
(
context
.
user
,
context
.
project
,
issue
)
}
end
,
end
,
start_time_conditions:
[[
"merge request that closes issue is merged"
,
start_time_conditions:
[[
"merge request that closes issue is merged"
,
->
(
context
,
data
)
do
->
(
context
,
data
)
do
context
.
merge_merge_requests_closing_issue
(
data
[
:issue
])
context
.
merge_merge_requests_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
end
]],
end
]],
end_time_conditions:
[[
"merge request that closes issue is deployed to production"
,
end_time_conditions:
[[
"merge request that closes issue is deployed to production"
,
->
(
context
,
data
)
do
->
(
context
,
data
)
do
context
.
deploy_master
context
.
deploy_master
(
context
.
user
,
context
.
project
)
end
],
end
],
[
"production deploy happens after merge request is merged (along with other changes)"
,
[
"production deploy happens after merge request is merged (along with other changes)"
,
lambda
do
|
context
,
data
|
lambda
do
|
context
,
data
|
...
@@ -34,14 +34,14 @@ describe 'CycleAnalytics#staging' do
...
@@ -34,14 +34,14 @@ describe 'CycleAnalytics#staging' do
branch_name:
'master'
)
branch_name:
'master'
)
context
.
project
.
repository
.
commit
(
sha
)
context
.
project
.
repository
.
commit
(
sha
)
context
.
deploy_master
context
.
deploy_master
(
context
.
user
,
context
.
project
)
end
]])
end
]])
context
"when a regular merge request (that doesn't close the issue) is merged and deployed"
do
context
"when a regular merge request (that doesn't close the issue) is merged and deployed"
do
it
"returns nil"
do
it
"returns nil"
do
merge_request
=
create
(
:merge_request
)
merge_request
=
create
(
:merge_request
)
MergeRequests
::
MergeService
.
new
(
project
,
user
).
execute
(
merge_request
)
MergeRequests
::
MergeService
.
new
(
project
,
user
).
execute
(
merge_request
)
deploy_master
deploy_master
(
user
,
project
)
expect
(
subject
[
:staging
].
median
).
to
be_nil
expect
(
subject
[
:staging
].
median
).
to
be_nil
end
end
...
@@ -50,9 +50,9 @@ describe 'CycleAnalytics#staging' do
...
@@ -50,9 +50,9 @@ describe 'CycleAnalytics#staging' do
context
"when the deployment happens to a non-production environment"
do
context
"when the deployment happens to a non-production environment"
do
it
"returns nil"
do
it
"returns nil"
do
issue
=
create
(
:issue
,
project:
project
)
issue
=
create
(
:issue
,
project:
project
)
merge_request
=
create_merge_request_closing_issue
(
issue
)
merge_request
=
create_merge_request_closing_issue
(
user
,
project
,
issue
)
MergeRequests
::
MergeService
.
new
(
project
,
user
).
execute
(
merge_request
)
MergeRequests
::
MergeService
.
new
(
project
,
user
).
execute
(
merge_request
)
deploy_master
(
environment:
'staging'
)
deploy_master
(
user
,
project
,
environment:
'staging'
)
expect
(
subject
[
:staging
].
median
).
to
be_nil
expect
(
subject
[
:staging
].
median
).
to
be_nil
end
end
...
...
spec/models/cycle_analytics/test_spec.rb
View file @
522f4b2c
...
@@ -12,26 +12,26 @@ describe 'CycleAnalytics#test' do
...
@@ -12,26 +12,26 @@ describe 'CycleAnalytics#test' do
phase: :test
,
phase: :test
,
data_fn:
lambda
do
|
context
|
data_fn:
lambda
do
|
context
|
issue
=
context
.
create
(
:issue
,
project:
context
.
project
)
issue
=
context
.
create
(
:issue
,
project:
context
.
project
)
merge_request
=
context
.
create_merge_request_closing_issue
(
issue
)
merge_request
=
context
.
create_merge_request_closing_issue
(
context
.
user
,
context
.
project
,
issue
)
pipeline
=
context
.
create
(
:ci_pipeline
,
ref:
merge_request
.
source_branch
,
sha:
merge_request
.
diff_head_sha
,
project:
context
.
project
,
head_pipeline_of:
merge_request
)
pipeline
=
context
.
create
(
:ci_pipeline
,
ref:
merge_request
.
source_branch
,
sha:
merge_request
.
diff_head_sha
,
project:
context
.
project
,
head_pipeline_of:
merge_request
)
{
pipeline:
pipeline
,
issue:
issue
}
{
pipeline:
pipeline
,
issue:
issue
}
end
,
end
,
start_time_conditions:
[[
"pipeline is started"
,
->
(
context
,
data
)
{
data
[
:pipeline
].
run!
}]],
start_time_conditions:
[[
"pipeline is started"
,
->
(
context
,
data
)
{
data
[
:pipeline
].
run!
}]],
end_time_conditions:
[[
"pipeline is finished"
,
->
(
context
,
data
)
{
data
[
:pipeline
].
succeed!
}]],
end_time_conditions:
[[
"pipeline is finished"
,
->
(
context
,
data
)
{
data
[
:pipeline
].
succeed!
}]],
post_fn:
->
(
context
,
data
)
do
post_fn:
->
(
context
,
data
)
do
context
.
merge_merge_requests_closing_issue
(
data
[
:issue
])
context
.
merge_merge_requests_closing_issue
(
context
.
user
,
context
.
project
,
data
[
:issue
])
end
)
end
)
context
"when the pipeline is for a regular merge request (that doesn't close an issue)"
do
context
"when the pipeline is for a regular merge request (that doesn't close an issue)"
do
it
"returns nil"
do
it
"returns nil"
do
issue
=
create
(
:issue
,
project:
project
)
issue
=
create
(
:issue
,
project:
project
)
merge_request
=
create_merge_request_closing_issue
(
issue
)
merge_request
=
create_merge_request_closing_issue
(
user
,
project
,
issue
)
pipeline
=
create
(
:ci_pipeline
,
ref:
"refs/heads/
#{
merge_request
.
source_branch
}
"
,
sha:
merge_request
.
diff_head_sha
)
pipeline
=
create
(
:ci_pipeline
,
ref:
"refs/heads/
#{
merge_request
.
source_branch
}
"
,
sha:
merge_request
.
diff_head_sha
)
pipeline
.
run!
pipeline
.
run!
pipeline
.
succeed!
pipeline
.
succeed!
merge_merge_requests_closing_issue
(
issue
)
merge_merge_requests_closing_issue
(
user
,
project
,
issue
)
expect
(
subject
[
:test
].
median
).
to
be_nil
expect
(
subject
[
:test
].
median
).
to
be_nil
end
end
...
@@ -51,13 +51,13 @@ describe 'CycleAnalytics#test' do
...
@@ -51,13 +51,13 @@ describe 'CycleAnalytics#test' do
context
"when the pipeline is dropped (failed)"
do
context
"when the pipeline is dropped (failed)"
do
it
"returns nil"
do
it
"returns nil"
do
issue
=
create
(
:issue
,
project:
project
)
issue
=
create
(
:issue
,
project:
project
)
merge_request
=
create_merge_request_closing_issue
(
issue
)
merge_request
=
create_merge_request_closing_issue
(
user
,
project
,
issue
)
pipeline
=
create
(
:ci_pipeline
,
ref:
"refs/heads/
#{
merge_request
.
source_branch
}
"
,
sha:
merge_request
.
diff_head_sha
)
pipeline
=
create
(
:ci_pipeline
,
ref:
"refs/heads/
#{
merge_request
.
source_branch
}
"
,
sha:
merge_request
.
diff_head_sha
)
pipeline
.
run!
pipeline
.
run!
pipeline
.
drop!
pipeline
.
drop!
merge_merge_requests_closing_issue
(
issue
)
merge_merge_requests_closing_issue
(
user
,
project
,
issue
)
expect
(
subject
[
:test
].
median
).
to
be_nil
expect
(
subject
[
:test
].
median
).
to
be_nil
end
end
...
@@ -66,13 +66,13 @@ describe 'CycleAnalytics#test' do
...
@@ -66,13 +66,13 @@ describe 'CycleAnalytics#test' do
context
"when the pipeline is cancelled"
do
context
"when the pipeline is cancelled"
do
it
"returns nil"
do
it
"returns nil"
do
issue
=
create
(
:issue
,
project:
project
)
issue
=
create
(
:issue
,
project:
project
)
merge_request
=
create_merge_request_closing_issue
(
issue
)
merge_request
=
create_merge_request_closing_issue
(
user
,
project
,
issue
)
pipeline
=
create
(
:ci_pipeline
,
ref:
"refs/heads/
#{
merge_request
.
source_branch
}
"
,
sha:
merge_request
.
diff_head_sha
)
pipeline
=
create
(
:ci_pipeline
,
ref:
"refs/heads/
#{
merge_request
.
source_branch
}
"
,
sha:
merge_request
.
diff_head_sha
)
pipeline
.
run!
pipeline
.
run!
pipeline
.
cancel!
pipeline
.
cancel!
merge_merge_requests_closing_issue
(
issue
)
merge_merge_requests_closing_issue
(
user
,
project
,
issue
)
expect
(
subject
[
:test
].
median
).
to
be_nil
expect
(
subject
[
:test
].
median
).
to
be_nil
end
end
...
...
spec/models/cycle_analytics_spec.rb
View file @
522f4b2c
...
@@ -6,7 +6,7 @@ describe CycleAnalytics do
...
@@ -6,7 +6,7 @@ describe CycleAnalytics do
let
(
:user
)
{
create
(
:user
,
:admin
)
}
let
(
:user
)
{
create
(
:user
,
:admin
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
project
,
created_at:
2
.
days
.
ago
)
}
let
(
:issue
)
{
create
(
:issue
,
project:
project
,
created_at:
2
.
days
.
ago
)
}
let
(
:milestone
)
{
create
(
:milestone
,
project:
project
)
}
let
(
:milestone
)
{
create
(
:milestone
,
project:
project
)
}
let
(
:mr
)
{
create_merge_request_closing_issue
(
issue
,
commit_message:
"References
#{
issue
.
to_reference
}
"
)
}
let
(
:mr
)
{
create_merge_request_closing_issue
(
user
,
project
,
issue
,
commit_message:
"References
#{
issue
.
to_reference
}
"
)
}
let
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
status:
'created'
,
project:
project
,
ref:
mr
.
source_branch
,
sha:
mr
.
source_branch_sha
,
head_pipeline_of:
mr
)
}
let
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
status:
'created'
,
project:
project
,
ref:
mr
.
source_branch
,
sha:
mr
.
source_branch_sha
,
head_pipeline_of:
mr
)
}
subject
{
described_class
.
new
(
project
,
from:
from_date
)
}
subject
{
described_class
.
new
(
project
,
from:
from_date
)
}
...
@@ -16,7 +16,7 @@ describe CycleAnalytics do
...
@@ -16,7 +16,7 @@ describe CycleAnalytics do
allow_any_instance_of
(
Gitlab
::
ReferenceExtractor
).
to
receive
(
:issues
).
and_return
([
issue
])
allow_any_instance_of
(
Gitlab
::
ReferenceExtractor
).
to
receive
(
:issues
).
and_return
([
issue
])
create_cycle
(
user
,
project
,
issue
,
mr
,
milestone
,
pipeline
)
create_cycle
(
user
,
project
,
issue
,
mr
,
milestone
,
pipeline
)
deploy_master
deploy_master
(
user
,
project
)
end
end
it
'returns every median for each stage for a specific project'
do
it
'returns every median for each stage for a specific project'
do
...
...
spec/requests/projects/cycle_analytics_events_spec.rb
View file @
522f4b2c
...
@@ -15,7 +15,7 @@ describe 'cycle analytics events' do
...
@@ -15,7 +15,7 @@ describe 'cycle analytics events' do
end
end
end
end
deploy_master
deploy_master
(
user
,
project
)
login_as
(
user
)
login_as
(
user
)
end
end
...
@@ -119,7 +119,7 @@ describe 'cycle analytics events' do
...
@@ -119,7 +119,7 @@ describe 'cycle analytics events' do
def
create_cycle
def
create_cycle
milestone
=
create
(
:milestone
,
project:
project
)
milestone
=
create
(
:milestone
,
project:
project
)
issue
.
update
(
milestone:
milestone
)
issue
.
update
(
milestone:
milestone
)
mr
=
create_merge_request_closing_issue
(
issue
,
commit_message:
"References
#{
issue
.
to_reference
}
"
)
mr
=
create_merge_request_closing_issue
(
user
,
project
,
issue
,
commit_message:
"References
#{
issue
.
to_reference
}
"
)
pipeline
=
create
(
:ci_empty_pipeline
,
status:
'created'
,
project:
project
,
ref:
mr
.
source_branch
,
sha:
mr
.
source_branch_sha
,
head_pipeline_of:
mr
)
pipeline
=
create
(
:ci_empty_pipeline
,
status:
'created'
,
project:
project
,
ref:
mr
.
source_branch
,
sha:
mr
.
source_branch_sha
,
head_pipeline_of:
mr
)
pipeline
.
run
pipeline
.
run
...
@@ -127,7 +127,7 @@ describe 'cycle analytics events' do
...
@@ -127,7 +127,7 @@ describe 'cycle analytics events' do
create
(
:ci_build
,
pipeline:
pipeline
,
status: :success
,
author:
user
)
create
(
:ci_build
,
pipeline:
pipeline
,
status: :success
,
author:
user
)
create
(
:ci_build
,
pipeline:
pipeline
,
status: :success
,
author:
user
)
create
(
:ci_build
,
pipeline:
pipeline
,
status: :success
,
author:
user
)
merge_merge_requests_closing_issue
(
issue
)
merge_merge_requests_closing_issue
(
user
,
project
,
issue
)
ProcessCommitWorker
.
new
.
perform
(
project
.
id
,
user
.
id
,
mr
.
commits
.
last
.
to_hash
)
ProcessCommitWorker
.
new
.
perform
(
project
.
id
,
user
.
id
,
mr
.
commits
.
last
.
to_hash
)
end
end
...
...
spec/spec_helper.rb
View file @
522f4b2c
...
@@ -186,6 +186,10 @@ RSpec.configure do |config|
...
@@ -186,6 +186,10 @@ RSpec.configure do |config|
example
.
run
if
Gitlab
::
Database
.
postgresql?
example
.
run
if
Gitlab
::
Database
.
postgresql?
end
end
config
.
around
(
:each
,
:mysql
)
do
|
example
|
example
.
run
if
Gitlab
::
Database
.
mysql?
end
# This makes sure the `ApplicationController#can?` method is stubbed with the
# This makes sure the `ApplicationController#can?` method is stubbed with the
# original implementation for all view specs.
# original implementation for all view specs.
config
.
before
(
:each
,
type: :view
)
do
config
.
before
(
:each
,
type: :view
)
do
...
...
spec/support/cycle_analytics_helpers.rb
View file @
522f4b2c
...
@@ -32,13 +32,13 @@ module CycleAnalyticsHelpers
...
@@ -32,13 +32,13 @@ module CycleAnalyticsHelpers
ci_build
=
create
(
:ci_build
,
pipeline:
pipeline
,
status: :success
,
author:
user
)
ci_build
=
create
(
:ci_build
,
pipeline:
pipeline
,
status: :success
,
author:
user
)
merge_merge_requests_closing_issue
(
issue
)
merge_merge_requests_closing_issue
(
user
,
project
,
issue
)
ProcessCommitWorker
.
new
.
perform
(
project
.
id
,
user
.
id
,
mr
.
commits
.
last
.
to_hash
)
ProcessCommitWorker
.
new
.
perform
(
project
.
id
,
user
.
id
,
mr
.
commits
.
last
.
to_hash
)
ci_build
ci_build
end
end
def
create_merge_request_closing_issue
(
issue
,
message:
nil
,
source_branch:
nil
,
commit_message:
'commit message'
)
def
create_merge_request_closing_issue
(
user
,
project
,
issue
,
message:
nil
,
source_branch:
nil
,
commit_message:
'commit message'
)
if
!
source_branch
||
project
.
repository
.
commit
(
source_branch
).
blank?
if
!
source_branch
||
project
.
repository
.
commit
(
source_branch
).
blank?
source_branch
=
generate
(
:branch
)
source_branch
=
generate
(
:branch
)
project
.
repository
.
add_branch
(
user
,
source_branch
,
'master'
)
project
.
repository
.
add_branch
(
user
,
source_branch
,
'master'
)
...
@@ -64,19 +64,19 @@ module CycleAnalyticsHelpers
...
@@ -64,19 +64,19 @@ module CycleAnalyticsHelpers
mr
mr
end
end
def
merge_merge_requests_closing_issue
(
issue
)
def
merge_merge_requests_closing_issue
(
user
,
project
,
issue
)
merge_requests
=
issue
.
closed_by_merge_requests
(
user
)
merge_requests
=
issue
.
closed_by_merge_requests
(
user
)
merge_requests
.
each
{
|
merge_request
|
MergeRequests
::
MergeService
.
new
(
project
,
user
).
execute
(
merge_request
)
}
merge_requests
.
each
{
|
merge_request
|
MergeRequests
::
MergeService
.
new
(
project
,
user
).
execute
(
merge_request
)
}
end
end
def
deploy_master
(
environment:
'production'
)
def
deploy_master
(
user
,
project
,
environment:
'production'
)
dummy_job
=
dummy_job
=
case
environment
case
environment
when
'production'
when
'production'
dummy_production_job
dummy_production_job
(
user
,
project
)
when
'staging'
when
'staging'
dummy_staging_job
dummy_staging_job
(
user
,
project
)
else
else
raise
ArgumentError
raise
ArgumentError
end
end
...
@@ -84,16 +84,15 @@ module CycleAnalyticsHelpers
...
@@ -84,16 +84,15 @@ module CycleAnalyticsHelpers
CreateDeploymentService
.
new
(
dummy_job
).
execute
CreateDeploymentService
.
new
(
dummy_job
).
execute
end
end
def
dummy_production_job
def
dummy_production_job
(
user
,
project
)
@dummy_job
||=
new_dummy_job
(
'production'
)
new_dummy_job
(
user
,
project
,
'production'
)
end
end
def
dummy_staging_job
def
dummy_staging_job
(
user
,
project
)
@dummy_job
||=
new_dummy_job
(
'staging'
)
new_dummy_job
(
user
,
project
,
'staging'
)
end
end
def
dummy_pipeline
def
dummy_pipeline
(
project
)
@dummy_pipeline
||=
Ci
::
Pipeline
.
new
(
Ci
::
Pipeline
.
new
(
sha:
project
.
repository
.
commit
(
'master'
).
sha
,
sha:
project
.
repository
.
commit
(
'master'
).
sha
,
ref:
'master'
,
ref:
'master'
,
...
@@ -102,7 +101,7 @@ module CycleAnalyticsHelpers
...
@@ -102,7 +101,7 @@ module CycleAnalyticsHelpers
protected:
false
)
protected:
false
)
end
end
def
new_dummy_job
(
environment
)
def
new_dummy_job
(
user
,
project
,
environment
)
project
.
environments
.
find_or_create_by
(
name:
environment
)
project
.
environments
.
find_or_create_by
(
name:
environment
)
Ci
::
Build
.
new
(
Ci
::
Build
.
new
(
...
@@ -113,7 +112,7 @@ module CycleAnalyticsHelpers
...
@@ -113,7 +112,7 @@ module CycleAnalyticsHelpers
tag:
false
,
tag:
false
,
name:
'dummy'
,
name:
'dummy'
,
stage:
'dummy'
,
stage:
'dummy'
,
pipeline:
dummy_pipeline
,
pipeline:
dummy_pipeline
(
project
)
,
protected:
false
)
protected:
false
)
end
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