Commit 955d22cb authored by Eugenia Grieff's avatar Eugenia Grieff

Move template logic to helper

- Modify count format precision
- Fix specs
parent 5e93c81a
...@@ -61,6 +61,14 @@ module GroupsHelper ...@@ -61,6 +61,14 @@ module GroupsHelper
can?(current_user, :set_emails_disabled, group) && !group.parent&.emails_disabled? can?(current_user, :set_emails_disabled, group) && !group.parent&.emails_disabled?
end end
def group_open_issues_count(group)
if Feature.enabled?(:cached_sidebar_open_issues_count, group)
cached_open_group_issues_count(group)
else
number_with_delimiter(group_issues_count(state: 'opened'))
end
end
def group_issues_count(state:) def group_issues_count(state:)
IssuesFinder IssuesFinder
.new(current_user, group_id: @group.id, state: state, non_archived: true, include_subgroups: true) .new(current_user, group_id: @group.id, state: state, non_archived: true, include_subgroups: true)
...@@ -69,10 +77,15 @@ module GroupsHelper ...@@ -69,10 +77,15 @@ module GroupsHelper
end end
def cached_open_group_issues_count(group) def cached_open_group_issues_count(group)
issues_count = group.open_issues_count(current_user) count_service = Groups::OpenIssuesCountService
issues_count = count_service.new(group, current_user).count
if issues_count > 1000
ActiveSupport::NumberHelper.number_to_human(issues_count, units: { thousand: 'K' }, precision: 2) if issues_count > count_service::CACHED_COUNT_THRESHOLD
ActiveSupport::NumberHelper
.number_to_human(
issues_count,
units: { thousand: 'k', million: 'm' }, precision: 1, significant: false, format: '%n%u'
)
else else
number_with_delimiter(issues_count) number_with_delimiter(issues_count)
end end
......
...@@ -620,12 +620,6 @@ class Group < Namespace ...@@ -620,12 +620,6 @@ class Group < Namespace
Gitlab::ServiceDesk.supported? && all_projects.service_desk_enabled.exists? Gitlab::ServiceDesk.supported? && all_projects.service_desk_enabled.exists?
end end
# rubocop: disable CodeReuse/ServiceClass
def open_issues_count(current_user = nil)
Groups::OpenIssuesCountService.new(self, current_user).count
end
# rubocop: enable CodeReuse/ServiceClass
private private
def update_two_factor_requirement def update_two_factor_requirement
......
...@@ -28,6 +28,8 @@ module Groups ...@@ -28,6 +28,8 @@ module Groups
end end
end end
private
def cache_options def cache_options
super.merge({ expires_in: EXPIRATION_TIME }) super.merge({ expires_in: EXPIRATION_TIME })
end end
......
- issues_count = group_open_issues_count(@group)
- merge_requests_count = group_merge_requests_count(state: 'opened') - merge_requests_count = group_merge_requests_count(state: 'opened')
- if Feature.enabled?(:cached_sidebar_open_issues_count, @group)
- issues_count = cached_open_group_issues_count(@group)
- else
- issues_count = number_with_delimiter(group_issues_count(state: 'opened'))
.nav-sidebar{ class: ("sidebar-collapsed-desktop" if collapsed_sidebar?), **tracking_attrs('groups_side_navigation', 'render', 'groups_side_navigation') } .nav-sidebar{ class: ("sidebar-collapsed-desktop" if collapsed_sidebar?), **tracking_attrs('groups_side_navigation', 'render', 'groups_side_navigation') }
.nav-sidebar-inner-scroll .nav-sidebar-inner-scroll
...@@ -58,6 +55,7 @@ ...@@ -58,6 +55,7 @@
%span.nav-item-name %span.nav-item-name
= _('Issues') = _('Issues')
%span.badge.badge-pill.count= issues_count %span.badge.badge-pill.count= issues_count
%ul.sidebar-sub-level-items{ data: { qa_selector: 'group_issues_sidebar_submenu'} } %ul.sidebar-sub-level-items{ data: { qa_selector: 'group_issues_sidebar_submenu'} }
= nav_link(path: ['groups#issues', 'labels#index', 'milestones#index', 'iterations#index'], html_options: { class: "fly-out-top-item" } ) do = nav_link(path: ['groups#issues', 'labels#index', 'milestones#index', 'iterations#index'], html_options: { class: "fly-out-top-item" } ) do
= link_to issues_group_path(@group) do = link_to issues_group_path(@group) do
......
...@@ -445,36 +445,45 @@ RSpec.describe GroupsHelper do ...@@ -445,36 +445,45 @@ RSpec.describe GroupsHelper do
end end
end end
describe `#cached_open_group_issues_count` do describe '#cached_open_group_issues_count' do
let(:current_user) { create(:user) } let_it_be(:current_user) { create(:user) }
let(:group) { create(:group, name: 'group') } let_it_be(:group) { create(:group, name: 'group') }
let_it_be(:count_service) { Groups::OpenIssuesCountService }
before do before do
allow(helper).to receive(:current_user) { current_user } allow(helper).to receive(:current_user) { current_user }
end end
it 'returns all digits for count value under 1000' do it 'returns all digits for count value under 1000' do
allow(group).to receive(:open_issues_count).with(current_user) { 999 } allow_next_instance_of(count_service) do |service|
allow(service).to receive(:count).and_return(999)
end
expect(helper.cached_open_group_issues_count(group)).to eq('999') expect(helper.cached_open_group_issues_count(group)).to eq('999')
end end
it 'returns truncated digits for count value over 1000' do it 'returns truncated digits for count value over 1000' do
allow(group).to receive(:open_issues_count).with(current_user) { 2300 } allow_next_instance_of(count_service) do |service|
allow(service).to receive(:count).and_return(2300)
end
expect(helper.cached_open_group_issues_count(group)).to eq('2.3 K') expect(helper.cached_open_group_issues_count(group)).to eq('2.3k')
end end
it 'returns truncated digits for count value over 10000' do it 'returns truncated digits for count value over 10000' do
allow(group).to receive(:open_issues_count).with(current_user) { 12560 } allow_next_instance_of(count_service) do |service|
allow(service).to receive(:count).and_return(12560)
end
expect(helper.cached_open_group_issues_count(group)).to eq('13 K') expect(helper.cached_open_group_issues_count(group)).to eq('12.6k')
end end
it 'returns truncated digits for count value over 100000' do it 'returns truncated digits for count value over 100000' do
allow(group).to receive(:open_issues_count).with(current_user) { 112560 } allow_next_instance_of(count_service) do |service|
allow(service).to receive(:count).and_return(112560)
end
expect(helper.cached_open_group_issues_count(group)).to eq('110 K') expect(helper.cached_open_group_issues_count(group)).to eq('112.6k')
end end
end end
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