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:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-02-16 06:11:08 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-02-16 06:11:08 +0300
commitf0abe9dd95232062d37f2f5bf832224272b7497c (patch)
treea32766ee919a7710d705f859a3303f1557bdd825 /spec/helpers/nav
parente97635ea6c5bdb695188b3ad75edd5f5842387b4 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/helpers/nav')
-rw-r--r--spec/helpers/nav/new_dropdown_helper_spec.rb114
1 files changed, 70 insertions, 44 deletions
diff --git a/spec/helpers/nav/new_dropdown_helper_spec.rb b/spec/helpers/nav/new_dropdown_helper_spec.rb
index 2a69f8a56b3..3a66fe474ab 100644
--- a/spec/helpers/nav/new_dropdown_helper_spec.rb
+++ b/spec/helpers/nav/new_dropdown_helper_spec.rb
@@ -2,41 +2,29 @@
require 'spec_helper'
-RSpec.describe Nav::NewDropdownHelper do
+RSpec.describe Nav::NewDropdownHelper, feature_category: :navigation do
describe '#new_dropdown_view_model' do
- let_it_be(:user) { build_stubbed(:user) }
-
+ let(:user) { build_stubbed(:user) }
let(:current_user) { user }
let(:current_project) { nil }
let(:current_group) { nil }
-
let(:with_can_create_project) { false }
let(:with_can_create_group) { false }
let(:with_can_create_snippet) { false }
- let(:subject) { helper.new_dropdown_view_model(project: current_project, group: current_group) }
-
- def expected_menu_section(title:, menu_item:)
- [
- {
- title: title,
- menu_items: [menu_item]
- }
- ]
- end
+ subject(:view_model) { helper.new_dropdown_view_model(project: current_project, group: current_group) }
before do
allow(helper).to receive(:current_user) { current_user }
- allow(helper).to receive(:can?) { false }
-
+ allow(helper).to receive(:can?).and_return(false)
allow(user).to receive(:can_create_project?) { with_can_create_project }
allow(user).to receive(:can_create_group?) { with_can_create_group }
allow(user).to receive(:can?).with(:create_snippet) { with_can_create_snippet }
end
- shared_examples 'invite member link shared example' do
+ shared_examples 'invite member item' do
it 'shows invite member link with emoji' do
- expect(subject[:menu_sections]).to eq(
+ expect(view_model[:menu_sections]).to eq(
expected_menu_section(
title: expected_title,
menu_item: ::Gitlab::Nav::TopNavMenuItem.build(
@@ -56,27 +44,25 @@ RSpec.describe Nav::NewDropdownHelper do
end
it 'has title' do
- expect(subject[:title]).to eq('Create new...')
+ expect(view_model[:title]).to eq('Create new...')
end
context 'when current_user is nil (anonymous)' do
let(:current_user) { nil }
- it 'is nil' do
- expect(subject).to be_nil
- end
+ it { is_expected.to be_nil }
end
context 'when group and project are nil' do
it 'has no menu sections' do
- expect(subject[:menu_sections]).to eq([])
+ expect(view_model[:menu_sections]).to eq([])
end
context 'when can create project' do
let(:with_can_create_project) { true }
it 'has project menu item' do
- expect(subject[:menu_sections]).to eq(
+ expect(view_model[:menu_sections]).to eq(
expected_menu_section(
title: _('In GitLab'),
menu_item: ::Gitlab::Nav::TopNavMenuItem.build(
@@ -99,7 +85,7 @@ RSpec.describe Nav::NewDropdownHelper do
let(:with_can_create_group) { true }
it 'has group menu item' do
- expect(subject[:menu_sections]).to eq(
+ expect(view_model[:menu_sections]).to eq(
expected_menu_section(
title: _('In GitLab'),
menu_item: ::Gitlab::Nav::TopNavMenuItem.build(
@@ -122,7 +108,7 @@ RSpec.describe Nav::NewDropdownHelper do
let(:with_can_create_snippet) { true }
it 'has new snippet menu item' do
- expect(subject[:menu_sections]).to eq(
+ expect(view_model[:menu_sections]).to eq(
expected_menu_section(
title: _('In GitLab'),
menu_item: ::Gitlab::Nav::TopNavMenuItem.build(
@@ -143,29 +129,31 @@ RSpec.describe Nav::NewDropdownHelper do
end
context 'with persisted group' do
- let_it_be(:group) { build_stubbed(:group) }
-
+ let(:group) { build_stubbed(:group) }
let(:current_group) { group }
let(:with_can_create_projects_in_group) { false }
let(:with_can_create_subgroup_in_group) { false }
let(:with_can_admin_in_group) { false }
before do
- allow(group).to receive(:persisted?) { true }
- allow(helper).to receive(:can?).with(current_user, :create_projects, group) { with_can_create_projects_in_group }
- allow(helper).to receive(:can?).with(current_user, :create_subgroup, group) { with_can_create_subgroup_in_group }
- allow(helper).to receive(:can?).with(current_user, :admin_group_member, group) { with_can_admin_in_group }
+ allow(group).to receive(:persisted?).and_return(true)
+ allow(helper)
+ .to receive(:can?).with(current_user, :create_projects, group) { with_can_create_projects_in_group }
+ allow(helper)
+ .to receive(:can?).with(current_user, :create_subgroup, group) { with_can_create_subgroup_in_group }
+ allow(helper)
+ .to receive(:can?).with(current_user, :admin_group_member, group) { with_can_admin_in_group }
end
it 'has no menu sections' do
- expect(subject[:menu_sections]).to eq([])
+ expect(view_model[:menu_sections]).to eq([])
end
context 'when can create projects in group' do
let(:with_can_create_projects_in_group) { true }
it 'has new project menu item' do
- expect(subject[:menu_sections]).to eq(
+ expect(view_model[:menu_sections]).to eq(
expected_menu_section(
title: 'In this group',
menu_item: ::Gitlab::Nav::TopNavMenuItem.build(
@@ -187,7 +175,7 @@ RSpec.describe Nav::NewDropdownHelper do
let(:with_can_create_subgroup_in_group) { true }
it 'has new subgroup menu item' do
- expect(subject[:menu_sections]).to eq(
+ expect(view_model[:menu_sections]).to eq(
expected_menu_section(
title: 'In this group',
menu_item: ::Gitlab::Nav::TopNavMenuItem.build(
@@ -211,14 +199,13 @@ RSpec.describe Nav::NewDropdownHelper do
let(:expected_title) { 'In this group' }
let(:expected_href) { "/groups/#{group.full_path}/-/group_members" }
- it_behaves_like 'invite member link shared example'
+ it_behaves_like 'invite member item'
end
end
context 'with persisted project' do
- let_it_be(:project) { build_stubbed(:project) }
- let_it_be(:merge_project) { build_stubbed(:project) }
-
+ let(:project) { build_stubbed(:project) }
+ let(:merge_project) { build_stubbed(:project) }
let(:current_project) { project }
let(:with_show_new_issue_link) { false }
let(:with_merge_project) { nil }
@@ -233,14 +220,14 @@ RSpec.describe Nav::NewDropdownHelper do
end
it 'has no menu sections' do
- expect(subject[:menu_sections]).to eq([])
+ expect(view_model[:menu_sections]).to eq([])
end
context 'with show_new_issue_link?' do
let(:with_show_new_issue_link) { true }
it 'shows new issue menu item' do
- expect(subject[:menu_sections]).to eq(
+ expect(view_model[:menu_sections]).to eq(
expected_menu_section(
title: 'In this project',
menu_item: ::Gitlab::Nav::TopNavMenuItem.build(
@@ -263,7 +250,7 @@ RSpec.describe Nav::NewDropdownHelper do
let(:with_merge_project) { merge_project }
it 'shows merge project' do
- expect(subject[:menu_sections]).to eq(
+ expect(view_model[:menu_sections]).to eq(
expected_menu_section(
title: 'In this project',
menu_item: ::Gitlab::Nav::TopNavMenuItem.build(
@@ -285,7 +272,7 @@ RSpec.describe Nav::NewDropdownHelper do
let(:with_can_create_snippet_in_project) { true }
it 'shows new snippet' do
- expect(subject[:menu_sections]).to eq(
+ expect(view_model[:menu_sections]).to eq(
expected_menu_section(
title: 'In this project',
menu_item: ::Gitlab::Nav::TopNavMenuItem.build(
@@ -309,8 +296,47 @@ RSpec.describe Nav::NewDropdownHelper do
let(:expected_title) { 'In this project' }
let(:expected_href) { "/#{project.path_with_namespace}/-/project_members" }
- it_behaves_like 'invite member link shared example'
+ it_behaves_like 'invite member item'
+ end
+ end
+
+ context 'with persisted group and project' do
+ let(:project) { build_stubbed(:project) }
+ let(:group) { build_stubbed(:group) }
+ let(:current_project) { project }
+ let(:current_group) { group }
+
+ before do
+ allow(helper).to receive(:show_new_issue_link?).with(project).and_return(true)
+ allow(helper).to receive(:can?).with(current_user, :create_projects, group).and_return(true)
+ end
+
+ it 'gives precedence to group over project' do
+ group_section = expected_menu_section(
+ title: 'In this group',
+ menu_item: ::Gitlab::Nav::TopNavMenuItem.build(
+ id: 'new_project',
+ title: 'New project/repository',
+ href: "/projects/new?namespace_id=#{group.id}",
+ data: {
+ track_action: 'click_link_new_project_group',
+ track_label: 'plus_menu_dropdown',
+ track_property: 'navigation_top'
+ }
+ )
+ )
+
+ expect(view_model[:menu_sections]).to eq(group_section)
end
end
+
+ def expected_menu_section(title:, menu_item:)
+ [
+ {
+ title: title,
+ menu_items: [menu_item]
+ }
+ ]
+ end
end
end