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
56259155
Commit
56259155
authored
Sep 29, 2016
by
Rémy Coutable
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Small improvements thanks to Robert's feedback
Signed-off-by:
Rémy Coutable
<
remy@rymai.me
>
parent
383dafdf
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
79 additions
and
115 deletions
+79
-115
app/controllers/projects/boards/issues_controller.rb
app/controllers/projects/boards/issues_controller.rb
+1
-1
app/controllers/projects_controller.rb
app/controllers/projects_controller.rb
+2
-2
app/helpers/issuables_helper.rb
app/helpers/issuables_helper.rb
+4
-4
lib/api/milestones.rb
lib/api/milestones.rb
+1
-2
spec/features/dashboard_issues_spec.rb
spec/features/dashboard_issues_spec.rb
+3
-15
spec/features/issues/filter_by_labels_spec.rb
spec/features/issues/filter_by_labels_spec.rb
+1
-5
spec/features/issues/filter_issues_spec.rb
spec/features/issues/filter_issues_spec.rb
+9
-45
spec/features/merge_requests/filter_by_milestone_spec.rb
spec/features/merge_requests/filter_by_milestone_spec.rb
+3
-15
spec/helpers/issuables_helper_spec.rb
spec/helpers/issuables_helper_spec.rb
+34
-26
spec/support/matchers/have_issuable_counts.rb
spec/support/matchers/have_issuable_counts.rb
+21
-0
No files found.
app/controllers/projects/boards/issues_controller.rb
View file @
56259155
...
...
@@ -33,7 +33,7 @@ module Projects
def
issue
@issue
||=
IssuesFinder
.
new
(
current_user
,
project_id:
project
.
id
,
state:
'all'
)
IssuesFinder
.
new
(
current_user
,
project_id:
project
.
id
)
.
execute
.
where
(
iid:
params
[
:id
])
.
first!
...
...
app/controllers/projects_controller.rb
View file @
56259155
...
...
@@ -137,10 +137,10 @@ class ProjectsController < Projects::ApplicationController
noteable
=
case
params
[
:type
]
when
'Issue'
IssuesFinder
.
new
(
current_user
,
project_id:
@project
.
id
,
state:
'all'
).
IssuesFinder
.
new
(
current_user
,
project_id:
@project
.
id
).
execute
.
find_by
(
iid:
params
[
:type_id
])
when
'MergeRequest'
MergeRequestsFinder
.
new
(
current_user
,
project_id:
@project
.
id
,
state:
'all'
).
MergeRequestsFinder
.
new
(
current_user
,
project_id:
@project
.
id
).
execute
.
find_by
(
iid:
params
[
:type_id
])
when
'Commit'
@project
.
commit
(
params
[
:type_id
])
...
...
app/helpers/issuables_helper.rb
View file @
56259155
...
...
@@ -137,13 +137,13 @@ module IssuablesHelper
issuables_finder
.
execute
.
page
(
1
).
total_count
end
IRRELEVANT_PARAMS_FOR_CACHE_KEY
=
%
w
[utf8 sort page]
IRRELEVANT_PARAMS_FOR_CACHE_KEY
=
%
i
[utf8 sort page]
private_constant
:IRRELEVANT_PARAMS_FOR_CACHE_KEY
def
issuables_state_counter_cache_key
(
issuable_type
,
state
)
opts
=
params
.
dup
opts
[
'state'
]
=
state
opts
.
delete_if
{
|
k
,
v
|
IRRELEVANT_PARAMS_FOR_CACHE_KEY
.
include?
(
k
)
}
opts
=
params
.
with_indifferent_access
opts
[
:state
]
=
state
opts
.
except!
(
*
IRRELEVANT_PARAMS_FOR_CACHE_KEY
)
hexdigest
([
'issuables_count'
,
issuable_type
,
opts
.
sort
].
flatten
.
join
(
'-'
))
end
...
...
lib/api/milestones.rb
View file @
56259155
...
...
@@ -108,8 +108,7 @@ module API
finder_params
=
{
project_id:
user_project
.
id
,
milestone_title:
@milestone
.
title
,
state:
'all'
milestone_title:
@milestone
.
title
}
issues
=
IssuesFinder
.
new
(
current_user
,
finder_params
).
execute
...
...
spec/features/dashboard_issues_spec.rb
View file @
56259155
...
...
@@ -21,11 +21,7 @@ describe "Dashboard Issues filtering", feature: true, js: true do
click_link
'No Milestone'
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 1'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 1'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
1
,
closed:
0
,
all:
1
)
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
1
)
end
...
...
@@ -34,11 +30,7 @@ describe "Dashboard Issues filtering", feature: true, js: true do
click_link
'Any Milestone'
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 2'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 2'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
2
,
closed:
0
,
all:
2
)
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
2
)
end
...
...
@@ -49,11 +41,7 @@ describe "Dashboard Issues filtering", feature: true, js: true do
click_link
milestone
.
title
end
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 1'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 1'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
1
,
closed:
0
,
all:
1
)
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
1
)
end
end
...
...
spec/features/issues/filter_by_labels_spec.rb
View file @
56259155
...
...
@@ -83,11 +83,7 @@ feature 'Issue filtering by Labels', feature: true, js: true do
end
it
'applies the filters'
do
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 1'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 1'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
1
,
closed:
0
,
all:
1
)
expect
(
page
).
to
have_content
"Bugfix2"
expect
(
page
).
not_to
have_content
"Feature1"
expect
(
find
(
'.filtered-labels'
)).
to
have_content
"bug"
...
...
spec/features/issues/filter_issues_spec.rb
View file @
56259155
...
...
@@ -227,11 +227,7 @@ describe 'Filter issues', feature: true do
it
'filters by text and label'
do
fill_in
'issuable_search'
,
with:
'Bug'
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 2'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 2'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
2
,
closed:
0
,
all:
2
)
page
.
within
'.issues-list'
do
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
2
)
end
...
...
@@ -242,11 +238,7 @@ describe 'Filter issues', feature: true do
end
find
(
'.dropdown-menu-close-icon'
).
click
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 1'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 1'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
1
,
closed:
0
,
all:
1
)
page
.
within
'.issues-list'
do
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
1
)
end
...
...
@@ -255,11 +247,7 @@ describe 'Filter issues', feature: true do
it
'filters by text and milestone'
do
fill_in
'issuable_search'
,
with:
'Bug'
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 2'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 2'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
2
,
closed:
0
,
all:
2
)
page
.
within
'.issues-list'
do
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
2
)
end
...
...
@@ -269,11 +257,7 @@ describe 'Filter issues', feature: true do
click_link
'8'
end
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 1'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 1'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
1
,
closed:
0
,
all:
1
)
page
.
within
'.issues-list'
do
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
1
)
end
...
...
@@ -282,11 +266,7 @@ describe 'Filter issues', feature: true do
it
'filters by text and assignee'
do
fill_in
'issuable_search'
,
with:
'Bug'
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 2'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 2'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
2
,
closed:
0
,
all:
2
)
page
.
within
'.issues-list'
do
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
2
)
end
...
...
@@ -296,11 +276,7 @@ describe 'Filter issues', feature: true do
click_link
user
.
name
end
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 1'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 1'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
1
,
closed:
0
,
all:
1
)
page
.
within
'.issues-list'
do
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
1
)
end
...
...
@@ -309,11 +285,7 @@ describe 'Filter issues', feature: true do
it
'filters by text and author'
do
fill_in
'issuable_search'
,
with:
'Bug'
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 2'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 2'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
2
,
closed:
0
,
all:
2
)
page
.
within
'.issues-list'
do
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
2
)
end
...
...
@@ -323,11 +295,7 @@ describe 'Filter issues', feature: true do
click_link
user
.
name
end
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 1'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 1'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
1
,
closed:
0
,
all:
1
)
page
.
within
'.issues-list'
do
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
1
)
end
...
...
@@ -356,11 +324,7 @@ describe 'Filter issues', feature: true do
find
(
'.dropdown-menu-close-icon'
).
click
wait_for_ajax
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 2'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 2'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
2
,
closed:
0
,
all:
2
)
page
.
within
'.issues-list'
do
expect
(
page
).
to
have_selector
(
'.issue'
,
count:
2
)
end
...
...
spec/features/merge_requests/filter_by_milestone_spec.rb
View file @
56259155
...
...
@@ -17,11 +17,7 @@ feature 'Merge Request filtering by Milestone', feature: true do
visit_merge_requests
(
project
)
filter_by_milestone
(
Milestone
::
None
.
title
)
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 1'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 1'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
1
,
closed:
0
,
all:
1
)
expect
(
page
).
to
have_css
(
'.merge-request'
,
count:
1
)
end
...
...
@@ -44,11 +40,7 @@ feature 'Merge Request filtering by Milestone', feature: true do
visit_merge_requests
(
project
)
filter_by_milestone
(
Milestone
::
Upcoming
.
title
)
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 1'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 1'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
1
,
closed:
0
,
all:
1
)
expect
(
page
).
to
have_css
(
'.merge-request'
,
count:
1
)
end
...
...
@@ -71,11 +63,7 @@ feature 'Merge Request filtering by Milestone', feature: true do
visit_merge_requests
(
project
)
filter_by_milestone
(
milestone
.
title
)
page
.
within
'.issues-state-filters'
do
expect
(
page
).
to
have_content
(
'Open 1'
)
expect
(
page
).
to
have_content
(
'Closed 0'
)
expect
(
page
).
to
have_content
(
'All 1'
)
end
expect
(
page
).
to
have_issuable_counts
(
open:
1
,
closed:
0
,
all:
1
)
expect
(
page
).
to
have_css
(
'.merge-request'
,
count:
1
)
end
...
...
spec/helpers/issuables_helper_spec.rb
View file @
56259155
...
...
@@ -46,18 +46,18 @@ describe IssuablesHelper do
describe
'counter caching based on issuable type and params'
,
:caching
do
let
(
:params
)
do
{
'scope'
=>
'created-by-me'
,
'state'
=>
'opened'
,
'utf8'
=>
'✓'
,
'author_id'
=>
'11'
,
'assignee_id'
=>
'18'
,
'label_name'
=>
[
'bug'
,
'discussion'
,
'documentation'
],
'milestone_title'
=>
'v4.0'
,
'sort'
=>
'due_date_asc'
,
'namespace_id'
=>
'gitlab-org'
,
'project_id'
=>
'gitlab-ce'
,
'page'
=>
2
}
scope:
'created-by-me'
,
state:
'opened'
,
utf8:
'✓'
,
author_id:
'11'
,
assignee_id:
'18'
,
label_name:
[
'bug'
,
'discussion'
,
'documentation'
],
milestone_title:
'v4.0'
,
sort:
'due_date_asc'
,
namespace_id:
'gitlab-org'
,
project_id:
'gitlab-ce'
,
page:
2
}
.
with_indifferent_access
end
it
'returns the cached value when called for the same issuable type & with the same params'
do
...
...
@@ -73,25 +73,33 @@ describe IssuablesHelper do
to
eq
(
'<span>Open</span> <span class="badge">42</span>'
)
end
describe
'keys not taken in account in the cache key'
do
%w[state sort utf8 page]
.
each
do
|
param
|
it
"does not take in account params['
#{
param
}
'] in the cache key"
do
expect
(
helper
).
to
receive
(
:params
).
and_return
(
'author_id'
=>
'11'
,
param
=>
'foo'
)
expect
(
helper
).
to
receive
(
:issuables_count_for_state
).
with
(
:issues
,
:opened
).
and_return
(
42
)
it
'does not take some keys into account in the cache key'
do
expect
(
helper
).
to
receive
(
:params
).
and_return
({
author_id:
'11'
,
state:
'foo'
,
sort:
'foo'
,
utf8:
'foo'
,
page:
'foo'
}.
with_indifferent_access
)
expect
(
helper
).
to
receive
(
:issuables_count_for_state
).
with
(
:issues
,
:opened
).
and_return
(
42
)
expect
(
helper
.
issuables_state_counter_text
(
:issues
,
:opened
)).
to
eq
(
'<span>Open</span> <span class="badge">42</span>'
)
expect
(
helper
.
issuables_state_counter_text
(
:issues
,
:opened
)).
to
eq
(
'<span>Open</span> <span class="badge">42</span>'
)
expect
(
helper
).
to
receive
(
:params
).
and_return
(
'author_id'
=>
'11'
,
param
=>
'bar'
)
expect
(
helper
).
not_to
receive
(
:issuables_count_for_state
)
expect
(
helper
).
to
receive
(
:params
).
and_return
({
author_id:
'11'
,
state:
'bar'
,
sort:
'bar'
,
utf8:
'bar'
,
page:
'bar'
}.
with_indifferent_access
)
expect
(
helper
).
not_to
receive
(
:issuables_count_for_state
)
expect
(
helper
.
issuables_state_counter_text
(
:issues
,
:opened
)).
to
eq
(
'<span>Open</span> <span class="badge">42</span>'
)
end
end
expect
(
helper
.
issuables_state_counter_text
(
:issues
,
:opened
)).
to
eq
(
'<span>Open</span> <span class="badge">42</span>'
)
end
it
'does not take params order in
a
count in the cache key'
do
it
'does not take params order in
to ac
count in the cache key'
do
expect
(
helper
).
to
receive
(
:params
).
and_return
(
'author_id'
=>
'11'
,
'state'
=>
'opened'
)
expect
(
helper
).
to
receive
(
:issuables_count_for_state
).
with
(
:issues
,
:opened
).
and_return
(
42
)
...
...
spec/support/matchers/have_issuable_counts.rb
0 → 100644
View file @
56259155
RSpec
::
Matchers
.
define
:have_issuable_counts
do
|
opts
|
match
do
|
actual
|
expected_counts
=
opts
.
map
do
|
state
,
count
|
"
#{
state
.
to_s
.
humanize
}
#{
count
}
"
end
actual
.
within
'.issues-state-filters'
do
expected_counts
.
each
do
|
expected_count
|
expect
(
actual
).
to
have_content
(
expected_count
)
end
end
end
description
do
"displays the following issuable counts:
#{
expected_counts
.
inspect
}
"
end
failure_message
do
"expected the following issuable counts:
#{
expected_counts
.
inspect
}
to be displayed"
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