diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
commit | 9f46488805e86b1bc341ea1620b866016c2ce5ed (patch) | |
tree | f9748c7e287041e37d6da49e0a29c9511dc34768 /spec/helpers | |
parent | dfc92d081ea0332d69c8aca2f0e745cb48ae5e6d (diff) | |
download | gitlab-ce-9f46488805e86b1bc341ea1620b866016c2ce5ed.tar.gz |
Add latest changes from gitlab-org/gitlab@13-0-stable-ee
Diffstat (limited to 'spec/helpers')
24 files changed, 479 insertions, 137 deletions
diff --git a/spec/helpers/access_tokens_helper_spec.rb b/spec/helpers/access_tokens_helper_spec.rb new file mode 100644 index 00000000000..1d246d3f236 --- /dev/null +++ b/spec/helpers/access_tokens_helper_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require "spec_helper" + +describe AccessTokensHelper do + describe "#scope_description" do + using RSpec::Parameterized::TableSyntax + + where(:prefix, :description_location) do + :personal_access_token | [:doorkeeper, :scope_desc] + :project_access_token | [:doorkeeper, :project_access_token_scope_desc] + end + + with_them do + it { expect(helper.scope_description(prefix)).to eq(description_location) } + end + end +end diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index a96046735c8..05231cc6d09 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -71,6 +71,28 @@ describe ApplicationHelper do end end + describe '#admin_section?' do + context 'when controller is under the admin namespace' do + before do + allow(helper).to receive(:controller).and_return(Admin::UsersController.new) + end + + it 'returns true' do + expect(helper.admin_section?).to eq(true) + end + end + + context 'when controller is not under the admin namespace' do + before do + allow(helper).to receive(:controller).and_return(UsersController.new) + end + + it 'returns true' do + expect(helper.admin_section?).to eq(false) + end + end + end + describe 'simple_sanitize' do let(:a_tag) { '<a href="#">Foo</a>' } @@ -90,8 +112,11 @@ describe ApplicationHelper do end describe 'time_ago_with_tooltip' do + around do |example| + Time.use_zone('UTC') { example.run } + end + def element(*arguments) - Time.zone = 'UTC' @time = Time.zone.parse('2015-07-02 08:23') element = helper.time_ago_with_tooltip(@time, *arguments) diff --git a/spec/helpers/auth_helper_spec.rb b/spec/helpers/auth_helper_spec.rb index 1764a2bbc3c..23f3449d9a7 100644 --- a/spec/helpers/auth_helper_spec.rb +++ b/spec/helpers/auth_helper_spec.rb @@ -184,4 +184,40 @@ describe AuthHelper do end end end + + describe '#allow_admin_mode_password_authentication_for_web?' do + let(:user) { create(:user) } + + subject { helper.allow_admin_mode_password_authentication_for_web? } + + before do + allow(helper).to receive(:current_user).and_return(user) + end + + it { is_expected.to be(true) } + + context 'when password authentication for web is disabled' do + before do + stub_application_setting(password_authentication_enabled_for_web: false) + end + + it { is_expected.to be(false) } + end + + context 'when current_user is an ldap user' do + before do + allow(user).to receive(:ldap_user?).and_return(true) + end + + it { is_expected.to be(false) } + end + + context 'when user got password automatically set' do + before do + user.update_attribute(:password_automatically_set, true) + end + + it { is_expected.to be(false) } + end + end end diff --git a/spec/helpers/boards_helper_spec.rb b/spec/helpers/boards_helper_spec.rb index f5e5285554c..cb9be9d5fb4 100644 --- a/spec/helpers/boards_helper_spec.rb +++ b/spec/helpers/boards_helper_spec.rb @@ -48,6 +48,10 @@ describe BoardsHelper do it 'returns a board_lists_path as lists_endpoint' do expect(helper.board_data[:lists_endpoint]).to eq(board_lists_path(board)) end + + it 'returns board type as parent' do + expect(helper.board_data[:parent]).to eq('project') + end end describe '#current_board_json' do diff --git a/spec/helpers/clusters_helper_spec.rb b/spec/helpers/clusters_helper_spec.rb index eec62bbb990..d40ed2248ce 100644 --- a/spec/helpers/clusters_helper_spec.rb +++ b/spec/helpers/clusters_helper_spec.rb @@ -59,6 +59,32 @@ describe ClustersHelper do end end + describe '#provider_icon' do + it 'will return GCP logo with gcp argument' do + logo = helper.provider_icon('gcp') + + expect(logo).to match(%r(img alt="Google GKE" data-src="|/illustrations/logos/google_gke|svg)) + end + + it 'will return AWS logo with aws argument' do + logo = helper.provider_icon('aws') + + expect(logo).to match(%r(img alt="Amazon EKS" data-src="|/illustrations/logos/amazon_eks|svg)) + end + + it 'will return default logo with unknown provider' do + logo = helper.provider_icon('unknown') + + expect(logo).to match(%r(img alt="Kubernetes Cluster" data-src="|/illustrations/logos/kubernetes|svg)) + end + + it 'will return default logo when provider is empty' do + logo = helper.provider_icon + + expect(logo).to match(%r(img alt="Kubernetes Cluster" data-src="|/illustrations/logos/kubernetes|svg)) + end + end + describe '#cluster_type_label' do subject { helper.cluster_type_label(cluster_type) } diff --git a/spec/helpers/commits_helper_spec.rb b/spec/helpers/commits_helper_spec.rb index dd268c2411f..e036e97f745 100644 --- a/spec/helpers/commits_helper_spec.rb +++ b/spec/helpers/commits_helper_spec.rb @@ -82,4 +82,32 @@ describe CommitsHelper do expect(helper.commit_to_html(commit, ref, project)).to include('<div class="commit-content') end end + + describe 'commit_path' do + it 'returns a persisted merge request commit path' do + project = create(:project, :repository) + persisted_merge_request = create(:merge_request, source_project: project, target_project: project) + commit = project.repository.commit + + expect(helper.commit_path(persisted_merge_request.project, commit, merge_request: persisted_merge_request)) + .to eq(diffs_project_merge_request_path(project, persisted_merge_request, commit_id: commit.id)) + end + + it 'returns a non-persisted merge request commit path which commits still reside in the source project' do + source_project = create(:project, :repository) + target_project = create(:project, :repository) + non_persisted_merge_request = build(:merge_request, source_project: source_project, target_project: target_project) + commit = source_project.repository.commit + + expect(helper.commit_path(non_persisted_merge_request.project, commit, merge_request: non_persisted_merge_request)) + .to eq(project_commit_path(source_project, commit)) + end + + it 'returns a project commit path' do + project = create(:project, :repository) + commit = project.repository.commit + + expect(helper.commit_path(project, commit)).to eq(project_commit_path(project, commit)) + end + end end diff --git a/spec/helpers/environments_helper_spec.rb b/spec/helpers/environments_helper_spec.rb index 152e9c84ec5..0756e0162a5 100644 --- a/spec/helpers/environments_helper_spec.rb +++ b/spec/helpers/environments_helper_spec.rb @@ -37,10 +37,26 @@ describe EnvironmentsHelper do 'environment-state' => environment.state, 'custom-metrics-path' => project_prometheus_metrics_path(project), 'validate-query-path' => validate_query_project_prometheus_metrics_path(project), - 'custom-metrics-available' => 'true' + 'custom-metrics-available' => 'true', + 'alerts-endpoint' => project_prometheus_alerts_path(project, environment_id: environment.id, format: :json), + 'prometheus-alerts-available' => 'true' ) end + context 'without read_prometheus_alerts permission' do + before do + allow(helper).to receive(:can?) + .with(user, :read_prometheus_alerts, project) + .and_return(false) + end + + it 'returns false' do + expect(metrics_data).to include( + 'prometheus-alerts-available' => 'false' + ) + end + end + context 'with metrics_setting' do before do create(:project_metrics_setting, project: project, external_dashboard_url: 'http://gitlab.com') diff --git a/spec/helpers/events_helper_spec.rb b/spec/helpers/events_helper_spec.rb index ff99f76eb4d..12519390137 100644 --- a/spec/helpers/events_helper_spec.rb +++ b/spec/helpers/events_helper_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' describe EventsHelper do + include Gitlab::Routing + describe '#event_commit_title' do let(:message) { 'foo & bar ' + 'A' * 70 + '\n' + 'B' * 80 } @@ -197,5 +199,17 @@ describe EventsHelper do expect(subject).to eq("#{project_base_url}/-/merge_requests/#{event.note_target.iid}#note_#{event.target.id}") end + + context 'for design note events' do + let(:event) { create(:event, :for_design, project: project) } + + it 'returns an appropriate URL' do + iid = event.note_target.issue.iid + filename = event.note_target.filename + note_id = event.target.id + + expect(subject).to eq("#{project_base_url}/-/issues/#{iid}/designs/#{filename}#note_#{note_id}") + end + end end end diff --git a/spec/helpers/export_helper_spec.rb b/spec/helpers/export_helper_spec.rb new file mode 100644 index 00000000000..3fbda441b5d --- /dev/null +++ b/spec/helpers/export_helper_spec.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe ExportHelper do + describe '#project_export_descriptions' do + it 'includes design management' do + expect(project_export_descriptions).to include('Design Management files and data') + end + end +end diff --git a/spec/helpers/groups_helper_spec.rb b/spec/helpers/groups_helper_spec.rb index ac2f028f937..5be247c5b49 100644 --- a/spec/helpers/groups_helper_spec.rb +++ b/spec/helpers/groups_helper_spec.rb @@ -340,4 +340,31 @@ describe GroupsHelper do end end end + + describe '#can_update_default_branch_protection?' do + let(:current_user) { create(:user) } + let(:group) { create(:group) } + + subject { helper.can_update_default_branch_protection?(group) } + + before do + allow(helper).to receive(:current_user) { current_user } + end + + context 'for users who can update default branch protection of the group' do + before do + allow(helper).to receive(:can?).with(current_user, :update_default_branch_protection, group) { true } + end + + it { is_expected.to be_truthy } + end + + context 'for users who cannot update default branch protection of the group' do + before do + allow(helper).to receive(:can?).with(current_user, :update_default_branch_protection, group) { false } + end + + it { is_expected.to be_falsey } + end + end end diff --git a/spec/helpers/issuables_helper_spec.rb b/spec/helpers/issuables_helper_spec.rb index 7eb5d2fc08c..38ad11846d2 100644 --- a/spec/helpers/issuables_helper_spec.rb +++ b/spec/helpers/issuables_helper_spec.rb @@ -303,46 +303,4 @@ describe IssuablesHelper do end end end - - describe '#gitlab_team_member_badge' do - let(:issue) { build(:issue, author: user) } - - before do - allow(Gitlab).to receive(:com?).and_return(true) - end - - context 'when `:gitlab_employee_badge` feature flag is disabled' do - let(:user) { build(:user, email: 'test@gitlab.com') } - - before do - stub_feature_flags(gitlab_employee_badge: false) - end - - it 'returns nil' do - expect(helper.gitlab_team_member_badge(issue.author)).to be_nil - end - end - - context 'when issue author is not a GitLab team member' do - let(:user) { build(:user, email: 'test@example.com') } - - it 'returns nil' do - expect(helper.gitlab_team_member_badge(issue.author)).to be_nil - end - end - - context 'when issue author is a GitLab team member' do - let(:user) { build(:user, email: 'test@gitlab.com') } - - it 'returns span with svg icon' do - expect(helper.gitlab_team_member_badge(issue.author)).to have_selector('span > svg') - end - - context 'when `css_class` parameter is passed' do - it 'adds CSS classes' do - expect(helper.gitlab_team_member_badge(issue.author, css_class: 'foo bar baz')).to have_selector('span.foo.bar.baz') - end - end - end - end end diff --git a/spec/helpers/markup_helper_spec.rb b/spec/helpers/markup_helper_spec.rb index 33347f20de8..b2df543d651 100644 --- a/spec/helpers/markup_helper_spec.rb +++ b/spec/helpers/markup_helper_spec.rb @@ -95,12 +95,13 @@ describe MarkupHelper do context 'when text contains a relative link to an image in the repository' do let(:image_file) { "logo-white.png" } let(:text_with_relative_path) { "![](./#{image_file})\n" } - let(:generated_html) { helper.markdown(text_with_relative_path, requested_path: requested_path) } + let(:generated_html) { helper.markdown(text_with_relative_path, requested_path: requested_path, ref: ref) } subject { Nokogiri::HTML.parse(generated_html) } - context 'when requested_path is provided in the context' do + context 'when requested_path is provided, but ref isn\'t' do let(:requested_path) { 'files/images/README.md' } + let(:ref) { nil } it 'returns the correct HTML for the image' do expanded_path = "/#{project.full_path}/-/raw/master/files/images/#{image_file}" @@ -110,13 +111,43 @@ describe MarkupHelper do end end - context 'when requested_path parameter is not provided' do + context 'when requested_path and ref parameters are both provided' do + let(:requested_path) { 'files/images/README.md' } + let(:ref) { 'other_branch' } + + it 'returns the correct HTML for the image' do + project.repository.create_branch('other_branch') + + expanded_path = "/#{project.full_path}/-/raw/#{ref}/files/images/#{image_file}" + + expect(subject.css('a')[0].attr('href')).to eq(expanded_path) + expect(subject.css('img')[0].attr('data-src')).to eq(expanded_path) + end + end + + context 'when ref is provided, but requested_path isn\'t' do + let(:ref) { 'other_branch' } + let(:requested_path) { nil } + + it 'returns the correct HTML for the image' do + project.repository.create_branch('other_branch') + + expanded_path = "/#{project.full_path}/-/blob/#{ref}/./#{image_file}" + + expect(subject.css('a')[0].attr('href')).to eq(expanded_path) + expect(subject.css('img')[0].attr('data-src')).to eq(expanded_path) + end + end + + context 'when neither requested_path, nor ref parameter is provided' do + let(:ref) { nil } let(:requested_path) { nil } - it 'returns the link to the image path as a relative path' do + it 'returns the correct HTML for the image' do expanded_path = "/#{project.full_path}/-/blob/master/./#{image_file}" expect(subject.css('a')[0].attr('href')).to eq(expanded_path) + expect(subject.css('img')[0].attr('data-src')).to eq(expanded_path) end end end diff --git a/spec/helpers/members_helper_spec.rb b/spec/helpers/members_helper_spec.rb index 169c8707bf4..946ffcddae7 100644 --- a/spec/helpers/members_helper_spec.rb +++ b/spec/helpers/members_helper_spec.rb @@ -22,6 +22,17 @@ describe MembersHelper do it { expect(remove_member_message(group_member_invite)).to eq "Are you sure you want to revoke the invitation for #{group_member_invite.invite_email} to join the #{group.name} group?" } it { expect(remove_member_message(group_member_request)).to eq "Are you sure you want to deny #{requester.name}'s request to join the #{group.name} group?" } it { expect(remove_member_message(group_member_request, user: requester)).to eq "Are you sure you want to withdraw your access request for the #{group.name} group?" } + + context 'an accepted user invitation with no user associated' do + before do + group_member_invite.update(invite_email: "#{SecureRandom.hex}@example.com", invite_token: nil, user_id: nil) + end + + it 'logs an exception and shows orphaned status' do + expect(Gitlab::ErrorTracking).to receive(:track_exception).with(anything, hash_including(:member_id, :invite_email, :invite_accepted_at)) + expect(remove_member_message(group_member_invite)).to eq "Are you sure you want to remove this orphaned member from the #{group.name} group and any subresources?" + end + end end describe '#remove_member_title' do diff --git a/spec/helpers/milestones_helper_spec.rb b/spec/helpers/milestones_helper_spec.rb index 3574066e03e..4ce7143bdf0 100644 --- a/spec/helpers/milestones_helper_spec.rb +++ b/spec/helpers/milestones_helper_spec.rb @@ -85,4 +85,19 @@ describe MilestonesHelper do end end end + + describe "#group_milestone_route" do + let(:group) { build_stubbed(:group) } + let(:subgroup) { build_stubbed(:group, parent: group, name: "Test Subgrp") } + + context "when in subgroup" do + let(:milestone) { build_stubbed(:group_milestone, group: subgroup) } + + it 'generates correct url despite assigned @group' do + assign(:group, group) + milestone_path = "/groups/#{subgroup.full_path}/-/milestones/#{milestone.iid}" + expect(helper.group_milestone_route(milestone)).to eq(milestone_path) + end + end + end end diff --git a/spec/helpers/nav_helper_spec.rb b/spec/helpers/nav_helper_spec.rb index f92dca11136..ac1c6c62433 100644 --- a/spec/helpers/nav_helper_spec.rb +++ b/spec/helpers/nav_helper_spec.rb @@ -117,4 +117,27 @@ describe NavHelper, :do_not_mock_admin_mode do it { is_expected.to all(be_a(String)) } end + + describe '#page_has_markdown?' do + using RSpec::Parameterized::TableSyntax + + where path: %w( + merge_requests#show + projects/merge_requests/conflicts#show + issues#show + milestones#show + issues#designs + ) + + with_them do + before do + allow(helper).to receive(:current_path?).and_call_original + allow(helper).to receive(:current_path?).with(path).and_return(true) + end + + subject { helper.page_has_markdown? } + + it { is_expected.to eq(true) } + end + end end diff --git a/spec/helpers/preferences_helper_spec.rb b/spec/helpers/preferences_helper_spec.rb index c4ed99e56a0..7969cfd97b5 100644 --- a/spec/helpers/preferences_helper_spec.rb +++ b/spec/helpers/preferences_helper_spec.rb @@ -123,7 +123,7 @@ describe PreferencesHelper do describe '#language_choices' do it 'returns an array of all available languages' do expect(helper.language_choices).to be_an(Array) - expect(helper.language_choices.map(&:second)).to eq(Gitlab::I18n.available_locales) + expect(helper.language_choices.map(&:first)).to eq(Gitlab::I18n::AVAILABLE_LANGUAGES.values.sort) end end diff --git a/spec/helpers/projects/alert_management_helper_spec.rb b/spec/helpers/projects/alert_management_helper_spec.rb new file mode 100644 index 00000000000..078759de39c --- /dev/null +++ b/spec/helpers/projects/alert_management_helper_spec.rb @@ -0,0 +1,82 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Projects::AlertManagementHelper do + include Gitlab::Routing.url_helpers + + let_it_be(:project, reload: true) { create(:project) } + let_it_be(:current_user) { create(:user) } + let_it_be(:project_path) { project.full_path } + + describe '#alert_management_data' do + let(:user_can_enable_alert_management) { true } + let(:setting_path) { edit_project_service_path(project, AlertsService) } + + subject(:data) { helper.alert_management_data(current_user, project) } + + before do + allow(helper) + .to receive(:can?) + .with(current_user, :admin_project, project) + .and_return(user_can_enable_alert_management) + end + + context 'without alert_managements_setting' do + it 'returns index page configuration' do + expect(helper.alert_management_data(current_user, project)).to match( + 'project-path' => project_path, + 'enable-alert-management-path' => setting_path, + 'empty-alert-svg-path' => match_asset_path('/assets/illustrations/alert-management-empty-state.svg'), + 'user-can-enable-alert-management' => 'true', + 'alert-management-enabled' => 'false' + ) + end + end + + context 'with alerts service' do + let_it_be(:alerts_service) { create(:alerts_service, project: project) } + + context 'when alerts service is active' do + it 'enables alert management' do + expect(data).to include( + 'alert-management-enabled' => 'true' + ) + end + end + + context 'when alerts service is inactive' do + it 'disables alert management' do + alerts_service.update(active: false) + + expect(data).to include( + 'alert-management-enabled' => 'false' + ) + end + end + end + + context 'when user does not have requisite enablement permissions' do + let(:user_can_enable_alert_management) { false } + + it 'shows error tracking enablement as disabled' do + expect(helper.alert_management_data(current_user, project)).to include( + 'user-can-enable-alert-management' => 'false' + ) + end + end + end + + describe '#alert_management_detail_data' do + let(:alert_id) { 1 } + let(:new_issue_path) { new_project_issue_path(project) } + + it 'returns detail page configuration' do + expect(helper.alert_management_detail_data(project, alert_id)).to eq( + 'alert-id' => alert_id, + 'project-path' => project_path, + 'new-issue-path' => new_issue_path + ) + end + end +end diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 17e3f8f9c06..189ab1a8354 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -719,11 +719,7 @@ describe ProjectsHelper do end describe '#show_merge_request_count' do - context 'when the feature flag is enabled' do - before do - stub_feature_flags(project_list_show_mr_count: true) - end - + context 'enabled flag' do it 'returns true if compact mode is disabled' do expect(helper.show_merge_request_count?).to be_truthy end @@ -733,22 +729,7 @@ describe ProjectsHelper do end end - context 'when the feature flag is disabled' do - before do - stub_feature_flags(project_list_show_mr_count: false) - end - - it 'always returns false' do - expect(helper.show_merge_request_count?(disabled: false)).to be_falsy - expect(helper.show_merge_request_count?(disabled: true)).to be_falsy - end - end - context 'disabled flag' do - before do - stub_feature_flags(project_list_show_mr_count: true) - end - it 'returns false if disabled flag is true' do expect(helper.show_merge_request_count?(disabled: true)).to be_falsey end @@ -760,11 +741,7 @@ describe ProjectsHelper do end describe '#show_issue_count?' do - context 'when the feature flag is enabled' do - before do - stub_feature_flags(project_list_show_issue_count: true) - end - + context 'enabled flag' do it 'returns true if compact mode is disabled' do expect(helper.show_issue_count?).to be_truthy end @@ -774,22 +751,7 @@ describe ProjectsHelper do end end - context 'when the feature flag is disabled' do - before do - stub_feature_flags(project_list_show_issue_count: false) - end - - it 'always returns false' do - expect(helper.show_issue_count?(disabled: false)).to be_falsy - expect(helper.show_issue_count?(disabled: true)).to be_falsy - end - end - context 'disabled flag' do - before do - stub_feature_flags(project_list_show_issue_count: true) - end - it 'returns false if disabled flag is true' do expect(helper.show_issue_count?(disabled: true)).to be_falsey end diff --git a/spec/helpers/releases_helper_spec.rb b/spec/helpers/releases_helper_spec.rb index 282758679cb..de4086e48db 100644 --- a/spec/helpers/releases_helper_spec.rb +++ b/spec/helpers/releases_helper_spec.rb @@ -54,7 +54,9 @@ describe ReleasesHelper do markdown_docs_path releases_page_path update_release_api_docs_path - release_assets_docs_path) + release_assets_docs_path + manage_milestones_path + new_milestone_path) expect(helper.data_for_edit_release_page.keys).to eq(keys) end end diff --git a/spec/helpers/search_helper_spec.rb b/spec/helpers/search_helper_spec.rb index 18c94602596..6a06b012c6c 100644 --- a/spec/helpers/search_helper_spec.rb +++ b/spec/helpers/search_helper_spec.rb @@ -112,7 +112,6 @@ describe SearchHelper do 'milestones' | 'milestone' 'notes' | 'comment' 'projects' | 'project' - 'snippet_blobs' | 'snippet result' 'snippet_titles' | 'snippet' 'users' | 'user' 'wiki_blobs' | 'wiki result' diff --git a/spec/helpers/snippets_helper_spec.rb b/spec/helpers/snippets_helper_spec.rb index b5b431b5818..6fdf4f5cfb4 100644 --- a/spec/helpers/snippets_helper_spec.rb +++ b/spec/helpers/snippets_helper_spec.rb @@ -151,35 +151,4 @@ describe SnippetsHelper do "<input type=\"text\" readonly=\"readonly\" class=\"js-snippet-url-area snippet-embed-input form-control\" data-url=\"#{url}\" value=\"<script src="#{url}.js"></script>\" autocomplete=\"off\"></input>" end end - - describe '#snippet_file_name' do - subject { helper.snippet_file_name(snippet) } - - where(:snippet_type, :flag_enabled, :trait, :filename) do - [ - [:personal_snippet, false, nil, 'foo.txt'], - [:personal_snippet, true, nil, 'foo.txt'], - [:personal_snippet, false, :repository, 'foo.txt'], - [:personal_snippet, true, :repository, '.gitattributes'], - - [:project_snippet, false, nil, 'foo.txt'], - [:project_snippet, true, nil, 'foo.txt'], - [:project_snippet, false, :repository, 'foo.txt'], - [:project_snippet, true, :repository, '.gitattributes'] - ] - end - - with_them do - let(:snippet) { create(snippet_type, trait, file_name: 'foo.txt') } - - before do - allow(helper).to receive(:current_user).and_return(snippet.author) - stub_feature_flags(version_snippets: flag_enabled) - end - - it 'returns the correct filename' do - expect(subject).to eq filename - end - end - end end diff --git a/spec/helpers/todos_helper_spec.rb b/spec/helpers/todos_helper_spec.rb index 7c73b990338..b09e1e2b83b 100644 --- a/spec/helpers/todos_helper_spec.rb +++ b/spec/helpers/todos_helper_spec.rb @@ -1,8 +1,26 @@ # frozen_string_literal: true -require "spec_helper" +require 'spec_helper' describe TodosHelper do + let_it_be(:user) { create(:user) } + let_it_be(:author) { create(:user) } + let_it_be(:issue) { create(:issue) } + let_it_be(:design) { create(:design, issue: issue) } + let_it_be(:note) do + create(:note, + project: issue.project, + note: 'I am note, hear me roar') + end + let_it_be(:design_todo) do + create(:todo, :mentioned, + user: user, + project: issue.project, + target: design, + author: author, + note: note) + end + describe '#todos_count_format' do it 'shows fuzzy count for 100 or more items' do expect(helper.todos_count_format(100)).to eq '99+' @@ -32,7 +50,56 @@ describe TodosHelper do { 'id' => projects.first.id, 'text' => projects.first.full_name } ] - expect(JSON.parse(helper.todo_projects_options)).to match_array(expected_results) + expect(Gitlab::Json.parse(helper.todo_projects_options)).to match_array(expected_results) + end + end + + describe '#todo_target_link' do + context 'when given a design' do + let(:todo) { design_todo } + + it 'produces a good link' do + path = helper.todo_target_path(todo) + link = helper.todo_target_link(todo) + expected = "<a href=\"#{path}\">design #{design.to_reference}</a>" + + expect(link).to eq(expected) + end + end + end + + describe '#todo_target_path' do + context 'when given a design' do + let(:todo) { design_todo } + + it 'responds with an appropriate path' do + path = helper.todo_target_path(todo) + issue_path = Gitlab::Routing.url_helpers + .project_issue_path(issue.project, issue) + + expect(path).to eq("#{issue_path}/designs/#{design.filename}##{dom_id(design_todo.note)}") + end + end + end + + describe '#todo_target_type_name' do + context 'when given a design todo' do + let(:todo) { design_todo } + + it 'responds with an appropriate target type name' do + name = helper.todo_target_type_name(todo) + + expect(name).to eq('design') + end + end + end + + describe '#todo_types_options' do + it 'includes a match for a design todo' do + options = helper.todo_types_options + design_option = options.find { |o| o[:id] == design_todo.target_type } + + expect(design_option).to include(text: 'Design') end end end diff --git a/spec/helpers/visibility_level_helper_spec.rb b/spec/helpers/visibility_level_helper_spec.rb index debe4401308..b7a88ee5010 100644 --- a/spec/helpers/visibility_level_helper_spec.rb +++ b/spec/helpers/visibility_level_helper_spec.rb @@ -146,22 +146,22 @@ describe VisibilityLevelHelper do using RSpec::Parameterized::TableSyntax - PUBLIC = Gitlab::VisibilityLevel::PUBLIC - INTERNAL = Gitlab::VisibilityLevel::INTERNAL - PRIVATE = Gitlab::VisibilityLevel::PRIVATE + public_vis = Gitlab::VisibilityLevel::PUBLIC + internal_vis = Gitlab::VisibilityLevel::INTERNAL + private_vis = Gitlab::VisibilityLevel::PRIVATE # This is a subset of all the permutations where(:requested_level, :max_allowed, :global_default_level, :restricted_levels, :expected) do - PUBLIC | PUBLIC | PUBLIC | [] | PUBLIC - PUBLIC | PUBLIC | PUBLIC | [PUBLIC] | INTERNAL - INTERNAL | PUBLIC | PUBLIC | [] | INTERNAL - INTERNAL | PRIVATE | PRIVATE | [] | PRIVATE - PRIVATE | PUBLIC | PUBLIC | [] | PRIVATE - PUBLIC | PRIVATE | INTERNAL | [] | PRIVATE - PUBLIC | INTERNAL | PUBLIC | [] | INTERNAL - PUBLIC | PRIVATE | PUBLIC | [] | PRIVATE - PUBLIC | INTERNAL | INTERNAL | [] | INTERNAL - PUBLIC | PUBLIC | INTERNAL | [] | PUBLIC + public_vis | public_vis | public_vis | [] | public_vis + public_vis | public_vis | public_vis | [public_vis] | internal_vis + internal_vis | public_vis | public_vis | [] | internal_vis + internal_vis | private_vis | private_vis | [] | private_vis + private_vis | public_vis | public_vis | [] | private_vis + public_vis | private_vis | internal_vis | [] | private_vis + public_vis | internal_vis | public_vis | [] | internal_vis + public_vis | private_vis | public_vis | [] | private_vis + public_vis | internal_vis | internal_vis | [] | internal_vis + public_vis | public_vis | internal_vis | [] | public_vis end before do diff --git a/spec/helpers/x509_helper_spec.rb b/spec/helpers/x509_helper_spec.rb index dcdf57ce035..db3f6158195 100644 --- a/spec/helpers/x509_helper_spec.rb +++ b/spec/helpers/x509_helper_spec.rb @@ -57,4 +57,22 @@ describe X509Helper do end end end + + describe '#x509_signature?' do + let(:x509_signature) { create(:x509_commit_signature) } + let(:gpg_signature) { create(:gpg_signature) } + + it 'detects a x509 signed commit' do + signature = Gitlab::X509::Signature.new( + X509Helpers::User1.signed_commit_signature, + X509Helpers::User1.signed_commit_base_data, + X509Helpers::User1.certificate_email, + X509Helpers::User1.signed_commit_time + ) + + expect(x509_signature?(x509_signature)).to be_truthy + expect(x509_signature?(signature)).to be_truthy + expect(x509_signature?(gpg_signature)).to be_falsey + end + end end |