summaryrefslogtreecommitdiff
path: root/spec/helpers
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-03-12 16:26:10 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-03-12 16:26:10 +0000
commit6653ccc011dec86e5140a5d09ea3b2357eab6714 (patch)
tree897193f37bcd98152a0ac214f80a3c4cfe1047c5 /spec/helpers
parentbff35a05aed6a31380a73c39113808fd262c2c37 (diff)
downloadgitlab-ce-6653ccc011dec86e5140a5d09ea3b2357eab6714.tar.gz
Add latest changes from gitlab-org/gitlab@13-10-stable-eev13.10.0-rc41
Diffstat (limited to 'spec/helpers')
-rw-r--r--spec/helpers/application_settings_helper_spec.rb15
-rw-r--r--spec/helpers/auth_helper_spec.rb8
-rw-r--r--spec/helpers/avatars_helper_spec.rb65
-rw-r--r--spec/helpers/boards_helper_spec.rb71
-rw-r--r--spec/helpers/ci/pipeline_editor_helper_spec.rb7
-rw-r--r--spec/helpers/commits_helper_spec.rb10
-rw-r--r--spec/helpers/gitlab_routing_helper_spec.rb10
-rw-r--r--spec/helpers/ide_helper_spec.rb47
-rw-r--r--spec/helpers/invite_members_helper_spec.rb25
-rw-r--r--spec/helpers/issuables_description_templates_helper_spec.rb104
-rw-r--r--spec/helpers/learn_gitlab_helper_spec.rb6
-rw-r--r--spec/helpers/merge_requests_helper_spec.rb53
-rw-r--r--spec/helpers/namespaces_helper_spec.rb36
-rw-r--r--spec/helpers/notifications_helper_spec.rb16
-rw-r--r--spec/helpers/preferences_helper_spec.rb1
-rw-r--r--spec/helpers/projects/project_members_helper_spec.rb4
-rw-r--r--spec/helpers/projects/security/configuration_helper_spec.rb13
-rw-r--r--spec/helpers/search_helper_spec.rb2
-rw-r--r--spec/helpers/services_helper_spec.rb46
-rw-r--r--spec/helpers/stat_anchors_helper_spec.rb18
-rw-r--r--spec/helpers/timeboxes_helper_spec.rb9
-rw-r--r--spec/helpers/visibility_level_helper_spec.rb16
22 files changed, 412 insertions, 170 deletions
diff --git a/spec/helpers/application_settings_helper_spec.rb b/spec/helpers/application_settings_helper_spec.rb
index 2cd01451e0d..c74ee3ce0ec 100644
--- a/spec/helpers/application_settings_helper_spec.rb
+++ b/spec/helpers/application_settings_helper_spec.rb
@@ -130,20 +130,15 @@ RSpec.describe ApplicationSettingsHelper do
before do
helper.instance_variable_set(:@application_setting, application_setting)
stub_storage_settings({ 'default': {}, 'storage_1': {}, 'storage_2': {} })
- allow(ApplicationSetting).to receive(:repository_storages_weighted_attributes).and_return(
- [:repository_storages_weighted_default,
- :repository_storages_weighted_storage_1,
- :repository_storages_weighted_storage_2])
-
stub_application_setting(repository_storages_weighted: { 'default' => 100, 'storage_1' => 50, 'storage_2' => nil })
end
it 'returns storages correctly' do
- expect(helper.storage_weights).to eq([
- { name: :repository_storages_weighted_default, label: 'default', value: 100 },
- { name: :repository_storages_weighted_storage_1, label: 'storage_1', value: 50 },
- { name: :repository_storages_weighted_storage_2, label: 'storage_2', value: 0 }
- ])
+ expect(helper.storage_weights).to eq(OpenStruct.new(
+ default: 100,
+ storage_1: 50,
+ storage_2: 0
+ ))
end
end
diff --git a/spec/helpers/auth_helper_spec.rb b/spec/helpers/auth_helper_spec.rb
index b5d70af1336..beffa4cf60e 100644
--- a/spec/helpers/auth_helper_spec.rb
+++ b/spec/helpers/auth_helper_spec.rb
@@ -99,19 +99,19 @@ RSpec.describe AuthHelper do
end
end
- describe 'experiment_enabled_button_based_providers' do
+ describe 'trial_enabled_button_based_providers' do
it 'returns the intersection set of github & google_oauth2 with enabled providers' do
allow(helper).to receive(:enabled_button_based_providers) { %w(twitter github google_oauth2) }
- expect(helper.experiment_enabled_button_based_providers).to eq(%w(github google_oauth2))
+ expect(helper.trial_enabled_button_based_providers).to eq(%w(github google_oauth2))
allow(helper).to receive(:enabled_button_based_providers) { %w(google_oauth2 bitbucket) }
- expect(helper.experiment_enabled_button_based_providers).to eq(%w(google_oauth2))
+ expect(helper.trial_enabled_button_based_providers).to eq(%w(google_oauth2))
allow(helper).to receive(:enabled_button_based_providers) { %w(bitbucket) }
- expect(helper.experiment_enabled_button_based_providers).to be_empty
+ expect(helper.trial_enabled_button_based_providers).to be_empty
end
end
diff --git a/spec/helpers/avatars_helper_spec.rb b/spec/helpers/avatars_helper_spec.rb
index 9e18ab34c1f..7fcd5ae880a 100644
--- a/spec/helpers/avatars_helper_spec.rb
+++ b/spec/helpers/avatars_helper_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe AvatarsHelper do
include UploadHelpers
- let(:user) { create(:user) }
+ let_it_be(:user) { create(:user) }
describe '#project_icon & #group_icon' do
shared_examples 'resource with a default avatar' do |source_type|
@@ -89,33 +89,60 @@ RSpec.describe AvatarsHelper do
end
end
- describe '#avatar_icon_for_email' do
+ describe '#avatar_icon_for_email', :clean_gitlab_redis_cache do
let(:user) { create(:user, avatar: File.open(uploaded_image_temp_path)) }
- context 'using an email' do
- context 'when there is a matching user' do
- it 'returns a relative URL for the avatar' do
- expect(helper.avatar_icon_for_email(user.email).to_s)
- .to eq(user.avatar.url)
+ subject { helper.avatar_icon_for_email(user.email).to_s }
+
+ shared_examples "returns avatar for email" do
+ context 'using an email' do
+ context 'when there is a matching user' do
+ it 'returns a relative URL for the avatar' do
+ expect(subject).to eq(user.avatar.url)
+ end
end
- end
- context 'when no user exists for the email' do
- it 'calls gravatar_icon' do
- expect(helper).to receive(:gravatar_icon).with('foo@example.com', 20, 2)
+ context 'when no user exists for the email' do
+ it 'calls gravatar_icon' do
+ expect(helper).to receive(:gravatar_icon).with('foo@example.com', 20, 2)
- helper.avatar_icon_for_email('foo@example.com', 20, 2)
+ helper.avatar_icon_for_email('foo@example.com', 20, 2)
+ end
end
- end
- context 'without an email passed' do
- it 'calls gravatar_icon' do
- expect(helper).to receive(:gravatar_icon).with(nil, 20, 2)
+ context 'without an email passed' do
+ it 'calls gravatar_icon' do
+ expect(helper).to receive(:gravatar_icon).with(nil, 20, 2)
+ expect(User).not_to receive(:find_by_any_email)
- helper.avatar_icon_for_email(nil, 20, 2)
+ helper.avatar_icon_for_email(nil, 20, 2)
+ end
end
end
end
+
+ context "when :avatar_cache_for_email flag is enabled" do
+ before do
+ stub_feature_flags(avatar_cache_for_email: true)
+ end
+
+ it_behaves_like "returns avatar for email"
+
+ it "caches the request" do
+ expect(User).to receive(:find_by_any_email).once.and_call_original
+
+ expect(helper.avatar_icon_for_email(user.email).to_s).to eq(user.avatar.url)
+ expect(helper.avatar_icon_for_email(user.email).to_s).to eq(user.avatar.url)
+ end
+ end
+
+ context "when :avatar_cache_for_email flag is disabled" do
+ before do
+ stub_feature_flags(avatar_cache_for_email: false)
+ end
+
+ it_behaves_like "returns avatar for email"
+ end
end
describe '#avatar_icon_for_user' do
@@ -346,7 +373,7 @@ RSpec.describe AvatarsHelper do
is_expected.to eq tag(
:img,
alt: "#{options[:user_name]}'s avatar",
- src: avatar_icon_for_email(options[:user_email], 16),
+ src: helper.avatar_icon_for_email(options[:user_email], 16),
data: { container: 'body' },
class: "avatar s16 has-tooltip",
title: options[:user_name]
@@ -379,7 +406,7 @@ RSpec.describe AvatarsHelper do
is_expected.to eq tag(
:img,
alt: "#{user_with_avatar.username}'s avatar",
- src: avatar_icon_for_email(user_with_avatar.email, 16, only_path: false),
+ src: helper.avatar_icon_for_email(user_with_avatar.email, 16, only_path: false),
data: { container: 'body' },
class: "avatar s16 has-tooltip",
title: user_with_avatar.username
diff --git a/spec/helpers/boards_helper_spec.rb b/spec/helpers/boards_helper_spec.rb
index b85ebec5545..83aad206547 100644
--- a/spec/helpers/boards_helper_spec.rb
+++ b/spec/helpers/boards_helper_spec.rb
@@ -3,52 +3,71 @@
require 'spec_helper'
RSpec.describe BoardsHelper do
+ let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project) }
+ let_it_be(:base_group) { create(:group, path: 'base') }
+ let_it_be(:project_board) { create(:board, project: project) }
+ let_it_be(:group_board) { create(:board, group: base_group) }
describe '#build_issue_link_base' do
context 'project board' do
it 'returns correct path for project board' do
- @project = project
- @board = create(:board, project: @project)
+ assign(:project, project)
+ assign(:board, project_board)
- expect(build_issue_link_base).to eq("/#{@project.namespace.path}/#{@project.path}/-/issues")
+ expect(helper.build_issue_link_base).to eq("/#{project.namespace.path}/#{project.path}/-/issues")
end
end
context 'group board' do
- let(:base_group) { create(:group, path: 'base') }
-
it 'returns correct path for base group' do
- @board = create(:board, group: base_group)
+ assign(:board, group_board)
- expect(build_issue_link_base).to eq('/base/:project_path/issues')
+ expect(helper.build_issue_link_base).to eq('/base/:project_path/issues')
end
it 'returns correct path for subgroup' do
subgroup = create(:group, parent: base_group, path: 'sub')
- @board = create(:board, group: subgroup)
+ assign(:board, create(:board, group: subgroup))
- expect(build_issue_link_base).to eq('/base/sub/:project_path/issues')
+ expect(helper.build_issue_link_base).to eq('/base/sub/:project_path/issues')
end
end
end
- describe '#board_data' do
- let_it_be(:user) { create(:user) }
- let_it_be(:board) { create(:board, project: project) }
+ describe '#board_base_url' do
+ context 'when project board' do
+ it 'generates the correct url' do
+ assign(:board, group_board)
+ assign(:group, base_group)
+
+ expect(helper.board_base_url).to eq "http://test.host/groups/#{base_group.full_path}/-/boards"
+ end
+ end
+
+ context 'when project board' do
+ it 'generates the correct url' do
+ assign(:board, project_board)
+ assign(:project, project)
+
+ expect(helper.board_base_url).to eq "/#{project.full_path}/-/boards"
+ end
+ end
+ end
+ describe '#board_data' do
context 'project_board' do
before do
assign(:project, project)
- assign(:board, board)
+ assign(:board, project_board)
allow(helper).to receive(:current_user) { user }
- allow(helper).to receive(:can?).with(user, :create_non_backlog_issues, board).and_return(true)
- allow(helper).to receive(:can?).with(user, :admin_issue, board).and_return(true)
+ allow(helper).to receive(:can?).with(user, :create_non_backlog_issues, project_board).and_return(true)
+ allow(helper).to receive(:can?).with(user, :admin_issue, project_board).and_return(true)
end
it 'returns a board_lists_path as lists_endpoint' do
- expect(helper.board_data[:lists_endpoint]).to eq(board_lists_path(board))
+ expect(helper.board_data[:lists_endpoint]).to eq(board_lists_path(project_board))
end
it 'returns board type as parent' do
@@ -66,25 +85,22 @@ RSpec.describe BoardsHelper do
end
context 'group board' do
- let_it_be(:group) { create(:group, path: 'base') }
- let_it_be(:board) { create(:board, group: group) }
-
before do
- assign(:group, group)
- assign(:board, board)
+ assign(:group, base_group)
+ assign(:board, group_board)
allow(helper).to receive(:current_user) { user }
- allow(helper).to receive(:can?).with(user, :create_non_backlog_issues, board).and_return(true)
- allow(helper).to receive(:can?).with(user, :admin_issue, board).and_return(true)
+ allow(helper).to receive(:can?).with(user, :create_non_backlog_issues, group_board).and_return(true)
+ allow(helper).to receive(:can?).with(user, :admin_issue, group_board).and_return(true)
end
it 'returns correct path for base group' do
- expect(helper.build_issue_link_base).to eq('/base/:project_path/issues')
+ expect(helper.build_issue_link_base).to eq("/#{base_group.full_path}/:project_path/issues")
end
it 'returns required label endpoints' do
- expect(helper.board_data[:labels_fetch_path]).to eq("/groups/base/-/labels.json?include_ancestor_groups=true&only_group_labels=true")
- expect(helper.board_data[:labels_manage_path]).to eq("/groups/base/-/labels")
+ expect(helper.board_data[:labels_fetch_path]).to eq("/groups/#{base_group.full_path}/-/labels.json?include_ancestor_groups=true&only_group_labels=true")
+ expect(helper.board_data[:labels_manage_path]).to eq("/groups/#{base_group.full_path}/-/labels")
end
end
end
@@ -93,8 +109,7 @@ RSpec.describe BoardsHelper do
let(:board_json) { helper.current_board_json }
it 'can serialise with a basic set of attributes' do
- board = create(:board, project: project)
- assign(:board, board)
+ assign(:board, project_board)
expect(board_json).to match_schema('current-board')
end
diff --git a/spec/helpers/ci/pipeline_editor_helper_spec.rb b/spec/helpers/ci/pipeline_editor_helper_spec.rb
index 8f38d3b1439..7686983eb0f 100644
--- a/spec/helpers/ci/pipeline_editor_helper_spec.rb
+++ b/spec/helpers/ci/pipeline_editor_helper_spec.rb
@@ -19,12 +19,5 @@ RSpec.describe Ci::PipelineEditorHelper do
expect(subject).to be false
end
-
- it 'user can not view editor if feature is disabled' do
- allow(helper).to receive(:can_collaborate_with_project?).and_return(true)
- stub_feature_flags(ci_pipeline_editor_page: false)
-
- expect(subject).to be false
- end
end
end
diff --git a/spec/helpers/commits_helper_spec.rb b/spec/helpers/commits_helper_spec.rb
index 2f5f4c4596b..4a841fac064 100644
--- a/spec/helpers/commits_helper_spec.rb
+++ b/spec/helpers/commits_helper_spec.rb
@@ -238,15 +238,5 @@ RSpec.describe CommitsHelper do
expect(subject).to be_a(Gitlab::Git::DiffCollection)
end
end
-
- context "feature flag is disabled" do
- let(:paginate) { true }
-
- it "returns a standard DiffCollection" do
- stub_feature_flags(paginate_commit_view: false)
-
- expect(subject).to be_a(Gitlab::Git::DiffCollection)
- end
- end
end
end
diff --git a/spec/helpers/gitlab_routing_helper_spec.rb b/spec/helpers/gitlab_routing_helper_spec.rb
index f23ffcee35d..0df04d2a8a7 100644
--- a/spec/helpers/gitlab_routing_helper_spec.rb
+++ b/spec/helpers/gitlab_routing_helper_spec.rb
@@ -332,4 +332,14 @@ RSpec.describe GitlabRoutingHelper do
end
end
end
+
+ context 'GraphQL ETag paths' do
+ context 'with pipelines' do
+ let(:pipeline) { double(id: 5) }
+
+ it 'returns an ETag path for pipelines' do
+ expect(graphql_etag_pipeline_path(pipeline)).to eq('/api/graphql:pipelines/id/5')
+ end
+ end
+ end
end
diff --git a/spec/helpers/ide_helper_spec.rb b/spec/helpers/ide_helper_spec.rb
new file mode 100644
index 00000000000..db30446fa95
--- /dev/null
+++ b/spec/helpers/ide_helper_spec.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe IdeHelper do
+ describe '#ide_data' do
+ let_it_be(:project) { create(:project) }
+
+ before do
+ allow(helper).to receive(:current_user).and_return(project.creator)
+ end
+
+ context 'when instance vars are not set' do
+ it 'returns instance data in the hash as nil' do
+ expect(helper.ide_data)
+ .to include(
+ 'branch-name' => nil,
+ 'file-path' => nil,
+ 'merge-request' => nil,
+ 'forked-project' => nil,
+ 'project' => nil
+ )
+ end
+ end
+
+ context 'when instance vars are set' do
+ it 'returns instance data in the hash' do
+ self.instance_variable_set(:@branch, 'master')
+ self.instance_variable_set(:@path, 'foo/bar')
+ self.instance_variable_set(:@merge_request, '1')
+ self.instance_variable_set(:@forked_project, project)
+ self.instance_variable_set(:@project, project)
+
+ serialized_project = API::Entities::Project.represent(project).to_json
+
+ expect(helper.ide_data)
+ .to include(
+ 'branch-name' => 'master',
+ 'file-path' => 'foo/bar',
+ 'merge-request' => '1',
+ 'forked-project' => serialized_project,
+ 'project' => serialized_project
+ )
+ end
+ end
+ end
+end
diff --git a/spec/helpers/invite_members_helper_spec.rb b/spec/helpers/invite_members_helper_spec.rb
index 576021b37b3..62bd953cce8 100644
--- a/spec/helpers/invite_members_helper_spec.rb
+++ b/spec/helpers/invite_members_helper_spec.rb
@@ -11,6 +11,21 @@ RSpec.describe InviteMembersHelper do
helper.extend(Gitlab::Experimentation::ControllerConcern)
end
+ describe '#show_invite_members_track_event' do
+ it 'shows values when can directly invite members' do
+ allow(helper).to receive(:directly_invite_members?).and_return(true)
+
+ expect(helper.show_invite_members_track_event).to eq 'show_invite_members'
+ end
+
+ it 'shows values when can indirectly invite members' do
+ allow(helper).to receive(:directly_invite_members?).and_return(false)
+ allow(helper).to receive(:indirectly_invite_members?).and_return(true)
+
+ expect(helper.show_invite_members_track_event).to eq 'show_invite_members_version_b'
+ end
+ end
+
context 'with project' do
before do
assign(:project, project)
@@ -56,15 +71,7 @@ RSpec.describe InviteMembersHelper do
allow(helper).to receive(:current_user) { owner }
end
- it 'returns false' do
- allow(helper).to receive(:experiment_enabled?).with(:invite_members_version_a) { false }
-
- expect(helper.directly_invite_members?).to eq false
- end
-
it 'returns true' do
- allow(helper).to receive(:experiment_enabled?).with(:invite_members_version_a) { true }
-
expect(helper.directly_invite_members?).to eq true
end
end
@@ -75,8 +82,6 @@ RSpec.describe InviteMembersHelper do
end
it 'returns false' do
- allow(helper).to receive(:experiment_enabled?).with(:invite_members_version_a) { true }
-
expect(helper.directly_invite_members?).to eq false
end
end
diff --git a/spec/helpers/issuables_description_templates_helper_spec.rb b/spec/helpers/issuables_description_templates_helper_spec.rb
index 42643b755f8..e8961ccb535 100644
--- a/spec/helpers/issuables_description_templates_helper_spec.rb
+++ b/spec/helpers/issuables_description_templates_helper_spec.rb
@@ -13,22 +13,33 @@ RSpec.describe IssuablesDescriptionTemplatesHelper, :clean_gitlab_redis_cache do
let_it_be(:group_member) { create(:group_member, :developer, group: parent_group, user: user) }
let_it_be(:project_member) { create(:project_member, :developer, user: user, project: project) }
- it 'returns empty hash when template type does not exist' do
- expect(helper.issuable_templates(build(:project), 'non-existent-template-type')).to eq([])
+ context 'when feature flag disabled' do
+ before do
+ stub_feature_flags(inherited_issuable_templates: false)
+ end
+
+ it 'returns empty array when template type does not exist' do
+ expect(helper.issuable_templates(project, 'non-existent-template-type')).to eq([])
+ end
end
- context 'with cached issuable templates' do
+ context 'when feature flag enabled' do
before do
- allow(Gitlab::Template::IssueTemplate).to receive(:template_names).and_return({})
- allow(Gitlab::Template::MergeRequestTemplate).to receive(:template_names).and_return({})
+ stub_feature_flags(inherited_issuable_templates: true)
+ end
- helper.issuable_templates(project, 'issues')
- helper.issuable_templates(project, 'merge_request')
+ it 'returns empty hash when template type does not exist' do
+ expect(helper.issuable_templates(build(:project), 'non-existent-template-type')).to eq({})
end
+ end
+ context 'with cached issuable templates' do
it 'does not call TemplateFinder' do
- expect(Gitlab::Template::IssueTemplate).not_to receive(:template_names)
- expect(Gitlab::Template::MergeRequestTemplate).not_to receive(:template_names)
+ expect(Gitlab::Template::IssueTemplate).to receive(:template_names).once.and_call_original
+ expect(Gitlab::Template::MergeRequestTemplate).to receive(:template_names).once.and_call_original
+
+ helper.issuable_templates(project, 'issues')
+ helper.issuable_templates(project, 'merge_request')
helper.issuable_templates(project, 'issues')
helper.issuable_templates(project, 'merge_request')
end
@@ -63,29 +74,78 @@ RSpec.describe IssuablesDescriptionTemplatesHelper, :clean_gitlab_redis_cache do
end
describe '#issuable_templates_names' do
- let(:project) { double(Project, id: 21) }
-
- let(:templates) do
- [
- { name: "another_issue_template", id: "another_issue_template", project_id: project.id },
- { name: "custom_issue_template", id: "custom_issue_template", project_id: project.id }
- ]
- end
+ let_it_be(:project) { build(:project) }
- it 'returns project templates only' do
+ before do
allow(helper).to receive(:ref_project).and_return(project)
allow(helper).to receive(:issuable_templates).and_return(templates)
+ end
+
+ context 'when feature flag disabled' do
+ let(:templates) do
+ [
+ { name: "another_issue_template", id: "another_issue_template", project_id: project.id },
+ { name: "custom_issue_template", id: "custom_issue_template", project_id: project.id }
+ ]
+ end
- expect(helper.issuable_templates_names(Issue.new)).to eq(%w[another_issue_template custom_issue_template])
+ before do
+ stub_feature_flags(inherited_issuable_templates: false)
+ end
+
+ it 'returns project templates only' do
+ expect(helper.issuable_templates_names(Issue.new)).to eq(%w[another_issue_template custom_issue_template])
+ end
+ end
+
+ context 'when feature flag enabled' do
+ before do
+ stub_feature_flags(inherited_issuable_templates: true)
+ end
+
+ context 'with matching project templates' do
+ let(:templates) do
+ {
+ "" => [
+ { name: "another_issue_template", id: "another_issue_template", project_id: project.id },
+ { name: "custom_issue_template", id: "custom_issue_template", project_id: project.id }
+ ],
+ "Instance" => [
+ { name: "first_issue_issue_template", id: "first_issue_issue_template", project_id: non_existing_record_id },
+ { name: "second_instance_issue_template", id: "second_instance_issue_template", project_id: non_existing_record_id }
+ ]
+ }
+ end
+
+ it 'returns project templates only' do
+ expect(helper.issuable_templates_names(Issue.new)).to eq(%w[another_issue_template custom_issue_template])
+ end
+ end
+
+ context 'without matching project templates' do
+ let(:templates) do
+ {
+ "Project Templates" => [
+ { name: "another_issue_template", id: "another_issue_template", project_id: non_existing_record_id },
+ { name: "custom_issue_template", id: "custom_issue_template", project_id: non_existing_record_id }
+ ],
+ "Instance" => [
+ { name: "first_issue_issue_template", id: "first_issue_issue_template", project_id: non_existing_record_id },
+ { name: "second_instance_issue_template", id: "second_instance_issue_template", project_id: non_existing_record_id }
+ ]
+ }
+ end
+
+ it 'returns empty array' do
+ expect(helper.issuable_templates_names(Issue.new)).to eq([])
+ end
+ end
end
context 'when there are not templates in the project' do
let(:templates) { {} }
it 'returns empty array' do
- allow(helper).to receive(:ref_project).and_return(project)
- allow(helper).to receive(:issuable_templates).and_return(templates)
-
expect(helper.issuable_templates_names(Issue.new)).to eq([])
end
end
diff --git a/spec/helpers/learn_gitlab_helper_spec.rb b/spec/helpers/learn_gitlab_helper_spec.rb
index f789eb9d940..6cee8a9191c 100644
--- a/spec/helpers/learn_gitlab_helper_spec.rb
+++ b/spec/helpers/learn_gitlab_helper_spec.rb
@@ -41,11 +41,13 @@ RSpec.describe LearnGitlabHelper do
it 'sets correct path and completion status' do
expect(onboarding_actions_data[:git_write]).to eq({
url: project_issue_url(project, LearnGitlabHelper::ACTION_ISSUE_IDS[:git_write]),
- completed: true
+ completed: true,
+ svg: helper.image_path("learn_gitlab/git_write.svg")
})
expect(onboarding_actions_data[:pipeline_created]).to eq({
url: project_issue_url(project, LearnGitlabHelper::ACTION_ISSUE_IDS[:pipeline_created]),
- completed: false
+ completed: false,
+ svg: helper.image_path("learn_gitlab/pipeline_created.svg")
})
end
end
diff --git a/spec/helpers/merge_requests_helper_spec.rb b/spec/helpers/merge_requests_helper_spec.rb
index fce4d560b2f..3cf855229bb 100644
--- a/spec/helpers/merge_requests_helper_spec.rb
+++ b/spec/helpers/merge_requests_helper_spec.rb
@@ -90,4 +90,57 @@ RSpec.describe MergeRequestsHelper do
)
end
end
+
+ describe '#reviewers_label' do
+ let(:merge_request) { build_stubbed(:merge_request) }
+ let(:reviewer1) { build_stubbed(:user, name: 'Jane Doe') }
+ let(:reviewer2) { build_stubbed(:user, name: 'John Doe') }
+
+ before do
+ allow(merge_request).to receive(:reviewers).and_return(reviewers)
+ end
+
+ context 'when multiple reviewers exist' do
+ let(:reviewers) { [reviewer1, reviewer2] }
+
+ it 'returns reviewer label with reviewer names' do
+ expect(helper.reviewers_label(merge_request)).to eq("Reviewers: Jane Doe and John Doe")
+ end
+
+ it 'returns reviewer label only with include_value: false' do
+ expect(helper.reviewers_label(merge_request, include_value: false)).to eq("Reviewers")
+ end
+
+ context 'when the name contains a URL' do
+ let(:reviewers) { [build_stubbed(:user, name: 'www.gitlab.com')] }
+
+ it 'returns sanitized name' do
+ expect(helper.reviewers_label(merge_request)).to eq("Reviewer: www_gitlab_com")
+ end
+ end
+ end
+
+ context 'when one reviewer exists' do
+ let(:reviewers) { [reviewer1] }
+
+ it 'returns reviewer label with no names' do
+ expect(helper.reviewers_label(merge_request)).to eq("Reviewer: Jane Doe")
+ end
+
+ it 'returns reviewer label only with include_value: false' do
+ expect(helper.reviewers_label(merge_request, include_value: false)).to eq("Reviewer")
+ end
+ end
+
+ context 'when no reviewers exist' do
+ let(:reviewers) { [] }
+
+ it 'returns reviewer label with no names' do
+ expect(helper.reviewers_label(merge_request)).to eq("Reviewers: ")
+ end
+ it 'returns reviewer label only with include_value: false' do
+ expect(helper.reviewers_label(merge_request, include_value: false)).to eq("Reviewers")
+ end
+ end
+ end
end
diff --git a/spec/helpers/namespaces_helper_spec.rb b/spec/helpers/namespaces_helper_spec.rb
index 1636ba6ef42..b436f4ab0c9 100644
--- a/spec/helpers/namespaces_helper_spec.rb
+++ b/spec/helpers/namespaces_helper_spec.rb
@@ -46,13 +46,26 @@ RSpec.describe NamespacesHelper do
end
describe '#namespaces_options' do
- it 'returns groups without being a member for admin' do
- allow(helper).to receive(:current_user).and_return(admin)
+ context 'when admin mode is enabled', :enable_admin_mode do
+ it 'returns groups without being a member for admin' do
+ allow(helper).to receive(:current_user).and_return(admin)
- options = helper.namespaces_options(user_group.id, display_path: true, extra_group: user_group.id)
+ options = helper.namespaces_options(user_group.id, display_path: true, extra_group: user_group.id)
- expect(options).to include(admin_group.name)
- expect(options).to include(user_group.name)
+ expect(options).to include(admin_group.name)
+ expect(options).to include(user_group.name)
+ end
+ end
+
+ context 'when admin mode is disabled' do
+ it 'returns only allowed namespaces for admin' do
+ allow(helper).to receive(:current_user).and_return(admin)
+
+ options = helper.namespaces_options(user_group.id, display_path: true, extra_group: user_group.id)
+
+ expect(options).to include(admin_group.name)
+ expect(options).not_to include(user_group.name)
+ end
end
it 'returns only allowed namespaces for user' do
@@ -74,13 +87,16 @@ RSpec.describe NamespacesHelper do
expect(options).to include(admin_group.name)
end
- it 'selects existing group' do
- allow(helper).to receive(:current_user).and_return(admin)
+ context 'when admin mode is disabled' do
+ it 'selects existing group' do
+ allow(helper).to receive(:current_user).and_return(admin)
+ user_group.add_owner(admin)
- options = helper.namespaces_options(:extra_group, display_path: true, extra_group: user_group)
+ options = helper.namespaces_options(:extra_group, display_path: true, extra_group: user_group)
- expect(options).to include("selected=\"selected\" value=\"#{user_group.id}\"")
- expect(options).to include(admin_group.name)
+ expect(options).to include("selected=\"selected\" value=\"#{user_group.id}\"")
+ expect(options).to include(admin_group.name)
+ end
end
it 'selects the new group by default' do
diff --git a/spec/helpers/notifications_helper_spec.rb b/spec/helpers/notifications_helper_spec.rb
index 555cffba614..a5338659659 100644
--- a/spec/helpers/notifications_helper_spec.rb
+++ b/spec/helpers/notifications_helper_spec.rb
@@ -19,22 +19,6 @@ RSpec.describe NotificationsHelper do
it { expect(notification_title(:global)).to match('Global') }
end
- describe '#notification_event_name' do
- context 'for success_pipeline' do
- it 'returns the custom name' do
- expect(FastGettext).to receive(:cached_find).with('NotificationEvent|Successful pipeline')
- expect(notification_event_name(:success_pipeline)).to eq('Successful pipeline')
- end
- end
-
- context 'for everything else' do
- it 'returns a humanized name' do
- expect(FastGettext).to receive(:cached_find).with('NotificationEvent|Failed pipeline')
- expect(notification_event_name(:failed_pipeline)).to eq('Failed pipeline')
- end
- end
- end
-
describe '#notification_icon_level' do
let(:user) { create(:user) }
let(:global_setting) { user.global_notification_setting }
diff --git a/spec/helpers/preferences_helper_spec.rb b/spec/helpers/preferences_helper_spec.rb
index be0ad5e1a3f..e5420fb6729 100644
--- a/spec/helpers/preferences_helper_spec.rb
+++ b/spec/helpers/preferences_helper_spec.rb
@@ -29,6 +29,7 @@ RSpec.describe PreferencesHelper do
['Starred Projects', 'stars'],
["Your Projects' Activity", 'project_activity'],
["Starred Projects' Activity", 'starred_project_activity'],
+ ["Followed Users' Activity", 'followed_user_activity'],
["Your Groups", 'groups'],
["Your To-Do List", 'todos'],
["Assigned Issues", 'issues'],
diff --git a/spec/helpers/projects/project_members_helper_spec.rb b/spec/helpers/projects/project_members_helper_spec.rb
index 5e0b4df7f7f..1a55840a58a 100644
--- a/spec/helpers/projects/project_members_helper_spec.rb
+++ b/spec/helpers/projects/project_members_helper_spec.rb
@@ -166,7 +166,7 @@ RSpec.describe Projects::ProjectMembersHelper do
members: helper.project_members_data_json(project, present_members(project_members)),
member_path: '/foo-bar/-/project_members/:id',
source_id: project.id,
- can_manage_members: true
+ can_manage_members: 'true'
})
end
end
@@ -193,7 +193,7 @@ RSpec.describe Projects::ProjectMembersHelper do
members: helper.project_group_links_data_json(project_group_links),
member_path: '/foo-bar/-/group_links/:id',
source_id: project.id,
- can_manage_members: true
+ can_manage_members: 'true'
})
end
end
diff --git a/spec/helpers/projects/security/configuration_helper_spec.rb b/spec/helpers/projects/security/configuration_helper_spec.rb
new file mode 100644
index 00000000000..c5049bd87f0
--- /dev/null
+++ b/spec/helpers/projects/security/configuration_helper_spec.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Projects::Security::ConfigurationHelper do
+ let(:current_user) { create(:user) }
+
+ describe 'security_upgrade_path' do
+ subject { security_upgrade_path }
+
+ it { is_expected.to eq('https://about.gitlab.com/pricing/') }
+ end
+end
diff --git a/spec/helpers/search_helper_spec.rb b/spec/helpers/search_helper_spec.rb
index a977f2c88c6..2b79fd6a5ef 100644
--- a/spec/helpers/search_helper_spec.rb
+++ b/spec/helpers/search_helper_spec.rb
@@ -580,7 +580,7 @@ RSpec.describe SearchHelper do
describe '#issuable_state_to_badge_class' do
context 'with merge request' do
it 'returns correct badge based on status' do
- expect(issuable_state_to_badge_class(build(:merge_request, :merged))).to eq(:primary)
+ expect(issuable_state_to_badge_class(build(:merge_request, :merged))).to eq(:info)
expect(issuable_state_to_badge_class(build(:merge_request, :closed))).to eq(:danger)
expect(issuable_state_to_badge_class(build(:merge_request, :opened))).to eq(:success)
end
diff --git a/spec/helpers/services_helper_spec.rb b/spec/helpers/services_helper_spec.rb
index 534f33d9b5a..1726a8362a7 100644
--- a/spec/helpers/services_helper_spec.rb
+++ b/spec/helpers/services_helper_spec.rb
@@ -4,27 +4,35 @@ require 'spec_helper'
RSpec.describe ServicesHelper do
describe '#integration_form_data' do
+ let(:fields) do
+ [
+ :id,
+ :show_active,
+ :activated,
+ :type,
+ :merge_request_events,
+ :commit_events,
+ :enable_comments,
+ :comment_detail,
+ :learn_more_path,
+ :trigger_events,
+ :fields,
+ :inherit_from_id,
+ :integration_level,
+ :editable,
+ :cancel_path,
+ :can_test,
+ :test_path,
+ :reset_path
+ ]
+ end
+
subject { helper.integration_form_data(integration) }
- context 'Jira service' do
- let(:integration) { build(:jira_service) }
-
- it 'includes Jira specific fields' do
- is_expected.to include(
- :id,
- :show_active,
- :activated,
- :type,
- :merge_request_events,
- :commit_events,
- :enable_comments,
- :comment_detail,
- :trigger_events,
- :fields,
- :inherit_from_id,
- :integration_level
- )
- end
+ context 'Slack service' do
+ let(:integration) { build(:slack_service) }
+
+ it { is_expected.to include(*fields) }
specify do
expect(subject[:reset_path]).to eq(helper.scoped_reset_integration_path(integration))
diff --git a/spec/helpers/stat_anchors_helper_spec.rb b/spec/helpers/stat_anchors_helper_spec.rb
index 0615baac3cb..f3830bf4172 100644
--- a/spec/helpers/stat_anchors_helper_spec.rb
+++ b/spec/helpers/stat_anchors_helper_spec.rb
@@ -18,7 +18,7 @@ RSpec.describe StatAnchorsHelper do
context 'when anchor is not a link' do
context 'when class_modifier is set' do
- let(:anchor) { anchor_klass.new(false, nil, nil, 'default') }
+ let(:anchor) { anchor_klass.new(false, nil, nil, 'btn-default') }
it 'returns the proper attributes' do
expect(subject[:class]).to include('gl-button btn btn-default')
@@ -49,5 +49,21 @@ RSpec.describe StatAnchorsHelper do
expect(subject[:itemprop]).to eq true
end
end
+
+ context 'when data is not set' do
+ let(:anchor) { anchor_klass.new(false, nil, nil, nil, nil, nil, nil) }
+
+ it 'returns the data attributes' do
+ expect(subject[:data]).to be_nil
+ end
+ end
+
+ context 'when itemprop is set' do
+ let(:anchor) { anchor_klass.new(false, nil, nil, nil, nil, nil, { 'toggle' => 'modal' }) }
+
+ it 'returns the data attributes' do
+ expect(subject[:data]).to eq({ 'toggle' => 'modal' })
+ end
+ end
end
end
diff --git a/spec/helpers/timeboxes_helper_spec.rb b/spec/helpers/timeboxes_helper_spec.rb
index 94e997f7a65..9cbed7668ac 100644
--- a/spec/helpers/timeboxes_helper_spec.rb
+++ b/spec/helpers/timeboxes_helper_spec.rb
@@ -58,15 +58,6 @@ RSpec.describe TimeboxesHelper do
it { expect(result_for(start_date: yesterday)).to eq("started on #{yesterday_formatted}") }
it { expect(result_for(start_date: yesterday, due_date: tomorrow)).to eq("#{yesterday_formatted}–#{tomorrow_formatted}") }
end
-
- context 'iteration' do
- # Iterations always have start and due dates, so only A-B format is expected
- it 'formats properly' do
- iteration = build(:iteration, start_date: yesterday, due_date: tomorrow)
-
- expect(timebox_date_range(iteration)).to eq("#{yesterday_formatted}–#{tomorrow_formatted}")
- end
- end
end
describe '#milestone_counts' do
diff --git a/spec/helpers/visibility_level_helper_spec.rb b/spec/helpers/visibility_level_helper_spec.rb
index 10e0815918f..2aac0cae0c6 100644
--- a/spec/helpers/visibility_level_helper_spec.rb
+++ b/spec/helpers/visibility_level_helper_spec.rb
@@ -33,6 +33,22 @@ RSpec.describe VisibilityLevelHelper do
end
end
+ describe 'visibility_level_label' do
+ using RSpec::Parameterized::TableSyntax
+
+ where(:level_value, :level_name) do
+ Gitlab::VisibilityLevel::PRIVATE | 'Private'
+ Gitlab::VisibilityLevel::INTERNAL | 'Internal'
+ Gitlab::VisibilityLevel::PUBLIC | 'Public'
+ end
+
+ with_them do
+ it 'returns the name of the visibility level' do
+ expect(visibility_level_label(level_value)).to eq(level_name)
+ end
+ end
+ end
+
describe 'visibility_level_description' do
context 'used with a Project' do
let(:descriptions) do