Commit 56259155 authored by Rémy Coutable's avatar Rémy Coutable

Small improvements thanks to Robert's feedback

Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent 383dafdf
...@@ -33,7 +33,7 @@ module Projects ...@@ -33,7 +33,7 @@ module Projects
def issue def issue
@issue ||= @issue ||=
IssuesFinder.new(current_user, project_id: project.id, state: 'all') IssuesFinder.new(current_user, project_id: project.id)
.execute .execute
.where(iid: params[:id]) .where(iid: params[:id])
.first! .first!
......
...@@ -137,10 +137,10 @@ class ProjectsController < Projects::ApplicationController ...@@ -137,10 +137,10 @@ class ProjectsController < Projects::ApplicationController
noteable = noteable =
case params[:type] case params[:type]
when 'Issue' 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]) execute.find_by(iid: params[:type_id])
when 'MergeRequest' 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]) execute.find_by(iid: params[:type_id])
when 'Commit' when 'Commit'
@project.commit(params[:type_id]) @project.commit(params[:type_id])
......
...@@ -137,13 +137,13 @@ module IssuablesHelper ...@@ -137,13 +137,13 @@ module IssuablesHelper
issuables_finder.execute.page(1).total_count issuables_finder.execute.page(1).total_count
end 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 private_constant :IRRELEVANT_PARAMS_FOR_CACHE_KEY
def issuables_state_counter_cache_key(issuable_type, state) def issuables_state_counter_cache_key(issuable_type, state)
opts = params.dup opts = params.with_indifferent_access
opts['state'] = state opts[:state] = state
opts.delete_if { |k, v| IRRELEVANT_PARAMS_FOR_CACHE_KEY.include?(k) } opts.except!(*IRRELEVANT_PARAMS_FOR_CACHE_KEY)
hexdigest(['issuables_count', issuable_type, opts.sort].flatten.join('-')) hexdigest(['issuables_count', issuable_type, opts.sort].flatten.join('-'))
end end
......
...@@ -108,8 +108,7 @@ module API ...@@ -108,8 +108,7 @@ module API
finder_params = { finder_params = {
project_id: user_project.id, project_id: user_project.id,
milestone_title: @milestone.title, milestone_title: @milestone.title
state: 'all'
} }
issues = IssuesFinder.new(current_user, finder_params).execute issues = IssuesFinder.new(current_user, finder_params).execute
......
...@@ -21,11 +21,7 @@ describe "Dashboard Issues filtering", feature: true, js: true do ...@@ -21,11 +21,7 @@ describe "Dashboard Issues filtering", feature: true, js: true do
click_link 'No Milestone' click_link 'No Milestone'
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
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_selector('.issue', count: 1) expect(page).to have_selector('.issue', count: 1)
end end
...@@ -34,11 +30,7 @@ describe "Dashboard Issues filtering", feature: true, js: true do ...@@ -34,11 +30,7 @@ describe "Dashboard Issues filtering", feature: true, js: true do
click_link 'Any Milestone' click_link 'Any Milestone'
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
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_selector('.issue', count: 2) expect(page).to have_selector('.issue', count: 2)
end end
...@@ -49,11 +41,7 @@ describe "Dashboard Issues filtering", feature: true, js: true do ...@@ -49,11 +41,7 @@ describe "Dashboard Issues filtering", feature: true, js: true do
click_link milestone.title click_link milestone.title
end end
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
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_selector('.issue', count: 1) expect(page).to have_selector('.issue', count: 1)
end end
end end
......
...@@ -83,11 +83,7 @@ feature 'Issue filtering by Labels', feature: true, js: true do ...@@ -83,11 +83,7 @@ feature 'Issue filtering by Labels', feature: true, js: true do
end end
it 'applies the filters' do it 'applies the filters' do
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
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_content "Bugfix2" expect(page).to have_content "Bugfix2"
expect(page).not_to have_content "Feature1" expect(page).not_to have_content "Feature1"
expect(find('.filtered-labels')).to have_content "bug" expect(find('.filtered-labels')).to have_content "bug"
......
...@@ -227,11 +227,7 @@ describe 'Filter issues', feature: true do ...@@ -227,11 +227,7 @@ describe 'Filter issues', feature: true do
it 'filters by text and label' do it 'filters by text and label' do
fill_in 'issuable_search', with: 'Bug' fill_in 'issuable_search', with: 'Bug'
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
expect(page).to have_content('Open 2')
expect(page).to have_content('Closed 0')
expect(page).to have_content('All 2')
end
page.within '.issues-list' do page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 2) expect(page).to have_selector('.issue', count: 2)
end end
...@@ -242,11 +238,7 @@ describe 'Filter issues', feature: true do ...@@ -242,11 +238,7 @@ describe 'Filter issues', feature: true do
end end
find('.dropdown-menu-close-icon').click find('.dropdown-menu-close-icon').click
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
expect(page).to have_content('Open 1')
expect(page).to have_content('Closed 0')
expect(page).to have_content('All 1')
end
page.within '.issues-list' do page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 1) expect(page).to have_selector('.issue', count: 1)
end end
...@@ -255,11 +247,7 @@ describe 'Filter issues', feature: true do ...@@ -255,11 +247,7 @@ describe 'Filter issues', feature: true do
it 'filters by text and milestone' do it 'filters by text and milestone' do
fill_in 'issuable_search', with: 'Bug' fill_in 'issuable_search', with: 'Bug'
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
expect(page).to have_content('Open 2')
expect(page).to have_content('Closed 0')
expect(page).to have_content('All 2')
end
page.within '.issues-list' do page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 2) expect(page).to have_selector('.issue', count: 2)
end end
...@@ -269,11 +257,7 @@ describe 'Filter issues', feature: true do ...@@ -269,11 +257,7 @@ describe 'Filter issues', feature: true do
click_link '8' click_link '8'
end end
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
expect(page).to have_content('Open 1')
expect(page).to have_content('Closed 0')
expect(page).to have_content('All 1')
end
page.within '.issues-list' do page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 1) expect(page).to have_selector('.issue', count: 1)
end end
...@@ -282,11 +266,7 @@ describe 'Filter issues', feature: true do ...@@ -282,11 +266,7 @@ describe 'Filter issues', feature: true do
it 'filters by text and assignee' do it 'filters by text and assignee' do
fill_in 'issuable_search', with: 'Bug' fill_in 'issuable_search', with: 'Bug'
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
expect(page).to have_content('Open 2')
expect(page).to have_content('Closed 0')
expect(page).to have_content('All 2')
end
page.within '.issues-list' do page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 2) expect(page).to have_selector('.issue', count: 2)
end end
...@@ -296,11 +276,7 @@ describe 'Filter issues', feature: true do ...@@ -296,11 +276,7 @@ describe 'Filter issues', feature: true do
click_link user.name click_link user.name
end end
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
expect(page).to have_content('Open 1')
expect(page).to have_content('Closed 0')
expect(page).to have_content('All 1')
end
page.within '.issues-list' do page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 1) expect(page).to have_selector('.issue', count: 1)
end end
...@@ -309,11 +285,7 @@ describe 'Filter issues', feature: true do ...@@ -309,11 +285,7 @@ describe 'Filter issues', feature: true do
it 'filters by text and author' do it 'filters by text and author' do
fill_in 'issuable_search', with: 'Bug' fill_in 'issuable_search', with: 'Bug'
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
expect(page).to have_content('Open 2')
expect(page).to have_content('Closed 0')
expect(page).to have_content('All 2')
end
page.within '.issues-list' do page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 2) expect(page).to have_selector('.issue', count: 2)
end end
...@@ -323,11 +295,7 @@ describe 'Filter issues', feature: true do ...@@ -323,11 +295,7 @@ describe 'Filter issues', feature: true do
click_link user.name click_link user.name
end end
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
expect(page).to have_content('Open 1')
expect(page).to have_content('Closed 0')
expect(page).to have_content('All 1')
end
page.within '.issues-list' do page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 1) expect(page).to have_selector('.issue', count: 1)
end end
...@@ -356,11 +324,7 @@ describe 'Filter issues', feature: true do ...@@ -356,11 +324,7 @@ describe 'Filter issues', feature: true do
find('.dropdown-menu-close-icon').click find('.dropdown-menu-close-icon').click
wait_for_ajax wait_for_ajax
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
expect(page).to have_content('Open 2')
expect(page).to have_content('Closed 0')
expect(page).to have_content('All 2')
end
page.within '.issues-list' do page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 2) expect(page).to have_selector('.issue', count: 2)
end end
......
...@@ -17,11 +17,7 @@ feature 'Merge Request filtering by Milestone', feature: true do ...@@ -17,11 +17,7 @@ feature 'Merge Request filtering by Milestone', feature: true do
visit_merge_requests(project) visit_merge_requests(project)
filter_by_milestone(Milestone::None.title) filter_by_milestone(Milestone::None.title)
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
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_css('.merge-request', count: 1) expect(page).to have_css('.merge-request', count: 1)
end end
...@@ -44,11 +40,7 @@ feature 'Merge Request filtering by Milestone', feature: true do ...@@ -44,11 +40,7 @@ feature 'Merge Request filtering by Milestone', feature: true do
visit_merge_requests(project) visit_merge_requests(project)
filter_by_milestone(Milestone::Upcoming.title) filter_by_milestone(Milestone::Upcoming.title)
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
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_css('.merge-request', count: 1) expect(page).to have_css('.merge-request', count: 1)
end end
...@@ -71,11 +63,7 @@ feature 'Merge Request filtering by Milestone', feature: true do ...@@ -71,11 +63,7 @@ feature 'Merge Request filtering by Milestone', feature: true do
visit_merge_requests(project) visit_merge_requests(project)
filter_by_milestone(milestone.title) filter_by_milestone(milestone.title)
page.within '.issues-state-filters' do expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
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_css('.merge-request', count: 1) expect(page).to have_css('.merge-request', count: 1)
end end
......
...@@ -46,18 +46,18 @@ describe IssuablesHelper do ...@@ -46,18 +46,18 @@ describe IssuablesHelper do
describe 'counter caching based on issuable type and params', :caching do describe 'counter caching based on issuable type and params', :caching do
let(:params) do let(:params) do
{ {
'scope' => 'created-by-me', scope: 'created-by-me',
'state' => 'opened', state: 'opened',
'utf8' => '✓', utf8: '✓',
'author_id' => '11', author_id: '11',
'assignee_id' => '18', assignee_id: '18',
'label_name' => ['bug', 'discussion', 'documentation'], label_name: ['bug', 'discussion', 'documentation'],
'milestone_title' => 'v4.0', milestone_title: 'v4.0',
'sort' => 'due_date_asc', sort: 'due_date_asc',
'namespace_id' => 'gitlab-org', namespace_id: 'gitlab-org',
'project_id' => 'gitlab-ce', project_id: 'gitlab-ce',
'page' => 2 page: 2
} }.with_indifferent_access
end end
it 'returns the cached value when called for the same issuable type & with the same params' do it 'returns the cached value when called for the same issuable type & with the same params' do
...@@ -73,25 +73,33 @@ describe IssuablesHelper do ...@@ -73,25 +73,33 @@ describe IssuablesHelper do
to eq('<span>Open</span> <span class="badge">42</span>') to eq('<span>Open</span> <span class="badge">42</span>')
end end
describe 'keys not taken in account in the cache key' do it 'does not take some keys into account in the cache key' do
%w[state sort utf8 page].each do |param| expect(helper).to receive(:params).and_return({
it "does not take in account params['#{param}'] in the cache key" do author_id: '11',
expect(helper).to receive(:params).and_return('author_id' => '11', param => 'foo') state: 'foo',
expect(helper).to receive(:issuables_count_for_state).with(:issues, :opened).and_return(42) 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)). expect(helper.issuables_state_counter_text(:issues, :opened)).
to eq('<span>Open</span> <span class="badge">42</span>') to eq('<span>Open</span> <span class="badge">42</span>')
expect(helper).to receive(:params).and_return('author_id' => '11', param => 'bar') expect(helper).to receive(:params).and_return({
expect(helper).not_to receive(:issuables_count_for_state) 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)). expect(helper.issuables_state_counter_text(:issues, :opened)).
to eq('<span>Open</span> <span class="badge">42</span>') to eq('<span>Open</span> <span class="badge">42</span>')
end
end
end end
it 'does not take params order in acount in the cache key' do it 'does not take params order into account in the cache key' do
expect(helper).to receive(:params).and_return('author_id' => '11', 'state' => 'opened') 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) expect(helper).to receive(:issuables_count_for_state).with(:issues, :opened).and_return(42)
......
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
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