summaryrefslogtreecommitdiff
path: root/spec/views
diff options
context:
space:
mode:
Diffstat (limited to 'spec/views')
-rw-r--r--spec/views/admin/dashboard/index.html.haml_spec.rb8
-rw-r--r--spec/views/admin/sessions/new.html.haml_spec.rb8
-rw-r--r--spec/views/devise/sessions/new.html.haml_spec.rb4
-rw-r--r--spec/views/groups/edit.html.haml_spec.rb2
-rw-r--r--spec/views/groups/runners/_sort_dropdown.html.haml_spec.rb31
-rw-r--r--spec/views/groups/settings/_transfer.html.haml_spec.rb4
-rw-r--r--spec/views/groups/show.html.haml_spec.rb2
-rw-r--r--spec/views/layouts/header/_new_dropdown.haml_spec.rb4
-rw-r--r--spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb154
-rw-r--r--spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb4
-rw-r--r--spec/views/projects/commits/show.html.haml_spec.rb35
-rw-r--r--spec/views/projects/deployments/_confirm_rollback_modal_spec.html_spec.rb63
-rw-r--r--spec/views/projects/empty.html.haml_spec.rb11
-rw-r--r--spec/views/projects/merge_requests/show.html.haml_spec.rb30
-rw-r--r--spec/views/projects/tree/show.html.haml_spec.rb1
-rw-r--r--spec/views/registrations/welcome/show.html.haml_spec.rb24
-rw-r--r--spec/views/search/show.html.haml_spec.rb49
-rw-r--r--spec/views/shared/access_tokens/_table.html.haml_spec.rb166
-rw-r--r--spec/views/shared/deploy_tokens/_form.html.haml_spec.rb4
19 files changed, 482 insertions, 122 deletions
diff --git a/spec/views/admin/dashboard/index.html.haml_spec.rb b/spec/views/admin/dashboard/index.html.haml_spec.rb
index 43a6fcc2adc..9fa95613d1c 100644
--- a/spec/views/admin/dashboard/index.html.haml_spec.rb
+++ b/spec/views/admin/dashboard/index.html.haml_spec.rb
@@ -52,4 +52,12 @@ RSpec.describe 'admin/dashboard/index.html.haml' do
expect(rendered).not_to have_content "Maximum Users"
expect(rendered).not_to have_content "Users over License"
end
+
+ it 'links to the GitLab Changelog' do
+ stub_application_setting(version_check_enabled: true)
+
+ render
+
+ expect(rendered).to have_link(href: 'https://gitlab.com/gitlab-org/gitlab/-/blob/master/CHANGELOG.md')
+ end
end
diff --git a/spec/views/admin/sessions/new.html.haml_spec.rb b/spec/views/admin/sessions/new.html.haml_spec.rb
index 94870f0bdba..97528b6e782 100644
--- a/spec/views/admin/sessions/new.html.haml_spec.rb
+++ b/spec/views/admin/sessions/new.html.haml_spec.rb
@@ -19,9 +19,9 @@ RSpec.describe 'admin/sessions/new.html.haml' do
it 'shows enter password form' do
render
- expect(rendered).to have_selector('[data-qa-selector="sign_in_tab"]')
+ expect(rendered).to have_selector('[data-qa-selector="sign_in_tab"]') # rubocop:disable QA/SelectorUsage
expect(rendered).to have_css('#login-pane.active')
- expect(rendered).to have_selector('[data-qa-selector="password_field"]')
+ expect(rendered).to have_selector('[data-qa-selector="password_field"]') # rubocop:disable QA/SelectorUsage
end
it 'warns authentication not possible if password not set' do
@@ -60,7 +60,7 @@ RSpec.describe 'admin/sessions/new.html.haml' do
it 'is shown when enabled' do
render
- expect(rendered).to have_selector('[data-qa-selector="ldap_tab"]')
+ expect(rendered).to have_selector('[data-qa-selector="ldap_tab"]') # rubocop:disable QA/SelectorUsage
expect(rendered).to have_css('.login-box#ldapmain')
expect(rendered).to have_field('LDAP Username')
expect(rendered).not_to have_content('No authentication methods configured')
@@ -71,7 +71,7 @@ RSpec.describe 'admin/sessions/new.html.haml' do
render
- expect(rendered).not_to have_selector('[data-qa-selector="ldap_tab"]')
+ expect(rendered).not_to have_selector('[data-qa-selector="ldap_tab"]') # rubocop:disable QA/SelectorUsage
expect(rendered).not_to have_field('LDAP Username')
expect(rendered).to have_content('No authentication methods configured')
end
diff --git a/spec/views/devise/sessions/new.html.haml_spec.rb b/spec/views/devise/sessions/new.html.haml_spec.rb
index d3552bf2e5a..0109d05abe4 100644
--- a/spec/views/devise/sessions/new.html.haml_spec.rb
+++ b/spec/views/devise/sessions/new.html.haml_spec.rb
@@ -48,7 +48,7 @@ RSpec.describe 'devise/sessions/new' do
render
expect(rendered).to have_selector('.new-session-tabs')
- expect(rendered).to have_selector('[data-qa-selector="ldap_tab"]')
+ expect(rendered).to have_selector('[data-qa-selector="ldap_tab"]') # rubocop:disable QA/SelectorUsage
expect(rendered).to have_field('LDAP Username')
end
@@ -58,7 +58,7 @@ RSpec.describe 'devise/sessions/new' do
render
expect(rendered).to have_content('No authentication methods configured')
- expect(rendered).not_to have_selector('[data-qa-selector="ldap_tab"]')
+ expect(rendered).not_to have_selector('[data-qa-selector="ldap_tab"]') # rubocop:disable QA/SelectorUsage
expect(rendered).not_to have_field('LDAP Username')
end
end
diff --git a/spec/views/groups/edit.html.haml_spec.rb b/spec/views/groups/edit.html.haml_spec.rb
index f40b03fda2a..43e11d31611 100644
--- a/spec/views/groups/edit.html.haml_spec.rb
+++ b/spec/views/groups/edit.html.haml_spec.rb
@@ -25,7 +25,7 @@ RSpec.describe 'groups/edit.html.haml' do
render
expect(rendered).to have_content("Prevent sharing a project within #{test_group.name} with other groups")
- expect(rendered).to have_css('.js-descr', text: 'help text here')
+ expect(rendered).to have_content('help text here')
expect(rendered).to have_field('group_share_with_group_lock', **checkbox_options)
end
end
diff --git a/spec/views/groups/runners/_sort_dropdown.html.haml_spec.rb b/spec/views/groups/runners/_sort_dropdown.html.haml_spec.rb
new file mode 100644
index 00000000000..4b5027a5a56
--- /dev/null
+++ b/spec/views/groups/runners/_sort_dropdown.html.haml_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'groups/runners/sort_dropdown.html.haml' do
+ describe 'render' do
+ let_it_be(:sort_options_hash) { { by_title: 'Title' } }
+ let_it_be(:sort_title_created_date) { 'Created date' }
+
+ before do
+ allow(view).to receive(:sort).and_return('by_title')
+ end
+
+ describe 'when a sort option is not selected' do
+ it 'renders a default sort option' do
+ render 'groups/runners/sort_dropdown', sort_options_hash: sort_options_hash, sort_title_created_date: sort_title_created_date
+
+ expect(rendered).to have_content 'Created date'
+ end
+ end
+
+ describe 'when a sort option is selected' do
+ it 'renders the selected sort option' do
+ @sort = :by_title
+ render 'groups/runners/sort_dropdown', sort_options_hash: sort_options_hash, sort_title_created_date: sort_title_created_date
+
+ expect(rendered).to have_content 'Title'
+ end
+ end
+ end
+end
diff --git a/spec/views/groups/settings/_transfer.html.haml_spec.rb b/spec/views/groups/settings/_transfer.html.haml_spec.rb
index aeb70251a62..b557c989eae 100644
--- a/spec/views/groups/settings/_transfer.html.haml_spec.rb
+++ b/spec/views/groups/settings/_transfer.html.haml_spec.rb
@@ -9,8 +9,8 @@ RSpec.describe 'groups/settings/_transfer.html.haml' do
render 'groups/settings/transfer', group: group
- expect(rendered).to have_selector '[data-qa-selector="select_group_dropdown"]'
- expect(rendered).not_to have_selector '[data-qa-selector="select_group_dropdown"][disabled]'
+ expect(rendered).to have_selector '[data-qa-selector="select_group_dropdown"]' # rubocop:disable QA/SelectorUsage
+ expect(rendered).not_to have_selector '[data-qa-selector="select_group_dropdown"][disabled]' # rubocop:disable QA/SelectorUsage
expect(rendered).not_to have_selector '[data-testid="group-to-transfer-has-linked-subscription-alert"]'
end
end
diff --git a/spec/views/groups/show.html.haml_spec.rb b/spec/views/groups/show.html.haml_spec.rb
index f40b03fda2a..43e11d31611 100644
--- a/spec/views/groups/show.html.haml_spec.rb
+++ b/spec/views/groups/show.html.haml_spec.rb
@@ -25,7 +25,7 @@ RSpec.describe 'groups/edit.html.haml' do
render
expect(rendered).to have_content("Prevent sharing a project within #{test_group.name} with other groups")
- expect(rendered).to have_css('.js-descr', text: 'help text here')
+ expect(rendered).to have_content('help text here')
expect(rendered).to have_field('group_share_with_group_lock', **checkbox_options)
end
end
diff --git a/spec/views/layouts/header/_new_dropdown.haml_spec.rb b/spec/views/layouts/header/_new_dropdown.haml_spec.rb
index 319e7b55fc3..47abfff87bb 100644
--- a/spec/views/layouts/header/_new_dropdown.haml_spec.rb
+++ b/spec/views/layouts/header/_new_dropdown.haml_spec.rb
@@ -71,7 +71,7 @@ RSpec.describe 'layouts/header/_new_dropdown' do
before do
allow(view).to receive(:can?).with(user, :create_projects, group).and_return(true)
allow(view).to receive(:can?).with(user, :admin_group_member, group).and_return(invite_member)
- allow(view).to receive(:can_import_members?).and_return(invite_member)
+ allow(view).to receive(:can_admin_project_member?).and_return(invite_member)
allow(view).to receive(:experiment_enabled?)
end
@@ -142,7 +142,7 @@ RSpec.describe 'layouts/header/_new_dropdown' do
let(:href) { project_project_members_path(project) }
before do
- allow(view).to receive(:can_import_members?).and_return(invite_member)
+ allow(view).to receive(:can_admin_project_member?).and_return(invite_member)
stub_current_user(user)
allow(view).to receive(:experiment_enabled?)
end
diff --git a/spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb b/spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb
index 7df076d35c4..8c9d1b32671 100644
--- a/spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb
+++ b/spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb
@@ -3,10 +3,17 @@
require 'spec_helper'
RSpec.describe 'layouts/nav/sidebar/_group' do
- let_it_be(:group) { create(:group) }
+ let_it_be(:owner) { create(:user) }
+ let_it_be(:group) do
+ create(:group).tap do |g|
+ g.add_owner(owner)
+ end
+ end
before do
assign(:group, group)
+
+ allow(view).to receive(:current_user).and_return(owner)
end
it_behaves_like 'has nav sidebar'
@@ -27,11 +34,154 @@ RSpec.describe 'layouts/nav/sidebar/_group' do
expect(rendered).to have_link('Group information', href: activity_group_path(group))
end
+ it 'has a link to the group labels path' do
+ render
+
+ expect(rendered).to have_link('Labels', href: group_labels_path(group))
+ end
+
it 'has a link to the members page' do
render
- expect(rendered).to have_selector('.sidebar-top-level-items > li.home a[title="Members"]')
expect(rendered).to have_link('Members', href: group_group_members_path(group))
end
end
+
+ describe 'Issues' do
+ it 'has a default link to the issue list path' do
+ render
+
+ expect(rendered).to have_link('Issues', href: issues_group_path(group))
+ end
+
+ it 'has a link to the issue list page' do
+ render
+
+ expect(rendered).to have_link('List', href: issues_group_path(group))
+ end
+
+ it 'has a link to the boards page' do
+ render
+
+ expect(rendered).to have_link('Board', href: group_boards_path(group))
+ end
+
+ it 'has a link to the milestones page' do
+ render
+
+ expect(rendered).to have_link('Milestones', href: group_milestones_path(group))
+ end
+ end
+
+ describe 'Merge Requests' do
+ it 'has a link to the merge request list path' do
+ render
+
+ expect(rendered).to have_link('Merge requests', href: merge_requests_group_path(group))
+ end
+
+ it 'shows pill with the number of merge requests' do
+ render
+
+ expect(rendered).to have_css('span.badge.badge-pill.merge_counter.js-merge-counter')
+ end
+ end
+
+ describe 'CI/CD' do
+ it 'has a default link to the runners list path' do
+ render
+
+ expect(rendered).to have_link('CI/CD', href: group_runners_path(group))
+ end
+
+ it 'has a link to the runners list page' do
+ render
+
+ expect(rendered).to have_link('Runners', href: group_runners_path(group))
+ end
+ end
+
+ describe 'Kubernetes menu' do
+ it 'has a link to the group cluster list path' do
+ render
+
+ expect(rendered).to have_link('Kubernetes', href: group_clusters_path(group))
+ end
+ end
+
+ describe 'Packages & Registries' do
+ it 'has a link to the package registry page' do
+ stub_config(packages: { enabled: true })
+
+ render
+
+ expect(rendered).to have_link('Package Registry', href: group_packages_path(group))
+ end
+
+ it 'has a link to the container registry page' do
+ stub_container_registry_config(enabled: true)
+
+ render
+
+ expect(rendered).to have_link('Container Registry', href: group_container_registries_path(group))
+ end
+
+ it 'has a link to the dependency proxy page' do
+ stub_config(dependency_proxy: { enabled: true })
+
+ render
+
+ expect(rendered).to have_link('Dependency Proxy', href: group_dependency_proxy_path(group))
+ end
+ end
+
+ describe 'Settings' do
+ it 'default link points to edit group page' do
+ render
+
+ expect(rendered).to have_link('Settings', href: edit_group_path(group))
+ end
+
+ it 'has a link to the General settings page' do
+ render
+
+ expect(rendered).to have_link('General', href: edit_group_path(group))
+ end
+
+ it 'has a link to the Integrations settings page' do
+ render
+
+ expect(rendered).to have_link('Integrations', href: group_settings_integrations_path(group))
+ end
+
+ it 'has a link to the group Projects settings page' do
+ render
+
+ expect(rendered).to have_link('Projects', href: projects_group_path(group))
+ end
+
+ it 'has a link to the Repository settings page' do
+ render
+
+ expect(rendered).to have_link('Repository', href: group_settings_repository_path(group))
+ end
+
+ it 'has a link to the CI/CD settings page' do
+ render
+
+ expect(rendered).to have_link('CI/CD', href: group_settings_ci_cd_path(group))
+ end
+
+ it 'has a link to the Applications settings page' do
+ render
+
+ expect(rendered).to have_link('Applications', href: group_settings_applications_path(group))
+ end
+
+ it 'has a link to the Package & Registries settings page' do
+ render
+
+ expect(rendered).to have_link('Packages & Registries', href: group_settings_packages_and_registries_path(group))
+ end
+ end
end
diff --git a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
index f2de43dfd19..3afebfbedab 100644
--- a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
+++ b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
@@ -640,9 +640,9 @@ RSpec.describe 'layouts/nav/sidebar/_project' do
expect(rendered).to have_link('Infrastructure Registry', href: project_infrastructure_registry_index_path(project))
end
- context 'when feature flag :infrastructure_registry_page is disabled' do
+ context 'when package registry config is disabled' do
it 'does not show link to package registry page' do
- stub_feature_flags(infrastructure_registry_page: false)
+ stub_config(packages: { enabled: false })
render
diff --git a/spec/views/projects/commits/show.html.haml_spec.rb b/spec/views/projects/commits/show.html.haml_spec.rb
new file mode 100644
index 00000000000..e5e9906a798
--- /dev/null
+++ b/spec/views/projects/commits/show.html.haml_spec.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'projects/commits/show.html.haml' do
+ let(:project) { create(:project, :repository) }
+ let(:commits) { [project.commit] }
+ let(:path) { 'path/to/doc.md' }
+
+ before do
+ assign(:project, project)
+ assign(:id, path)
+ assign(:repository, project.repository)
+ assign(:commits, commits)
+ assign(:hidden_commit_count, 0)
+
+ controller.params[:controller] = 'projects/commits'
+ controller.params[:action] = 'show'
+ controller.params[:namespace_id] = project.namespace.to_param
+ controller.params[:project_id] = project.to_param
+
+ allow(view).to receive(:current_user).and_return(nil)
+ allow(view).to receive(:namespace_project_signatures_path).and_return("/")
+ end
+
+ context 'tree controls' do
+ before do
+ render
+ end
+
+ it 'renders atom feed button with matching path' do
+ expect(rendered).to have_link(href: "#{project_commits_path(project, path)}?format=atom")
+ end
+ end
+end
diff --git a/spec/views/projects/deployments/_confirm_rollback_modal_spec.html_spec.rb b/spec/views/projects/deployments/_confirm_rollback_modal_spec.html_spec.rb
deleted file mode 100644
index 2fb7b6187eb..00000000000
--- a/spec/views/projects/deployments/_confirm_rollback_modal_spec.html_spec.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'projects/deployments/_confirm_rollback_modal' do
- let(:environment) { create(:environment, :with_review_app) }
- let(:deployments) { environment.deployments }
- let(:project) { environment.project }
-
- before do
- assign(:environment, environment)
- assign(:deployments, deployments)
- assign(:project, project)
- end
-
- context 'when re-deploying last deployment' do
- let(:deployment) { deployments.first }
-
- before do
- allow(view).to receive(:deployment).and_return(deployment)
- end
-
- it 'shows "re-deploy"' do
- render
-
- expect(rendered).to have_selector('h4', text: "Re-deploy environment #{environment.name}?")
- expect(rendered).to have_selector('p', text: "This action will relaunch the job for commit #{deployment.short_sha}, putting the environment in a previous version. Are you sure you want to continue?")
- expect(rendered).to have_selector('a.btn-danger', text: 'Re-deploy')
- end
-
- it 'links to re-deploying the environment' do
- expected_link = retry_project_job_path(environment.project, deployment.deployable)
-
- render
-
- expect(rendered).to have_selector("a[href='#{expected_link}']", text: 'Re-deploy')
- end
- end
-
- context 'when rolling back to previous deployment' do
- let(:deployment) { create(:deployment, environment: environment) }
-
- before do
- allow(view).to receive(:deployment).and_return(deployment)
- end
-
- it 'shows "rollback"' do
- render
-
- expect(rendered).to have_selector('h4', text: "Rollback environment #{environment.name}?")
- expect(rendered).to have_selector('p', text: "This action will run the job defined by #{environment.name} for commit #{deployment.short_sha}, putting the environment in a previous version. You can revert it by re-deploying the latest version of your application. Are you sure you want to continue?")
- expect(rendered).to have_selector('a.btn-danger', text: 'Rollback')
- end
-
- it 'links to re-deploying the environment' do
- expected_link = retry_project_job_path(environment.project, deployment.deployable)
-
- render
-
- expect(rendered).to have_selector("a[href='#{expected_link}']", text: 'Rollback')
- end
- end
-end
diff --git a/spec/views/projects/empty.html.haml_spec.rb b/spec/views/projects/empty.html.haml_spec.rb
index 0fb0ae5ff29..70da4fc9e27 100644
--- a/spec/views/projects/empty.html.haml_spec.rb
+++ b/spec/views/projects/empty.html.haml_spec.rb
@@ -6,7 +6,10 @@ RSpec.describe 'projects/empty' do
let_it_be(:user) { create(:user) }
let_it_be(:project) { ProjectPresenter.new(create(:project, :empty_repo), current_user: user) }
+ let(:can_admin_project_member) { true }
+
before do
+ allow(view).to receive(:can_admin_project_member?).and_return(can_admin_project_member)
allow(view).to receive(:experiment_enabled?).and_return(true)
allow(view).to receive(:current_user).and_return(user)
assign(:project, project)
@@ -47,12 +50,6 @@ RSpec.describe 'projects/empty' do
end
context 'with invite button on empty projects' do
- let(:can_import_members) { true }
-
- before do
- allow(view).to receive(:can_import_members?).and_return(can_import_members)
- end
-
it 'shows invite members info', :aggregate_failures do
render
@@ -68,7 +65,7 @@ RSpec.describe 'projects/empty' do
end
context 'when user does not have permissions to invite members' do
- let(:can_import_members) { false }
+ let(:can_admin_project_member) { false }
it 'does not show invite member info', :aggregate_failures do
render
diff --git a/spec/views/projects/merge_requests/show.html.haml_spec.rb b/spec/views/projects/merge_requests/show.html.haml_spec.rb
index 40d11342ec4..6b6bc1f0b14 100644
--- a/spec/views/projects/merge_requests/show.html.haml_spec.rb
+++ b/spec/views/projects/merge_requests/show.html.haml_spec.rb
@@ -3,6 +3,8 @@
require 'spec_helper'
RSpec.describe 'projects/merge_requests/show.html.haml', :aggregate_failures do
+ using RSpec::Parameterized::TableSyntax
+
include_context 'merge request show action'
before do
@@ -43,4 +45,32 @@ RSpec.describe 'projects/merge_requests/show.html.haml', :aggregate_failures do
end
end
end
+
+ describe 'gitpod modal' do
+ let(:gitpod_modal_selector) { '#modal-enable-gitpod' }
+ let(:user) { create(:user) }
+ let(:user_gitpod_enabled) { create(:user).tap { |x| x.update!(gitpod_enabled: true) } }
+
+ where(:site_enabled, :current_user, :should_show) do
+ false | ref(:user) | false
+ true | ref(:user) | true
+ true | nil | true
+ true | ref(:user_gitpod_enabled) | false
+ end
+
+ with_them do
+ it 'handles rendering gitpod user enable modal' do
+ allow(Gitlab::CurrentSettings).to receive(:gitpod_enabled).and_return(site_enabled)
+ allow(view).to receive(:current_user).and_return(current_user)
+
+ render
+
+ if should_show
+ expect(rendered).to have_css(gitpod_modal_selector)
+ else
+ expect(rendered).to have_no_css(gitpod_modal_selector)
+ end
+ end
+ end
+ end
end
diff --git a/spec/views/projects/tree/show.html.haml_spec.rb b/spec/views/projects/tree/show.html.haml_spec.rb
index bdf9b08d8f5..62a52bcf83f 100644
--- a/spec/views/projects/tree/show.html.haml_spec.rb
+++ b/spec/views/projects/tree/show.html.haml_spec.rb
@@ -15,7 +15,6 @@ RSpec.describe 'projects/tree/show' do
before do
assign(:project, project)
assign(:repository, repository)
- assign(:lfs_blob_ids, [])
allow(view).to receive(:can?).and_return(true)
allow(view).to receive(:can_collaborate_with_project?).and_return(true)
diff --git a/spec/views/registrations/welcome/show.html.haml_spec.rb b/spec/views/registrations/welcome/show.html.haml_spec.rb
index ecdef7918de..d9c5d348e15 100644
--- a/spec/views/registrations/welcome/show.html.haml_spec.rb
+++ b/spec/views/registrations/welcome/show.html.haml_spec.rb
@@ -3,8 +3,6 @@
require 'spec_helper'
RSpec.describe 'registrations/welcome/show' do
- let(:is_gitlab_com) { false }
-
let_it_be(:user) { create(:user) }
before do
@@ -13,7 +11,6 @@ RSpec.describe 'registrations/welcome/show' do
allow(view).to receive(:in_trial_flow?).and_return(false)
allow(view).to receive(:user_has_memberships?).and_return(false)
allow(view).to receive(:in_oauth_flow?).and_return(false)
- allow(Gitlab).to receive(:com?).and_return(is_gitlab_com)
render
end
@@ -22,24 +19,5 @@ RSpec.describe 'registrations/welcome/show' do
it { is_expected.not_to have_selector('label[for="user_setup_for_company"]') }
it { is_expected.to have_button('Get started!') }
- it { is_expected.to have_selector('input[name="user[email_opted_in]"]') }
-
- describe 'email opt in' do
- context 'when on gitlab.com' do
- let(:is_gitlab_com) { true }
-
- it 'hides the email-opt in by default' do
- expect(subject).to have_css('.js-email-opt-in.hidden')
- end
- end
-
- context 'when not on gitlab.com' do
- let(:is_gitlab_com) { false }
-
- it 'hides the email-opt in by default' do
- expect(subject).not_to have_css('.js-email-opt-in.hidden')
- expect(subject).to have_css('.js-email-opt-in')
- end
- end
- end
+ it { is_expected.not_to have_selector('input[name="user[email_opted_in]"]') }
end
diff --git a/spec/views/search/show.html.haml_spec.rb b/spec/views/search/show.html.haml_spec.rb
index eb763d424d3..a336ec91ff2 100644
--- a/spec/views/search/show.html.haml_spec.rb
+++ b/spec/views/search/show.html.haml_spec.rb
@@ -48,21 +48,50 @@ RSpec.describe 'search/show' do
assign(:group, group)
end
- it 'renders meta tags for a group' do
- render
+ context 'search with full count' do
+ before do
+ assign(:without_count, false)
+ end
+
+ it 'renders meta tags for a group' do
+ render
+
+ expect(view.page_description).to match(/\d+ issues for term '#{search_term}'/)
+ expect(view.page_card_attributes).to eq("Namespace" => group.full_path)
+ end
- expect(view.page_description).to match(/\d+ issues for term '#{search_term}'/)
- expect(view.page_card_attributes).to eq("Namespace" => group.full_path)
+ it 'renders meta tags for both group and project' do
+ project = build(:project, group: group)
+ assign(:project, project)
+
+ render
+
+ expect(view.page_description).to match(/\d+ issues for term '#{search_term}'/)
+ expect(view.page_card_attributes).to eq("Namespace" => group.full_path, "Project" => project.full_path)
+ end
end
- it 'renders meta tags for both group and project' do
- project = build(:project, group: group)
- assign(:project, project)
+ context 'search without full count' do
+ before do
+ assign(:without_count, true)
+ end
+
+ it 'renders meta tags for a group' do
+ render
+
+ expect(view.page_description).to match(/issues results for term '#{search_term}'/)
+ expect(view.page_card_attributes).to eq("Namespace" => group.full_path)
+ end
+
+ it 'renders meta tags for both group and project' do
+ project = build(:project, group: group)
+ assign(:project, project)
- render
+ render
- expect(view.page_description).to match(/\d+ issues for term '#{search_term}'/)
- expect(view.page_card_attributes).to eq("Namespace" => group.full_path, "Project" => project.full_path)
+ expect(view.page_description).to match(/issues results for term '#{search_term}'/)
+ expect(view.page_card_attributes).to eq("Namespace" => group.full_path, "Project" => project.full_path)
+ end
end
end
end
diff --git a/spec/views/shared/access_tokens/_table.html.haml_spec.rb b/spec/views/shared/access_tokens/_table.html.haml_spec.rb
new file mode 100644
index 00000000000..489675b5683
--- /dev/null
+++ b/spec/views/shared/access_tokens/_table.html.haml_spec.rb
@@ -0,0 +1,166 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'shared/access_tokens/_table.html.haml' do
+ let(:type) { 'token' }
+ let(:type_plural) { 'tokens' }
+ let(:empty_message) { nil }
+ let(:token_expiry_enforced?) { false }
+ let(:impersonation) { false }
+
+ let_it_be(:user) { create(:user) }
+ let_it_be(:tokens) { [create(:personal_access_token, user: user)] }
+ let_it_be(:project) { false }
+
+ before do
+ stub_licensed_features(enforce_personal_access_token_expiration: true)
+ allow(Gitlab::CurrentSettings).to receive(:enforce_pat_expiration?).and_return(false)
+
+ allow(view).to receive(:personal_access_token_expiration_enforced?).and_return(token_expiry_enforced?)
+ allow(view).to receive(:show_profile_token_expiry_notification?).and_return(true)
+ allow(view).to receive(:distance_of_time_in_words_to_now).and_return('4 days')
+
+ if project
+ project.add_maintainer(user)
+ end
+
+ # Forcibly removing scopes from one token as it's not possible to do with the current modal on creation
+ # But the check exists in the template (it may be there for legacy reasons), so we should test the outcome
+ if tokens.size > 1
+ tokens[1].scopes = []
+ end
+
+ locals = {
+ type: type,
+ type_plural: type_plural,
+ active_tokens: tokens,
+ project: project,
+ impersonation: impersonation,
+ revoke_route_helper: ->(token) { 'path/' }
+ }
+
+ if empty_message
+ locals[:no_active_tokens_message] = empty_message
+ end
+
+ render partial: 'shared/access_tokens/table', locals: locals
+ end
+
+ context 'if personal' do
+ it 'does not show non-personal content', :aggregate_failures do
+ expect(rendered).not_to have_content 'To see all the user\'s personal access tokens you must impersonate them first.'
+ expect(rendered).not_to have_selector 'th', text: 'Role'
+ end
+
+ context 'if token expiration is enforced' do
+ let(:token_expiry_enforced?) { true }
+
+ it 'does not show the subtext' do
+ expect(rendered).not_to have_content 'Personal access tokens are not revoked upon expiration.'
+ end
+ end
+
+ context 'if token expiration is not enforced' do
+ let(:token_expiry_enforced?) { false }
+
+ it 'does show the subtext' do
+ expect(rendered).to have_content 'Personal access tokens are not revoked upon expiration.'
+ end
+ end
+ end
+
+ context 'if impersonation' do
+ let(:impersonation) { true }
+
+ it 'shows the impersonation content', :aggregate_failures do
+ expect(rendered).to have_content 'To see all the user\'s personal access tokens you must impersonate them first.'
+
+ expect(rendered).not_to have_content 'Personal access tokens are not revoked upon expiration.'
+ expect(rendered).not_to have_selector 'th', text: 'Role'
+ end
+ end
+
+ context 'if project' do
+ let_it_be(:project) { create(:project) }
+
+ it 'shows the project content', :aggregate_failures do
+ expect(rendered).to have_selector 'th', text: 'Role'
+ expect(rendered).to have_selector 'td', text: 'Maintainer'
+
+ expect(rendered).not_to have_content 'Personal access tokens are not revoked upon expiration.'
+ expect(rendered).not_to have_content 'To see all the user\'s personal access tokens you must impersonate them first.'
+ end
+ end
+
+ context 'without tokens' do
+ let_it_be(:tokens) { [] }
+
+ it 'has the correct content', :aggregate_failures do
+ expect(rendered).to have_content 'Active tokens (0)'
+ expect(rendered).to have_content 'This user has no active tokens.'
+ end
+
+ context 'with a custom empty text' do
+ let(:empty_message) { 'Custom empty message' }
+
+ it 'shows the custom empty text' do
+ expect(rendered).to have_content empty_message
+ end
+ end
+ end
+
+ context 'with tokens' do
+ let_it_be(:tokens) do
+ [
+ create(:personal_access_token, user: user, name: 'Access token', last_used_at: 1.day.ago, expires_at: nil),
+ create(:personal_access_token, user: user, expires_at: 5.days.ago),
+ create(:personal_access_token, user: user, expires_at: Time.now),
+ create(:personal_access_token, user: user, expires_at: 5.days.from_now, scopes: [:read_api, :read_user])
+ ]
+ end
+
+ it 'has the correct content', :aggregate_failures do
+ # Heading content
+ expect(rendered).to have_content 'Active tokens (4)'
+
+ # Table headers
+ expect(rendered).to have_selector 'th', text: 'Token name'
+ expect(rendered).to have_selector 'th', text: 'Scopes'
+ expect(rendered).to have_selector 'th', text: 'Created'
+ expect(rendered).to have_selector 'th', text: 'Last Used'
+ expect(rendered).to have_selector 'th', text: 'Expires'
+
+ # Table contents
+ expect(rendered).to have_content 'Access token'
+ expect(rendered).to have_content 'read_api, read_user'
+ expect(rendered).to have_content 'no scopes selected'
+ expect(rendered).to have_content Time.now.to_date.to_s(:medium)
+ expect(rendered).to have_content l(1.day.ago, format: "%b %d, %Y")
+
+ # Expiry
+ expect(rendered).to have_content 'Expired', count: 2
+ expect(rendered).to have_content 'In 4 days'
+
+ # Revoke buttons
+ expect(rendered).to have_link 'Revoke', href: 'path/', class: 'btn-danger-secondary', count: 1
+ expect(rendered).to have_link 'Revoke', href: 'path/', count: 4
+ end
+
+ context 'without the last used time' do
+ let_it_be(:tokens) { [create(:personal_access_token, user: user, expires_at: 5.days.ago)] }
+
+ it 'shows the last used empty text' do
+ expect(rendered).to have_content 'Never'
+ end
+ end
+
+ context 'without expired at' do
+ let_it_be(:tokens) { [create(:personal_access_token, user: user, expires_at: nil, last_used_at: 1.day.ago)] }
+
+ it 'shows the expired at empty text' do
+ expect(rendered).to have_content 'Never'
+ end
+ end
+ end
+end
diff --git a/spec/views/shared/deploy_tokens/_form.html.haml_spec.rb b/spec/views/shared/deploy_tokens/_form.html.haml_spec.rb
index 3508ba8cca9..5ac42952f78 100644
--- a/spec/views/shared/deploy_tokens/_form.html.haml_spec.rb
+++ b/spec/views/shared/deploy_tokens/_form.html.haml_spec.rb
@@ -19,9 +19,9 @@ RSpec.describe 'shared/deploy_tokens/_form.html.haml' do
render 'shared/deploy_tokens/form', token: token, group_or_project: subject
if shows_package_registry_permissions
- expect(rendered).to have_content('Allows read access to the package registry')
+ expect(rendered).to have_content('Allows read-only access to the package registry.')
else
- expect(rendered).not_to have_content('Allows read access to the package registry')
+ expect(rendered).not_to have_content('Allows read-only access to the package registry.')
end
end
end