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
1
Merge Requests
1
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
nexedi
gitlab-ce
Commits
e7568213
Commit
e7568213
authored
Oct 07, 2016
by
James Edwards-Jones
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue CSV preloads labels & author. Avoids N+1 queries.
parent
c777bb91
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
27 additions
and
13 deletions
+27
-13
app/views/projects/issues/index.csv.ruby
app/views/projects/issues/index.csv.ruby
+2
-2
spec/features/issues/csv_spec.rb
spec/features/issues/csv_spec.rb
+25
-11
No files found.
app/views/projects/issues/index.csv.ruby
View file @
e7568213
...
...
@@ -10,7 +10,7 @@ columns = {
'Created At (UTC)'
=>
->
(
issue
)
{
issue
.
created_at
&
.
strftime
(
'%Y-%m-%d %H:%M:%S'
)
},
'Updated At (UTC)'
=>
->
(
issue
)
{
issue
.
updated_at
&
.
strftime
(
'%Y-%m-%d %H:%M:%S'
)
},
'Milestone'
=>
->
(
issue
)
{
issue
.
milestone
&
.
title
},
'Labels'
=>
->
(
issue
)
{
issue
.
label
_names
.
join
(
','
).
presence
},
'Labels'
=>
->
(
issue
)
{
issue
.
label
s_array
.
sort_by
(
&
:title
).
map
(
&
:title
)
.
join
(
','
).
presence
},
}
CsvBuilder
.
new
(
columns
).
render
(
@issues
)
CsvBuilder
.
new
(
columns
).
render
(
@issues
.
includes
(
:author
,
:assignee
,
:labels
)
)
spec/features/issues/csv_spec.rb
View file @
e7568213
...
...
@@ -3,7 +3,10 @@ require 'spec_helper'
describe
'Issues csv'
,
feature:
true
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:empty_project
,
:public
)
}
let!
(
:issue
)
{
create
(
:issue
,
project:
project
)
}
let
(
:milestone
)
{
create
(
:milestone
,
title:
'v1.0'
,
project:
project
)
}
let
(
:idea_label
)
{
create
(
:label
,
project:
project
,
title:
'Idea'
)
}
let
(
:feature_label
)
{
create
(
:label
,
project:
project
,
title:
'Feature'
)
}
let!
(
:issue
)
{
create
(
:issue
,
project:
project
,
author:
user
)
}
before
{
login_as
(
user
)
}
...
...
@@ -15,7 +18,7 @@ describe 'Issues csv', feature: true do
end
it
'ignores pagination'
do
create_list
(
:issue
,
30
,
project:
project
)
create_list
(
:issue
,
30
,
project:
project
,
author:
user
)
visit
namespace_project_issues_path
(
project
.
namespace
,
project
)
click_on
'Download CSV'
...
...
@@ -30,11 +33,23 @@ describe 'Issues csv', feature: true do
expect
(
csv
.
count
).
to
eq
0
end
context
'includes'
do
let
(
:label1
)
{
create
(
:label
,
project:
project
,
title:
'Feature'
)
}
let
(
:label2
)
{
create
(
:label
,
project:
project
,
title:
'labels'
)
}
let
(
:milestone
)
{
create
(
:milestone
,
title:
"v1.0"
,
project:
project
)
}
def
visit_project_csv
visit
namespace_project_issues_path
(
project
.
namespace
,
project
,
format: :csv
)
end
it
'avoids excessive database calls'
do
control_count
=
ActiveRecord
::
QueryRecorder
.
new
{
visit_project_csv
}.
count
create_list
(
:labeled_issue
,
10
,
project:
project
,
assignee:
user
,
author:
user
,
milestone:
milestone
,
labels:
[
feature_label
,
idea_label
])
expect
{
visit_project_csv
}.
not_to
exceed_query_limit
(
control_count
)
end
context
'includes'
do
before
do
issue
.
update!
(
milestone:
milestone
,
assignee:
user
,
...
...
@@ -42,9 +57,9 @@ describe 'Issues csv', feature: true do
due_date:
DateTime
.
new
(
2014
,
3
,
2
),
created_at:
DateTime
.
new
(
2015
,
4
,
3
,
2
,
1
,
0
),
updated_at:
DateTime
.
new
(
2016
,
5
,
4
,
3
,
2
,
1
),
labels:
[
label1
,
label2
])
labels:
[
feature_label
,
idea_label
])
visit
namespace_project_issues_path
(
project
.
namespace
,
project
,
format: :csv
)
visit
_project_csv
end
specify
'title'
do
...
...
@@ -72,14 +87,13 @@ describe 'Issues csv', feature: true do
end
specify
'labels'
do
expect
(
csv
[
0
][
'Labels'
]).
to
eq
'Feature,
labels
'
expect
(
csv
[
0
][
'Labels'
]).
to
eq
'Feature,
Idea
'
end
specify
'due_date'
do
expect
(
csv
[
0
][
'Due Date'
]).
to
eq
'2014-03-02'
end
specify
'created_at'
do
expect
(
csv
[
0
][
'Created At (UTC)'
]).
to
eq
'2015-04-03 02:01:00'
end
...
...
@@ -91,7 +105,7 @@ describe 'Issues csv', feature: true do
context
'with minimal details'
do
it
'renders labels as nil'
do
visit
namespace_project_issues_path
(
project
.
namespace
,
project
,
format: :csv
)
visit
_project_csv
expect
(
csv
[
0
][
'Labels'
]).
to
eq
nil
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