Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/helpers/groups_helper_spec.rb')
-rw-r--r--spec/helpers/groups_helper_spec.rb161
1 files changed, 69 insertions, 92 deletions
diff --git a/spec/helpers/groups_helper_spec.rb b/spec/helpers/groups_helper_spec.rb
index 0d2af464902..d588120bb98 100644
--- a/spec/helpers/groups_helper_spec.rb
+++ b/spec/helpers/groups_helper_spec.rb
@@ -5,33 +5,31 @@ require 'spec_helper'
RSpec.describe GroupsHelper do
include ApplicationHelper
- describe 'group_icon_url' do
+ describe '#group_icon_url' do
it 'returns an url for the avatar' do
- avatar_file_path = File.join('spec', 'fixtures', 'banana_sample.gif')
+ group = create(:group, :with_avatar)
- group = create(:group)
- group.avatar = fixture_file_upload(avatar_file_path)
- group.save!
- expect(group_icon_url(group.path).to_s)
- .to match(group.avatar.url)
+ expect(group_icon_url(group.path).to_s).to match(group.avatar.url)
end
it 'gives default avatar_icon when no avatar is present' do
- group = create(:group)
+ group = build_stubbed(:group)
+
expect(group_icon_url(group.path)).to match_asset_path('group_avatar.png')
end
end
- describe 'group_dependency_proxy_url' do
+ describe '#group_dependency_proxy_url' do
it 'converts uppercase letters to lowercase' do
- group = create(:group, path: 'GroupWithUPPERcaseLetters')
+ group = build_stubbed(:group, path: 'GroupWithUPPERcaseLetters')
+
expect(group_dependency_proxy_url(group)).to end_with("/groupwithuppercaseletters#{DependencyProxy::URL_SUFFIX}")
end
end
- describe 'group_lfs_status' do
- let(:group) { create(:group) }
- let!(:project) { create(:project, namespace_id: group.id) }
+ describe '#group_lfs_status' do
+ let_it_be_with_reload(:group) { create(:group) }
+ let_it_be_with_reload(:project) { create(:project, namespace_id: group.id) }
before do
allow(Gitlab.config.lfs).to receive(:enabled).and_return(true)
@@ -54,9 +52,7 @@ RSpec.describe GroupsHelper do
end
context 'more than one project in group' do
- before do
- create(:project, namespace_id: group.id)
- end
+ let_it_be_with_reload(:another_project) { create(:project, namespace_id: group.id) }
context 'LFS enabled in group' do
before do
@@ -92,7 +88,7 @@ RSpec.describe GroupsHelper do
end
end
- describe 'group_title' do
+ describe '#group_title' do
let_it_be(:group) { create(:group) }
let_it_be(:nested_group) { create(:group, parent: group) }
let_it_be(:deep_nested_group) { create(:group, parent: nested_group) }
@@ -113,16 +109,26 @@ RSpec.describe GroupsHelper do
subject
end
+
+ it 'avoids N+1 queries' do
+ control_count = ActiveRecord::QueryRecorder.new do
+ helper.group_title(nested_group)
+ end
+
+ expect do
+ helper.group_title(very_deep_nested_group)
+ end.not_to exceed_query_limit(control_count)
+ end
end
- # rubocop:disable Layout/SpaceBeforeComma
describe '#share_with_group_lock_help_text' do
- let!(:root_group) { create(:group) }
- let!(:subgroup) { create(:group, parent: root_group) }
- let!(:sub_subgroup) { create(:group, parent: subgroup) }
- let(:root_owner) { create(:user) }
- let(:sub_owner) { create(:user) }
- let(:sub_sub_owner) { create(:user) }
+ let_it_be_with_reload(:root_group) { create(:group) }
+ let_it_be_with_reload(:subgroup) { create(:group, parent: root_group) }
+ let_it_be_with_reload(:sub_subgroup) { create(:group, parent: subgroup) }
+ let_it_be(:root_owner) { create(:user) }
+ let_it_be(:sub_owner) { create(:user) }
+ let_it_be(:sub_sub_owner) { create(:user) }
+
let(:possible_help_texts) do
{
default_help: "This setting will be applied to all subgroups unless overridden by a group owner",
@@ -149,6 +155,13 @@ RSpec.describe GroupsHelper do
subject { helper.share_with_group_lock_help_text(sub_subgroup) }
+ before_all do
+ root_group.add_owner(root_owner)
+ subgroup.add_owner(sub_owner)
+ sub_subgroup.add_owner(sub_sub_owner)
+ end
+
+ # rubocop:disable Layout/SpaceBeforeComma
where(:root_share_with_group_locked, :subgroup_share_with_group_locked, :sub_subgroup_share_with_group_locked, :current_user, :help_text, :linked_ancestor) do
[
[false , false , false , :root_owner , :default_help , nil],
@@ -177,13 +190,10 @@ RSpec.describe GroupsHelper do
[true , true , true , :sub_sub_owner , :ancestor_locked_so_ask_the_owner , :root_group]
]
end
+ # rubocop:enable Layout/SpaceBeforeComma
with_them do
before do
- root_group.add_owner(root_owner)
- subgroup.add_owner(sub_owner)
- sub_subgroup.add_owner(sub_sub_owner)
-
root_group.update_column(:share_with_group_lock, true) if root_share_with_group_locked
subgroup.update_column(:share_with_group_lock, true) if subgroup_share_with_group_locked
sub_subgroup.update_column(:share_with_group_lock, true) if sub_subgroup_share_with_group_locked
@@ -212,8 +222,8 @@ RSpec.describe GroupsHelper do
end
describe '#group_container_registry_nav' do
- let(:group) { create(:group, :public) }
- let(:user) { create(:user) }
+ let_it_be(:group) { create(:group, :public) }
+ let_it_be(:user) { create(:user) }
before do
stub_container_registry_config(enabled: true)
@@ -248,8 +258,8 @@ RSpec.describe GroupsHelper do
end
describe '#group_sidebar_links' do
- let(:group) { create(:group, :public) }
- let(:user) { create(:user) }
+ let_it_be(:group) { create(:group, :public) }
+ let_it_be(:user) { create(:user) }
before do
group.add_owner(user)
@@ -287,10 +297,10 @@ RSpec.describe GroupsHelper do
end
end
- describe 'parent_group_options' do
- let(:current_user) { create(:user) }
- let(:group) { create(:group, name: 'group') }
- let(:group2) { create(:group, name: 'group2') }
+ describe '#parent_group_options' do
+ let_it_be(:current_user) { create(:user) }
+ let_it_be(:group) { create(:group, name: 'group') }
+ let_it_be(:group2) { create(:group, name: 'group2') }
before do
group.add_owner(current_user)
@@ -321,9 +331,9 @@ RSpec.describe GroupsHelper do
end
describe '#can_disable_group_emails?' do
- let(:current_user) { create(:user) }
- let(:group) { create(:group, name: 'group') }
- let(:subgroup) { create(:group, name: 'subgroup', parent: group) }
+ let_it_be(:current_user) { create(:user) }
+ let_it_be(:group) { create(:group, name: 'group') }
+ let_it_be(:subgroup) { create(:group, name: 'subgroup', parent: group) }
before do
allow(helper).to receive(:current_user) { current_user }
@@ -361,8 +371,8 @@ RSpec.describe GroupsHelper do
end
describe '#can_update_default_branch_protection?' do
- let(:current_user) { create(:user) }
- let(:group) { create(:group) }
+ let_it_be(:current_user) { create(:user) }
+ let_it_be(:group) { create(:group) }
subject { helper.can_update_default_branch_protection?(group) }
@@ -451,75 +461,42 @@ RSpec.describe GroupsHelper do
end
end
- describe '#group_open_issues_count' do
+ describe '#render_setting_to_allow_project_access_token_creation?' do
let_it_be(:current_user) { create(:user) }
- let_it_be(:group) { create(:group, :public) }
- let_it_be(:count_service) { Groups::OpenIssuesCountService }
+ let_it_be(:parent) { create(:group) }
+ let_it_be(:group) { create(:group, parent: parent) }
before do
allow(helper).to receive(:current_user) { current_user }
+ parent.add_owner(current_user)
+ group.add_owner(current_user)
end
- it 'returns count value from cache' do
- allow_next_instance_of(count_service) do |service|
- allow(service).to receive(:count).and_return(2500)
- end
-
- expect(helper.group_open_issues_count(group)).to eq('2.5k')
+ it 'returns true if group is root' do
+ expect(helper.render_setting_to_allow_project_access_token_creation?(parent)).to be_truthy
end
- context 'when cached_sidebar_open_issues_count feature flag is disabled' do
- before do
- stub_feature_flags(cached_sidebar_open_issues_count: false)
- end
-
- it 'returns not cached issues count' do
- allow(helper).to receive(:group_issues_count).and_return(2500)
-
- expect(helper.group_open_issues_count(group)).to eq('2,500')
- end
+ it 'returns false if group is subgroup' do
+ expect(helper.render_setting_to_allow_project_access_token_creation?(group)).to be_falsy
end
end
- describe '#cached_open_group_issues_count' do
+ describe '#cached_issuables_count' do
let_it_be(:current_user) { create(:user) }
let_it_be(:group) { create(:group, name: 'group') }
- let_it_be(:count_service) { Groups::OpenIssuesCountService }
- before do
- allow(helper).to receive(:current_user) { current_user }
- end
+ context 'with issues type' do
+ let(:type) { :issues }
+ let(:count_service) { Groups::OpenIssuesCountService }
- it 'returns all digits for count value under 1000' do
- 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')
- end
-
- it 'returns truncated digits for count value over 1000' do
- 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.3k')
+ it_behaves_like 'cached issuables count'
end
- it 'returns truncated digits for count value over 10000' do
- 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('12.6k')
- end
-
- it 'returns truncated digits for count value over 100000' do
- allow_next_instance_of(count_service) do |service|
- allow(service).to receive(:count).and_return(112560)
- end
+ context 'with merge requests type' do
+ let(:type) { :merge_requests }
+ let(:count_service) { Groups::MergeRequestsCountService }
- expect(helper.cached_open_group_issues_count(group)).to eq('112.6k')
+ it_behaves_like 'cached issuables count'
end
end
end