summaryrefslogtreecommitdiff
path: root/spec/views
diff options
context:
space:
mode:
Diffstat (limited to 'spec/views')
-rw-r--r--spec/views/admin/application_settings/_ci_cd.html.haml_spec.rb5
-rw-r--r--spec/views/admin/application_settings/_repository_check.html.haml_spec.rb13
-rw-r--r--spec/views/admin/application_settings/ci_cd.html.haml_spec.rb5
-rw-r--r--spec/views/admin/application_settings/network.html.haml_spec.rb21
-rw-r--r--spec/views/admin/groups/_form.html.haml_spec.rb42
-rw-r--r--spec/views/admin/projects/_form.html.haml_spec.rb41
-rw-r--r--spec/views/admin/sessions/new.html.haml_spec.rb4
-rw-r--r--spec/views/admin/sessions/two_factor.html.haml_spec.rb10
-rw-r--r--spec/views/ci/status/_badge.html.haml_spec.rb10
-rw-r--r--spec/views/ci/status/_icon.html.haml_spec.rb10
-rw-r--r--spec/views/devise/confirmations/almost_there.html.haml_spec.rb17
-rw-r--r--spec/views/devise/sessions/new.html.haml_spec.rb97
-rw-r--r--spec/views/devise/shared/_error_messages.html.haml_spec.rb43
-rw-r--r--spec/views/devise/shared/_signup_box.html.haml_spec.rb11
-rw-r--r--spec/views/events/event/_common.html.haml_spec.rb15
-rw-r--r--spec/views/groups/edit.html.haml_spec.rb6
-rw-r--r--spec/views/groups/group_members/index.html.haml_spec.rb1
-rw-r--r--spec/views/groups/packages/index.html.haml_spec.rb39
-rw-r--r--spec/views/groups/settings/_general.html.haml_spec.rb21
-rw-r--r--spec/views/groups/show.html.haml_spec.rb38
-rw-r--r--spec/views/help/index.html.haml_spec.rb9
-rw-r--r--spec/views/layouts/_head.html.haml_spec.rb2
-rw-r--r--spec/views/layouts/_search.html.haml_spec.rb77
-rw-r--r--spec/views/layouts/application.html.haml_spec.rb4
-rw-r--r--spec/views/layouts/devise.html.haml_spec.rb10
-rw-r--r--spec/views/layouts/group.html.haml_spec.rb30
-rw-r--r--spec/views/layouts/header/_new_dropdown.haml_spec.rb27
-rw-r--r--spec/views/layouts/minimal.html.haml_spec.rb13
-rw-r--r--spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb11
-rw-r--r--spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb38
-rw-r--r--spec/views/layouts/project.html.haml_spec.rb29
-rw-r--r--spec/views/notify/autodevops_disabled_email.text.erb_spec.rb14
-rw-r--r--spec/views/notify/import_issues_csv_email.html.haml_spec.rb4
-rw-r--r--spec/views/notify/import_work_items_csv_email.html.haml_spec.rb133
-rw-r--r--spec/views/notify/new_achievement_email.html.haml_spec.rb26
-rw-r--r--spec/views/notify/pipeline_failed_email.text.erb_spec.rb14
-rw-r--r--spec/views/profiles/keys/_key.html.haml_spec.rb39
-rw-r--r--spec/views/profiles/preferences/show.html.haml_spec.rb4
-rw-r--r--spec/views/projects/_home_panel.html.haml_spec.rb24
-rw-r--r--spec/views/projects/commit/_commit_box.html.haml_spec.rb3
-rw-r--r--spec/views/projects/commit/show.html.haml_spec.rb13
-rw-r--r--spec/views/projects/edit.html.haml_spec.rb32
-rw-r--r--spec/views/projects/empty.html.haml_spec.rb4
-rw-r--r--spec/views/projects/issues/_related_issues.html.haml_spec.rb37
-rw-r--r--spec/views/projects/merge_requests/edit.html.haml_spec.rb78
-rw-r--r--spec/views/projects/packages/index.html.haml_spec.rb39
-rw-r--r--spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb4
-rw-r--r--spec/views/projects/pipelines/show.html.haml_spec.rb19
-rw-r--r--spec/views/projects/project_members/index.html.haml_spec.rb1
-rw-r--r--spec/views/projects/runners/_project_runners.html.haml_spec.rb62
-rw-r--r--spec/views/projects/settings/merge_requests/show.html.haml_spec.rb8
-rw-r--r--spec/views/projects/tags/index.html.haml_spec.rb4
-rw-r--r--spec/views/registrations/welcome/show.html.haml_spec.rb2
-rw-r--r--spec/views/search/_results.html.haml_spec.rb6
-rw-r--r--spec/views/search/show.html.haml_spec.rb6
-rw-r--r--spec/views/shared/_label_row.html.haml_spec.rb4
-rw-r--r--spec/views/shared/milestones/_issuables.html.haml_spec.rb9
-rw-r--r--spec/views/shared/runners/_runner_details.html.haml_spec.rb49
58 files changed, 965 insertions, 372 deletions
diff --git a/spec/views/admin/application_settings/_ci_cd.html.haml_spec.rb b/spec/views/admin/application_settings/_ci_cd.html.haml_spec.rb
index d5aa7139e2b..dc65063c97b 100644
--- a/spec/views/admin/application_settings/_ci_cd.html.haml_spec.rb
+++ b/spec/views/admin/application_settings/_ci_cd.html.haml_spec.rb
@@ -60,8 +60,9 @@ RSpec.describe 'admin/application_settings/_ci_cd' do
expect(rendered).to have_field('Maximum number of runners registered per project', type: 'number')
expect(page.find_field('Maximum number of runners registered per project').value).to eq('70')
- expect(rendered).to have_field("Maximum number of downstream pipelines in a pipeline's hierarchy tree",
-type: 'number')
+ expect(rendered).to have_field(
+ "Maximum number of downstream pipelines in a pipeline's hierarchy tree", type: 'number'
+ )
expect(page.find_field("Maximum number of downstream pipelines in a pipeline's hierarchy tree").value)
.to eq('300')
end
diff --git a/spec/views/admin/application_settings/_repository_check.html.haml_spec.rb b/spec/views/admin/application_settings/_repository_check.html.haml_spec.rb
index 011f05eac21..f10ee35060b 100644
--- a/spec/views/admin/application_settings/_repository_check.html.haml_spec.rb
+++ b/spec/views/admin/application_settings/_repository_check.html.haml_spec.rb
@@ -46,12 +46,13 @@ RSpec.describe 'admin/application_settings/_repository_check.html.haml', feature
describe 'inactive project deletion' do
let_it_be(:application_setting) do
- build(:application_setting,
- delete_inactive_projects: true,
- inactive_projects_delete_after_months: 2,
- inactive_projects_min_size_mb: 250,
- inactive_projects_send_warning_email_after_months: 1
- )
+ build(
+ :application_setting,
+ delete_inactive_projects: true,
+ inactive_projects_delete_after_months: 2,
+ inactive_projects_min_size_mb: 250,
+ inactive_projects_send_warning_email_after_months: 1
+ )
end
it 'has the setting subsection' do
diff --git a/spec/views/admin/application_settings/ci_cd.html.haml_spec.rb b/spec/views/admin/application_settings/ci_cd.html.haml_spec.rb
index 5ef9399487f..d2a30f2c5c0 100644
--- a/spec/views/admin/application_settings/ci_cd.html.haml_spec.rb
+++ b/spec/views/admin/application_settings/ci_cd.html.haml_spec.rb
@@ -14,7 +14,7 @@ RSpec.describe 'admin/application_settings/ci_cd.html.haml' do
allow(view).to receive(:current_user).and_return(user)
end
- describe 'CI CD Runner Registration' do
+ describe 'CI CD Runners' do
it 'has the setting section' do
render
@@ -26,6 +26,9 @@ RSpec.describe 'admin/application_settings/ci_cd.html.haml' do
expect(rendered).to have_content("Runner registration")
expect(rendered).to have_content(s_("Runners|If both settings are disabled, new runners cannot be registered."))
+ expect(rendered).to have_content(
+ s_("Runners|Fetch GitLab Runner release version data from GitLab.com")
+ )
end
end
end
diff --git a/spec/views/admin/application_settings/network.html.haml_spec.rb b/spec/views/admin/application_settings/network.html.haml_spec.rb
new file mode 100644
index 00000000000..17515dbcc2c
--- /dev/null
+++ b/spec/views/admin/application_settings/network.html.haml_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'admin/application_settings/network.html.haml', feature_category: :projects do
+ let_it_be(:admin) { build_stubbed(:admin) }
+ let_it_be(:application_setting) { build(:application_setting) }
+
+ before do
+ assign(:application_setting, application_setting)
+ allow(view).to receive(:current_user) { admin }
+ end
+
+ context 'for Projects API rate limit' do
+ it 'renders the `projects_api_rate_limit_unauthenticated` field' do
+ render
+
+ expect(rendered).to have_field('application_setting_projects_api_rate_limit_unauthenticated')
+ end
+ end
+end
diff --git a/spec/views/admin/groups/_form.html.haml_spec.rb b/spec/views/admin/groups/_form.html.haml_spec.rb
new file mode 100644
index 00000000000..87929571a84
--- /dev/null
+++ b/spec/views/admin/groups/_form.html.haml_spec.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'admin/groups/_form', feature_category: :subgroups do
+ using RSpec::Parameterized::TableSyntax
+
+ let_it_be(:admin) { build(:user, :admin) }
+ let_it_be(:group) { build(:group, namespace_settings: build(:namespace_settings)) }
+
+ before do
+ allow(view).to receive(:current_user).and_return(admin)
+ allow(view).to receive(:visibility_level).and_return(group.visibility_level)
+ assign(:group, group)
+ end
+
+ describe 'group runner registration setting' do
+ where(:runner_registration_enabled, :valid_runner_registrars, :checked, :disabled) do
+ true | ['group'] | true | false
+ false | ['group'] | false | false
+ false | ['project'] | false | true
+ end
+
+ with_them do
+ before do
+ allow(group).to receive(:runner_registration_enabled?).and_return(runner_registration_enabled)
+ stub_application_setting(valid_runner_registrars: valid_runner_registrars)
+ end
+
+ it 'renders the checkbox correctly' do
+ render
+
+ expect(rendered).to have_field(
+ 'New group runners can be registered',
+ type: 'checkbox',
+ checked: checked,
+ disabled: disabled
+ )
+ end
+ end
+ end
+end
diff --git a/spec/views/admin/projects/_form.html.haml_spec.rb b/spec/views/admin/projects/_form.html.haml_spec.rb
new file mode 100644
index 00000000000..d36b32a1cbc
--- /dev/null
+++ b/spec/views/admin/projects/_form.html.haml_spec.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'admin/projects/_form', feature_category: :projects do
+ using RSpec::Parameterized::TableSyntax
+
+ let_it_be(:admin) { build_stubbed(:admin) }
+ let_it_be(:project) { build_stubbed(:project) }
+
+ before do
+ allow(view).to receive(:current_user).and_return(:admin)
+ assign(:project, project)
+ end
+
+ describe 'project runner registration setting' do
+ where(:runner_registration_enabled, :valid_runner_registrars, :checked, :disabled) do
+ true | ['project'] | true | false
+ false | ['project'] | false | false
+ false | ['group'] | false | true
+ end
+
+ with_them do
+ before do
+ allow(project).to receive(:runner_registration_enabled).and_return(runner_registration_enabled)
+ stub_application_setting(valid_runner_registrars: valid_runner_registrars)
+ end
+
+ it 'renders the checkbox correctly' do
+ render
+
+ expect(rendered).to have_field(
+ 'New project runners can be registered',
+ type: 'checkbox',
+ checked: checked,
+ disabled: disabled
+ )
+ end
+ end
+ 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 ac35bbef5b4..c1f4cafce0c 100644
--- a/spec/views/admin/sessions/new.html.haml_spec.rb
+++ b/spec/views/admin/sessions/new.html.haml_spec.rb
@@ -43,9 +43,9 @@ RSpec.describe 'admin/sessions/new.html.haml' do
it 'shows omniauth form' do
render
- expect(rendered).to have_css('.omniauth-container')
- expect(rendered).to have_content _('Sign in with')
expect(rendered).not_to have_content _('No authentication methods configured.')
+ expect(rendered).to have_content _('or')
+ expect(rendered).to have_css('.omniauth-container')
end
end
diff --git a/spec/views/admin/sessions/two_factor.html.haml_spec.rb b/spec/views/admin/sessions/two_factor.html.haml_spec.rb
index c7e0edbcd58..6503c08b84c 100644
--- a/spec/views/admin/sessions/two_factor.html.haml_spec.rb
+++ b/spec/views/admin/sessions/two_factor.html.haml_spec.rb
@@ -29,14 +29,10 @@ RSpec.describe 'admin/sessions/two_factor.html.haml' do
end
end
- context 'user has u2f active' do
- let(:user) { create(:admin, :two_factor_via_u2f) }
+ context 'user has WebAuthn active' do
+ let(:user) { create(:admin, :two_factor_via_webauthn) }
- before do
- stub_feature_flags(webauthn: false)
- end
-
- it 'shows enter u2f form' do
+ it 'shows enter WebAuthn form' do
render
expect(rendered).to have_css('#js-login-2fa-device.btn')
diff --git a/spec/views/ci/status/_badge.html.haml_spec.rb b/spec/views/ci/status/_badge.html.haml_spec.rb
index 6cbd9a61e98..ff8cfe2cca0 100644
--- a/spec/views/ci/status/_badge.html.haml_spec.rb
+++ b/spec/views/ci/status/_badge.html.haml_spec.rb
@@ -49,10 +49,12 @@ RSpec.describe 'ci/status/_badge' do
context 'status has external target url' do
before do
- external_job = create(:generic_commit_status,
- status: :running,
- pipeline: pipeline,
- target_url: 'http://gitlab.com')
+ external_job = create(
+ :generic_commit_status,
+ status: :running,
+ pipeline: pipeline,
+ target_url: 'http://gitlab.com'
+ )
render_status(external_job)
end
diff --git a/spec/views/ci/status/_icon.html.haml_spec.rb b/spec/views/ci/status/_icon.html.haml_spec.rb
index d0579734451..78b19957cf0 100644
--- a/spec/views/ci/status/_icon.html.haml_spec.rb
+++ b/spec/views/ci/status/_icon.html.haml_spec.rb
@@ -48,10 +48,12 @@ RSpec.describe 'ci/status/_icon' do
context 'status has external target url' do
before do
- external_job = create(:generic_commit_status,
- status: :running,
- pipeline: pipeline,
- target_url: 'http://gitlab.com')
+ external_job = create(
+ :generic_commit_status,
+ status: :running,
+ pipeline: pipeline,
+ target_url: 'http://gitlab.com'
+ )
render_status(external_job)
end
diff --git a/spec/views/devise/confirmations/almost_there.html.haml_spec.rb b/spec/views/devise/confirmations/almost_there.html.haml_spec.rb
index c091efe9295..8e12fb5a17e 100644
--- a/spec/views/devise/confirmations/almost_there.html.haml_spec.rb
+++ b/spec/views/devise/confirmations/almost_there.html.haml_spec.rb
@@ -3,9 +3,9 @@
require 'spec_helper'
RSpec.describe 'devise/confirmations/almost_there' do
- describe 'confirmations text' do
- subject { render(template: 'devise/confirmations/almost_there') }
+ subject { render(template: 'devise/confirmations/almost_there') }
+ describe 'confirmations text' do
before do
allow(view).to receive(:params).and_return(email: email)
end
@@ -34,4 +34,17 @@ RSpec.describe 'devise/confirmations/almost_there' do
end
end
end
+
+ describe 'register again prompt' do
+ specify do
+ subject
+
+ expect(rendered).to have_content(
+ 'If the email address is incorrect, you can register again with a different email'
+ )
+ expect(rendered).to have_link(
+ 'register again with a different email', href: new_user_registration_path
+ )
+ end
+ end
end
diff --git a/spec/views/devise/sessions/new.html.haml_spec.rb b/spec/views/devise/sessions/new.html.haml_spec.rb
index 798c891e75c..8de2eab36e9 100644
--- a/spec/views/devise/sessions/new.html.haml_spec.rb
+++ b/spec/views/devise/sessions/new.html.haml_spec.rb
@@ -3,14 +3,13 @@
require 'spec_helper'
RSpec.describe 'devise/sessions/new' do
- describe 'marketing text' do
+ describe 'marketing text', :saas do
subject { render(template: 'devise/sessions/new', layout: 'layouts/devise') }
before do
stub_devise
disable_captcha
stub_feature_flags(restyle_login_page: false)
- allow(Gitlab).to receive(:com?).and_return(true)
end
it 'when flash is anything it renders marketing text' do
@@ -32,71 +31,73 @@ RSpec.describe 'devise/sessions/new' do
flag_values = [true, false]
flag_values.each do |val|
- before do
- stub_feature_flags(restyle_login_page: val)
- end
+ context "with #{val}" do
+ before do
+ stub_feature_flags(restyle_login_page: val)
+ end
- describe 'ldap' do
- include LdapHelpers
+ describe 'ldap' do
+ include LdapHelpers
- let(:server) { { provider_name: 'ldapmain', label: 'LDAP' }.with_indifferent_access }
+ let(:server) { { provider_name: 'ldapmain', label: 'LDAP' }.with_indifferent_access }
- before do
- enable_ldap
- stub_devise
- disable_captcha
- disable_sign_up
- disable_other_signin_methods
+ before do
+ enable_ldap
+ stub_devise
+ disable_captcha
+ disable_sign_up
+ disable_other_signin_methods
- allow(view).to receive(:experiment_enabled?).and_return(false)
- end
+ allow(view).to receive(:experiment_enabled?).and_return(false)
+ end
- it 'is shown when enabled' do
- render
+ it 'is shown when enabled' do
+ render
- expect(rendered).to have_selector('.new-session-tabs')
- expect(rendered).to have_selector('[data-testid="ldap-tab"]')
- expect(rendered).to have_field('LDAP Username')
- end
+ expect(rendered).to have_selector('.new-session-tabs')
+ expect(rendered).to have_selector('[data-testid="ldap-tab"]')
+ expect(rendered).to have_field('LDAP Username')
+ end
- it 'is not shown when LDAP sign in is disabled' do
- disable_ldap_sign_in
+ it 'is not shown when LDAP sign in is disabled' do
+ disable_ldap_sign_in
- render
+ render
- expect(rendered).to have_content('No authentication methods configured')
- expect(rendered).not_to have_selector('[data-testid="ldap-tab"]')
- expect(rendered).not_to have_field('LDAP Username')
+ expect(rendered).to have_content('No authentication methods configured')
+ expect(rendered).not_to have_selector('[data-testid="ldap-tab"]')
+ expect(rendered).not_to have_field('LDAP Username')
+ end
end
- end
-
- describe 'Google Tag Manager' do
- let!(:gtm_id) { 'GTM-WWKMTWS' }
- subject { rendered }
+ describe 'Google Tag Manager' do
+ let!(:gtm_id) { 'GTM-WWKMTWS' }
- before do
- stub_devise
- disable_captcha
- stub_config(extra: { google_tag_manager_id: gtm_id, google_tag_manager_nonce_id: gtm_id })
- end
+ subject { rendered }
- describe 'when Google Tag Manager is enabled' do
before do
- enable_gtm
- render
+ stub_devise
+ disable_captcha
+ stub_config(extra: { google_tag_manager_id: gtm_id, google_tag_manager_nonce_id: gtm_id })
end
- it { is_expected.to match /www.googletagmanager.com/ }
- end
+ describe 'when Google Tag Manager is enabled' do
+ before do
+ enable_gtm
+ render
+ end
- describe 'when Google Tag Manager is disabled' do
- before do
- disable_gtm
- render
+ it { is_expected.to match /www.googletagmanager.com/ }
end
- it { is_expected.not_to match /www.googletagmanager.com/ }
+ describe 'when Google Tag Manager is disabled' do
+ before do
+ disable_gtm
+ render
+ end
+
+ it { is_expected.not_to match /www.googletagmanager.com/ }
+ end
end
end
end
diff --git a/spec/views/devise/shared/_error_messages.html.haml_spec.rb b/spec/views/devise/shared/_error_messages.html.haml_spec.rb
new file mode 100644
index 00000000000..9f23b049caf
--- /dev/null
+++ b/spec/views/devise/shared/_error_messages.html.haml_spec.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'devise/shared/_error_messages', feature_category: :system_access do
+ describe 'Error messages' do
+ let(:resource) do
+ instance_spy(User, errors: errors, class: User)
+ end
+
+ before do
+ allow(view).to receive(:resource).and_return(resource)
+ end
+
+ context 'with errors', :aggregate_failures do
+ let(:errors) { errors_stub(['Invalid name', 'Invalid password']) }
+
+ it 'shows errors' do
+ render
+
+ expect(rendered).to have_selector('#error_explanation')
+ expect(rendered).to have_content('Invalid name')
+ expect(rendered).to have_content('Invalid password')
+ end
+ end
+
+ context 'without errors' do
+ let(:errors) { [] }
+
+ it 'does not show errors' do
+ render
+
+ expect(rendered).not_to have_selector('#error_explanation')
+ end
+ end
+ end
+
+ def errors_stub(*messages)
+ ActiveModel::Errors.new(double).tap do |errors|
+ messages.each { |msg| errors.add(:base, msg) }
+ end
+ end
+end
diff --git a/spec/views/devise/shared/_signup_box.html.haml_spec.rb b/spec/views/devise/shared/_signup_box.html.haml_spec.rb
index ee9ccbf6ff5..377e29e18e7 100644
--- a/spec/views/devise/shared/_signup_box.html.haml_spec.rb
+++ b/spec/views/devise/shared/_signup_box.html.haml_spec.rb
@@ -20,6 +20,7 @@ RSpec.describe 'devise/shared/_signup_box' do
before do
stub_devise
+ allow(view).to receive(:arkose_labs_enabled?).and_return(false)
allow(view).to receive(:show_omniauth_providers).and_return(false)
allow(view).to receive(:url).and_return('_url_')
allow(view).to receive(:terms_path).and_return(terms_path)
@@ -29,10 +30,12 @@ RSpec.describe 'devise/shared/_signup_box' do
end
def text(translation)
- format(translation,
- button_text: button_text,
- link_start: "<a href='#{terms_path}' target='_blank' rel='noreferrer noopener'>",
- link_end: '</a>')
+ format(
+ translation,
+ button_text: button_text,
+ link_start: "<a href='#{terms_path}' target='_blank' rel='noreferrer noopener'>",
+ link_end: '</a>'
+ )
end
context 'when terms are enforced' do
diff --git a/spec/views/events/event/_common.html.haml_spec.rb b/spec/views/events/event/_common.html.haml_spec.rb
index 2160245fb63..de6f6d1abfa 100644
--- a/spec/views/events/event/_common.html.haml_spec.rb
+++ b/spec/views/events/event/_common.html.haml_spec.rb
@@ -18,22 +18,9 @@ RSpec.describe 'events/event/_common.html.haml' do
create(:event, :created, project: project, target: work_item, target_type: 'WorkItem', author: user)
end
- context 'when use_iid_in_work_items_path feature flag is disabled' do
- before do
- stub_feature_flags(use_iid_in_work_items_path: false)
- render partial: 'events/event/common', locals: { event: event.present }
- end
-
- it 'renders the correct url' do
- expect(rendered).to have_link(
- work_item.reference_link_text, href: "/#{project.full_path}/-/work_items/#{work_item.id}"
- )
- end
- end
-
it 'renders the correct url with iid' do
expect(rendered).to have_link(
- work_item.reference_link_text, href: "/#{project.full_path}/-/work_items/#{work_item.iid}?iid_path=true"
+ work_item.reference_link_text, href: "/#{project.full_path}/-/work_items/#{work_item.iid}"
)
end
diff --git a/spec/views/groups/edit.html.haml_spec.rb b/spec/views/groups/edit.html.haml_spec.rb
index fda93ebab51..1400791f12b 100644
--- a/spec/views/groups/edit.html.haml_spec.rb
+++ b/spec/views/groups/edit.html.haml_spec.rb
@@ -2,9 +2,13 @@
require 'spec_helper'
-RSpec.describe 'groups/edit.html.haml' do
+RSpec.describe 'groups/edit.html.haml', feature_category: :subgroups do
include Devise::Test::ControllerHelpers
+ before do
+ stub_template 'groups/settings/_code_suggestions' => ''
+ end
+
describe '"Share with group lock" setting' do
let(:root_owner) { create(:user) }
let(:root_group) { create(:group) }
diff --git a/spec/views/groups/group_members/index.html.haml_spec.rb b/spec/views/groups/group_members/index.html.haml_spec.rb
index 0b3b149238f..fdc6b09d32a 100644
--- a/spec/views/groups/group_members/index.html.haml_spec.rb
+++ b/spec/views/groups/group_members/index.html.haml_spec.rb
@@ -25,7 +25,6 @@ RSpec.describe 'groups/group_members/index', :aggregate_failures, feature_catego
expect(rendered).to have_selector('.js-invite-group-trigger')
expect(rendered).to have_selector('.js-invite-members-trigger')
- expect(response).to render_template(partial: 'groups/_invite_members_modal')
end
end
diff --git a/spec/views/groups/packages/index.html.haml_spec.rb b/spec/views/groups/packages/index.html.haml_spec.rb
new file mode 100644
index 00000000000..26f6268a224
--- /dev/null
+++ b/spec/views/groups/packages/index.html.haml_spec.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'groups/packages/index.html.haml', feature_category: :package_registry do
+ let_it_be(:group) { build(:group) }
+
+ subject { rendered }
+
+ before do
+ assign(:group, group)
+ end
+
+ it 'renders vue entrypoint' do
+ render
+
+ expect(rendered).to have_selector('#js-vue-packages-list')
+ end
+
+ describe 'settings path' do
+ it 'without permission sets empty settings path' do
+ allow(view).to receive(:show_group_package_registry_settings).and_return(false)
+
+ render
+
+ expect(rendered).to have_selector('[data-settings-path=""]')
+ end
+
+ it 'with permission sets group settings path' do
+ allow(view).to receive(:show_group_package_registry_settings).and_return(true)
+
+ render
+
+ expect(rendered).to have_selector(
+ "[data-settings-path=\"#{group_settings_packages_and_registries_path(group)}\"]"
+ )
+ end
+ end
+end
diff --git a/spec/views/groups/settings/_general.html.haml_spec.rb b/spec/views/groups/settings/_general.html.haml_spec.rb
new file mode 100644
index 00000000000..9f16e43be13
--- /dev/null
+++ b/spec/views/groups/settings/_general.html.haml_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'groups/settings/_general.html.haml', feature_category: :subgroups do
+ describe 'Group Settings README' do
+ let_it_be(:group) { build_stubbed(:group) }
+ let_it_be(:user) { build_stubbed(:admin) }
+
+ before do
+ assign(:group, group)
+ allow(view).to receive(:current_user).and_return(user)
+ end
+
+ it 'renders #js-group-settings-readme' do
+ render
+
+ expect(rendered).to have_selector('#js-group-settings-readme')
+ end
+ end
+end
diff --git a/spec/views/groups/show.html.haml_spec.rb b/spec/views/groups/show.html.haml_spec.rb
new file mode 100644
index 00000000000..ac687f68ef6
--- /dev/null
+++ b/spec/views/groups/show.html.haml_spec.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'groups/show', feature_category: :subgroups do
+ describe 'group README' do
+ let_it_be(:group) { build_stubbed(:group) }
+ let_it_be(:readme_project) { build_stubbed(:project, :readme) }
+
+ before do
+ assign(:group, group)
+ end
+
+ context 'with readme project' do
+ before do
+ allow(group).to receive(:group_readme).and_return(readme_project)
+ end
+
+ it 'renders #js-group-readme' do
+ render
+
+ expect(rendered).to have_selector('#js-group-readme')
+ end
+ end
+
+ context 'without readme project' do
+ before do
+ allow(group).to receive(:group_readme).and_return(nil)
+ end
+
+ it 'does not render #js-group-readme' do
+ render
+
+ expect(rendered).not_to have_selector('#js-group-readme')
+ end
+ end
+ end
+end
diff --git a/spec/views/help/index.html.haml_spec.rb b/spec/views/help/index.html.haml_spec.rb
index c041c41a412..f530e6a8f8d 100644
--- a/spec/views/help/index.html.haml_spec.rb
+++ b/spec/views/help/index.html.haml_spec.rb
@@ -21,11 +21,6 @@ RSpec.describe 'help/index' do
end
context 'when logged in' do
- def version_link_regexp(path)
- base_url = "#{view.source_host_url}/#{view.source_code_group}"
- %r{#{Regexp.escape(base_url)}/(gitlab|gitlab-foss)/#{Regexp.escape(path)}}
- end
-
before do
stub_user
end
@@ -36,7 +31,7 @@ RSpec.describe 'help/index' do
render
expect(rendered).to match '8.0.2'
- expect(rendered).to have_link('8.0.2', href: version_link_regexp('-/tags/v8.0.2'))
+ expect(rendered).to have_link('8.0.2', href: Gitlab::Source.release_url)
end
it 'shows a link to the commit for pre-releases' do
@@ -45,7 +40,7 @@ RSpec.describe 'help/index' do
render
expect(rendered).to match '8.0.2'
- expect(rendered).to have_link('abcdefg', href: version_link_regexp('-/commits/abcdefg'))
+ expect(rendered).to have_link('abcdefg', href: Gitlab::Source.release_url)
end
end
end
diff --git a/spec/views/layouts/_head.html.haml_spec.rb b/spec/views/layouts/_head.html.haml_spec.rb
index f9725c73d05..a44c69748e5 100644
--- a/spec/views/layouts/_head.html.haml_spec.rb
+++ b/spec/views/layouts/_head.html.haml_spec.rb
@@ -59,7 +59,7 @@ RSpec.describe 'layouts/_head' do
render
- expect(rendered).to match('<link rel="stylesheet" media="print" href="/stylesheets/highlight/themes/solarised-light.css" />')
+ expect(rendered).to match('<link rel="stylesheet" media="all" href="/stylesheets/highlight/themes/solarised-light.css" />')
end
context 'when an asset_host is set and snowplow url is set', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/346542' do
diff --git a/spec/views/layouts/_search.html.haml_spec.rb b/spec/views/layouts/_search.html.haml_spec.rb
deleted file mode 100644
index ceb82e3640e..00000000000
--- a/spec/views/layouts/_search.html.haml_spec.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'layouts/_search' do
- let(:group) { nil }
- let(:project) { nil }
- let(:scope) { 'issues' }
- let(:search_context) do
- instance_double(Gitlab::SearchContext,
- project: project,
- group: group,
- scope: scope,
- ref: nil,
- snippets: [],
- search_url: '/search',
- project_metadata: {},
- group_metadata: {})
- end
-
- before do
- allow(view).to receive(:search_context).and_return(search_context)
- allow(search_context).to receive(:code_search?).and_return(false)
- allow(search_context).to receive(:for_snippets?).and_return(false)
- end
-
- shared_examples 'search context scope is set' do
- context 'when rendering' do
- it 'sets the placeholder' do
- render
-
- expect(rendered).to include('placeholder="Search GitLab"')
- expect(rendered).to include('aria-label="Search GitLab"')
- end
- end
-
- context 'when on issues' do
- it 'sets scope to issues' do
- render
-
- expect(rendered).to have_css("input[name='scope'][value='issues']", count: 1, visible: false)
- end
- end
-
- context 'when on merge requests' do
- let(:scope) { 'merge_requests' }
-
- it 'sets scope to merge_requests' do
- render
-
- expect(rendered).to have_css("input[name='scope'][value='merge_requests']", count: 1, visible: false)
- end
- end
- end
-
- context 'when doing project level search' do
- let(:project) { create(:project) }
-
- before do
- allow(search_context).to receive(:for_project?).and_return(true)
- allow(search_context).to receive(:for_group?).and_return(false)
- end
-
- it_behaves_like 'search context scope is set'
- end
-
- context 'when doing group level search' do
- let(:group) { create(:group) }
-
- before do
- allow(search_context).to receive(:for_project?).and_return(false)
- allow(search_context).to receive(:for_group?).and_return(true)
- end
-
- it_behaves_like 'search context scope is set'
- end
-end
diff --git a/spec/views/layouts/application.html.haml_spec.rb b/spec/views/layouts/application.html.haml_spec.rb
index 527ba1498b9..d4d40a9ade9 100644
--- a/spec/views/layouts/application.html.haml_spec.rb
+++ b/spec/views/layouts/application.html.haml_spec.rb
@@ -6,10 +6,6 @@ RSpec.describe 'layouts/application' do
let(:user) { create(:user) }
before do
- allow(view).to receive(:current_application_settings).and_return(Gitlab::CurrentSettings.current_application_settings)
- allow(view).to receive(:experiment_enabled?).and_return(false)
- allow(view).to receive(:session).and_return({})
- allow(view).to receive(:user_signed_in?).and_return(true)
allow(view).to receive(:current_user).and_return(user)
allow(view).to receive(:current_user_mode).and_return(Gitlab::Auth::CurrentUserMode.new(user))
end
diff --git a/spec/views/layouts/devise.html.haml_spec.rb b/spec/views/layouts/devise.html.haml_spec.rb
index b37bdeceb7e..a9215730370 100644
--- a/spec/views/layouts/devise.html.haml_spec.rb
+++ b/spec/views/layouts/devise.html.haml_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'layouts/devise' do
+RSpec.describe 'layouts/devise', feature_category: :user_management do
it_behaves_like 'a layout which reflects the application theme setting'
describe 'logo' do
@@ -22,4 +22,12 @@ RSpec.describe 'layouts/devise' do
end
end
end
+
+ context 'without broadcast messaging' do
+ it 'does not render the broadcast layout' do
+ render
+
+ expect(rendered).not_to render_template('layouts/_broadcast')
+ end
+ end
end
diff --git a/spec/views/layouts/group.html.haml_spec.rb b/spec/views/layouts/group.html.haml_spec.rb
new file mode 100644
index 00000000000..0b8f735a1d6
--- /dev/null
+++ b/spec/views/layouts/group.html.haml_spec.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'layouts/group', feature_category: :subgroups do
+ let_it_be(:group) { create(:group) } # rubocop:todo RSpec/FactoryBot/AvoidCreate
+ let(:invite_member) { true }
+
+ before do
+ allow(view).to receive(:can_admin_group_member?).and_return(invite_member)
+ assign(:group, group)
+ allow(view).to receive(:current_user_mode).and_return(Gitlab::Auth::CurrentUserMode.new(build_stubbed(:user)))
+ end
+
+ subject do
+ render
+
+ rendered
+ end
+
+ context 'with ability to invite members' do
+ it { is_expected.to have_selector('.js-invite-members-modal') }
+ end
+
+ context 'without ability to invite members' do
+ let(:invite_member) { false }
+
+ it { is_expected.not_to have_selector('.js-invite-members-modal') }
+ 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 178448022d1..2c5882fce3d 100644
--- a/spec/views/layouts/header/_new_dropdown.haml_spec.rb
+++ b/spec/views/layouts/header/_new_dropdown.haml_spec.rb
@@ -7,13 +7,13 @@ RSpec.describe 'layouts/header/_new_dropdown', feature_category: :navigation do
shared_examples_for 'invite member selector' do
context 'with ability to invite members' do
- it { is_expected.to have_link('Invite members', href: href) }
+ it { is_expected.to have_selector('.js-invite-members-trigger') }
end
context 'without ability to invite members' do
let(:invite_member) { false }
- it { is_expected.not_to have_link('Invite members') }
+ it { is_expected.not_to have_selector('.js-invite-members-trigger') }
end
end
@@ -159,6 +159,29 @@ RSpec.describe 'layouts/header/_new_dropdown', feature_category: :navigation do
expect(rendered).to have_link('New snippet', href: new_snippet_path)
end
+ context 'when partial exists in a menu item' do
+ it 'renders the menu item partial without rendering invite modal partial' do
+ view_model = {
+ title: '_title_',
+ menu_sections: [
+ {
+ title: '_section_title_',
+ menu_items: [
+ ::Gitlab::Nav::TopNavMenuItem
+ .build(id: '_id_', title: '_title_', partial: 'groups/invite_members_top_nav_link')
+ ]
+ }
+ ]
+ }
+
+ allow(view).to receive(:new_dropdown_view_model).and_return(view_model)
+
+ render
+
+ expect(response).to render_template(partial: 'groups/_invite_members_top_nav_link')
+ end
+ end
+
context 'when the user is not allowed to do anything' do
let(:user) { create(:user, :external) } # rubocop:disable RSpec/FactoryBot/AvoidCreate
diff --git a/spec/views/layouts/minimal.html.haml_spec.rb b/spec/views/layouts/minimal.html.haml_spec.rb
new file mode 100644
index 00000000000..97cd699d32f
--- /dev/null
+++ b/spec/views/layouts/minimal.html.haml_spec.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'layouts/minimal', feature_category: :onboarding do
+ context 'without broadcast messaging' do
+ it 'does not render the broadcast layout' do
+ render
+
+ expect(rendered).not_to render_template('layouts/_broadcast')
+ end
+ end
+end
diff --git a/spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb b/spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb
index 163f39568e5..3097598aaca 100644
--- a/spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb
+++ b/spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb
@@ -2,7 +2,14 @@
require 'spec_helper'
-RSpec.describe 'layouts/nav/sidebar/_admin' do
+RSpec.describe 'layouts/nav/sidebar/_admin', feature_category: :navigation do
+ let(:user) { build(:admin) }
+
+ before do
+ allow(user).to receive(:can_admin_all_resources?).and_return(true)
+ allow(view).to receive(:current_user).and_return(user)
+ end
+
shared_examples 'page has active tab' do |title|
it "activates #{title} tab" do
render
@@ -32,7 +39,7 @@ RSpec.describe 'layouts/nav/sidebar/_admin' do
context 'on projects' do
before do
- allow(controller).to receive(:controller_name).and_return('projects')
+ allow(controller).to receive(:controller_name).and_return('admin/projects')
allow(controller).to receive(:controller_path).and_return('admin/projects')
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 cddff276317..94ea9043857 100644
--- a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
+++ b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
@@ -106,11 +106,11 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
end
end
- describe 'Contributors' do
+ describe 'Contributor statistics' do
it 'has a link to the project contributors path' do
render
- expect(rendered).to have_link('Contributors', href: project_graph_path(project, current_ref, ref_type: 'heads'))
+ expect(rendered).to have_link('Contributor statistics', href: project_graph_path(project, current_ref, ref_type: 'heads'))
end
end
@@ -122,11 +122,11 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
end
end
- describe 'Compare' do
+ describe 'Compare revisions' do
it 'has a link to the project compare path' do
render
- expect(rendered).to have_link('Compare', href: project_compare_index_path(project, from: project.repository.root_ref, to: current_ref))
+ expect(rendered).to have_link('Compare revisions', href: project_compare_index_path(project, from: project.repository.root_ref, to: current_ref))
end
end
end
@@ -310,7 +310,7 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
it 'top level navigation link is not visible' do
render
- expect(rendered).not_to have_link('Security & Compliance')
+ expect(rendered).not_to have_link('Security and Compliance')
end
end
@@ -322,11 +322,11 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
end
it 'top level navigation link is visible' do
- expect(rendered).to have_link('Security & Compliance')
+ expect(rendered).to have_link('Security and Compliance')
end
it 'security configuration link is visible' do
- expect(rendered).to have_link('Configuration', href: project_security_configuration_path(project))
+ expect(rendered).to have_link('Security configuration', href: project_security_configuration_path(project))
end
end
end
@@ -334,12 +334,12 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
describe 'Deployments' do
let(:page) { Nokogiri::HTML.parse(rendered) }
- describe 'Feature Flags' do
+ describe 'Feature flags' do
it 'has a link to the feature flags page' do
render
- expect(page.at_css('.shortcuts-deployments').parent.css('[aria-label="Feature Flags"]')).not_to be_empty
- expect(rendered).to have_link('Feature Flags', href: project_feature_flags_path(project))
+ expect(page.at_css('.shortcuts-deployments').parent.css('[aria-label="Feature flags"]')).not_to be_empty
+ expect(rendered).to have_link('Feature flags', href: project_feature_flags_path(project))
end
describe 'when the user does not have access' do
@@ -348,7 +348,7 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
it 'does not have a link to the feature flags page' do
render
- expect(rendered).not_to have_link('Feature Flags')
+ expect(rendered).not_to have_link('Feature flags')
end
end
end
@@ -382,6 +382,10 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
end
describe 'Monitor' do
+ before do
+ stub_feature_flags(remove_monitor_metrics: false)
+ end
+
it 'top level navigation link is visible for user with permissions' do
render
@@ -466,7 +470,7 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
it 'has a link to the terraform page' do
render
- expect(rendered).to have_link('Terraform', href: project_terraform_index_path(project))
+ expect(rendered).to have_link('Terraform states', href: project_terraform_index_path(project))
end
describe 'when the user does not have access' do
@@ -475,7 +479,7 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
it 'does not have a link to the terraform page' do
render
- expect(rendered).not_to have_link('Terraform')
+ expect(rendered).not_to have_link('Terraform states')
end
end
end
@@ -567,11 +571,11 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
end
end
- describe 'Infrastructure Registry' do
- it 'shows link to infrastructure registry page' do
+ describe 'Terraform modules' do
+ it 'shows link to terraform modules page' do
render
- expect(rendered).to have_link('Infrastructure Registry', href: project_infrastructure_registry_index_path(project))
+ expect(rendered).to have_link('Terraform modules', href: project_infrastructure_registry_index_path(project))
end
context 'when package registry config is disabled' do
@@ -580,7 +584,7 @@ RSpec.describe 'layouts/nav/sidebar/_project', feature_category: :navigation do
render
- expect(rendered).not_to have_link('Infrastructure Registry', href: project_infrastructure_registry_index_path(project))
+ expect(rendered).not_to have_link('Terraform modules', href: project_infrastructure_registry_index_path(project))
end
end
end
diff --git a/spec/views/layouts/project.html.haml_spec.rb b/spec/views/layouts/project.html.haml_spec.rb
new file mode 100644
index 00000000000..588828f7bd6
--- /dev/null
+++ b/spec/views/layouts/project.html.haml_spec.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'layouts/project', feature_category: :projects do
+ let(:invite_member) { true }
+
+ before do
+ allow(view).to receive(:can_admin_project_member?).and_return(invite_member)
+ assign(:project, build_stubbed(:project))
+ allow(view).to receive(:current_user_mode).and_return(Gitlab::Auth::CurrentUserMode.new(build_stubbed(:user)))
+ end
+
+ subject do
+ render
+
+ rendered
+ end
+
+ context 'with ability to invite members' do
+ it { is_expected.to have_selector('.js-invite-members-modal') }
+ end
+
+ context 'without ability to invite members' do
+ let(:invite_member) { false }
+
+ it { is_expected.not_to have_selector('.js-invite-members-modal') }
+ end
+end
diff --git a/spec/views/notify/autodevops_disabled_email.text.erb_spec.rb b/spec/views/notify/autodevops_disabled_email.text.erb_spec.rb
index d8299d637e1..4e053711dcf 100644
--- a/spec/views/notify/autodevops_disabled_email.text.erb_spec.rb
+++ b/spec/views/notify/autodevops_disabled_email.text.erb_spec.rb
@@ -9,12 +9,14 @@ RSpec.describe 'notify/autodevops_disabled_email.text.erb' do
let(:project) { create(:project, :repository) }
let(:pipeline) do
- create(:ci_pipeline,
- :failed,
- project: project,
- user: user,
- ref: project.default_branch,
- sha: project.commit.sha)
+ create(
+ :ci_pipeline,
+ :failed,
+ project: project,
+ user: user,
+ ref: project.default_branch,
+ sha: project.commit.sha
+ )
end
before do
diff --git a/spec/views/notify/import_issues_csv_email.html.haml_spec.rb b/spec/views/notify/import_issues_csv_email.html.haml_spec.rb
index 43dfab87ac9..c3d320a837b 100644
--- a/spec/views/notify/import_issues_csv_email.html.haml_spec.rb
+++ b/spec/views/notify/import_issues_csv_email.html.haml_spec.rb
@@ -5,8 +5,8 @@ require 'spec_helper'
RSpec.describe 'notify/import_issues_csv_email.html.haml' do
let(:user) { create(:user) }
let(:project) { create(:project) }
- let(:correct_results) { { success: 3, valid_file: true } }
- let(:errored_results) { { success: 3, error_lines: [5, 6, 7], valid_file: true } }
+ let(:correct_results) { { success: 3, parse_error: false } }
+ let(:errored_results) { { success: 3, error_lines: [5, 6, 7], parse_error: false } }
let(:parse_error_results) { { success: 0, parse_error: true } }
before do
diff --git a/spec/views/notify/import_work_items_csv_email.html.haml_spec.rb b/spec/views/notify/import_work_items_csv_email.html.haml_spec.rb
new file mode 100644
index 00000000000..989481fc2e6
--- /dev/null
+++ b/spec/views/notify/import_work_items_csv_email.html.haml_spec.rb
@@ -0,0 +1,133 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'notify/import_work_items_csv_email.html.haml', feature_category: :team_planning do
+ let_it_be(:user) { create(:user) } # rubocop:disable RSpec/FactoryBot/AvoidCreate
+ let_it_be(:project) { create(:project) } # rubocop:disable RSpec/FactoryBot/AvoidCreate
+
+ let(:parse_error) { "Error parsing CSV file. Please make sure it has the correct format" }
+
+ before do
+ assign(:user, user)
+ assign(:project, project)
+ assign(:results, results)
+
+ render
+ end
+
+ shared_examples_for 'no records created' do
+ specify do
+ expect(rendered).to have_content("No work items have been imported.")
+ expect(rendered).not_to have_content("work items successfully imported.")
+ end
+ end
+
+ shared_examples_for 'work item records created' do
+ specify do
+ expect(rendered).not_to have_content("No work items have been imported.")
+ expect(rendered).to have_content("work items successfully imported.")
+ end
+ end
+
+ shared_examples_for 'contains project link' do
+ specify do
+ expect(rendered).to have_link(project.full_name, href: project_url(project))
+ end
+ end
+
+ shared_examples_for 'contains parse error' do
+ specify do
+ expect(rendered).to have_content(parse_error)
+ end
+ end
+
+ shared_examples_for 'does not contain parse error' do
+ specify do
+ expect(rendered).not_to have_content(parse_error)
+ end
+ end
+
+ context 'when no errors found while importing' do
+ let(:results) { { success: 3, parse_error: false } }
+
+ it 'renders correctly' do
+ expect(rendered).not_to have_content("Errors found on line")
+ end
+
+ it_behaves_like 'contains project link'
+ it_behaves_like 'work item records created'
+ it_behaves_like 'does not contain parse error'
+ end
+
+ context 'when import errors reported' do
+ let(:results) { { success: 3, error_lines: [5, 6, 7], parse_error: false } }
+
+ it 'renders correctly' do
+ expect(rendered).to have_content("Errors found on lines: #{results[:error_lines].join(', ')}. \
+Please check that these lines have the following fields: title, type")
+ end
+
+ it_behaves_like 'contains project link'
+ it_behaves_like 'work item records created'
+ it_behaves_like 'does not contain parse error'
+ end
+
+ context 'when parse error reported while importing' do
+ let(:results) { { success: 0, parse_error: true } }
+
+ it_behaves_like 'contains project link'
+ it_behaves_like 'no records created'
+ it_behaves_like 'contains parse error'
+ end
+
+ context 'when work item type column contains blank entries' do
+ let(:results) { { success: 0, parse_error: false, type_errors: { blank: [4] } } }
+
+ it 'renders with missing work item message' do
+ expect(rendered).to have_content("Work item type is empty")
+ end
+
+ it_behaves_like 'contains project link'
+ it_behaves_like 'no records created'
+ it_behaves_like 'does not contain parse error'
+ end
+
+ context 'when work item type column contains missing entries' do
+ let(:results) { { success: 0, parse_error: false, type_errors: { missing: [5] } } }
+
+ it 'renders with missing work item message' do
+ expect(rendered).to have_content("Work item type cannot be found or is not supported.")
+ end
+
+ it_behaves_like 'contains project link'
+ it_behaves_like 'no records created'
+ it_behaves_like 'does not contain parse error'
+ end
+
+ context 'when work item type column contains disallowed entries' do
+ let(:results) { { success: 0, parse_error: false, type_errors: { disallowed: [6] } } }
+
+ it 'renders with missing work item message' do
+ expect(rendered).to have_content("Work item type is not available.")
+ end
+
+ it_behaves_like 'contains project link'
+ it_behaves_like 'no records created'
+ it_behaves_like 'does not contain parse error'
+ end
+
+ context 'when CSV contains multiple kinds of work item type errors' do
+ let(:results) { { success: 0, parse_error: false, type_errors: { blank: [4], missing: [5], disallowed: [6] } } }
+
+ it 'renders with missing work item message' do
+ expect(rendered).to have_content("Work item type is empty")
+ expect(rendered).to have_content("Work item type cannot be found or is not supported.")
+ expect(rendered).to have_content("Work item type is not available. Please check your license and permissions.")
+ end
+
+ it_behaves_like 'contains project link'
+ it_behaves_like 'no records created'
+ it_behaves_like 'does not contain parse error'
+ end
+end
diff --git a/spec/views/notify/new_achievement_email.html.haml_spec.rb b/spec/views/notify/new_achievement_email.html.haml_spec.rb
new file mode 100644
index 00000000000..9f577e6c043
--- /dev/null
+++ b/spec/views/notify/new_achievement_email.html.haml_spec.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require 'email_spec'
+
+RSpec.describe 'notify/new_achievement_email.html.haml', feature_category: :user_profile do
+ let(:user) { build(:user) }
+ let(:achievement) { build(:achievement) }
+
+ before do
+ allow(view).to receive(:message) { instance_double(Mail::Message, subject: 'Subject') }
+ assign(:user, user)
+ assign(:achievement, achievement)
+ end
+
+ it 'contains achievement information' do
+ render
+
+ expect(rendered).to have_content(achievement.namespace.full_path)
+ expect(rendered).to have_content(" awarded you the ")
+ expect(rendered).to have_content(achievement.name)
+ expect(rendered).to have_content(" achievement!")
+
+ expect(rendered).to have_content("View your achievements on your profile")
+ end
+end
diff --git a/spec/views/notify/pipeline_failed_email.text.erb_spec.rb b/spec/views/notify/pipeline_failed_email.text.erb_spec.rb
index dd637af5137..9bd5722954f 100644
--- a/spec/views/notify/pipeline_failed_email.text.erb_spec.rb
+++ b/spec/views/notify/pipeline_failed_email.text.erb_spec.rb
@@ -9,12 +9,14 @@ RSpec.describe 'notify/pipeline_failed_email.text.erb' do
let(:merge_request) { create(:merge_request, :simple, source_project: project) }
let(:pipeline) do
- create(:ci_pipeline,
- :failed,
- project: project,
- user: user,
- ref: project.default_branch,
- sha: project.commit.sha)
+ create(
+ :ci_pipeline,
+ :failed,
+ project: project,
+ user: user,
+ ref: project.default_branch,
+ sha: project.commit.sha
+ )
end
before do
diff --git a/spec/views/profiles/keys/_key.html.haml_spec.rb b/spec/views/profiles/keys/_key.html.haml_spec.rb
index 2ddbd3e6e14..4d14ce7c909 100644
--- a/spec/views/profiles/keys/_key.html.haml_spec.rb
+++ b/spec/views/profiles/keys/_key.html.haml_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'profiles/keys/_key.html.haml', feature_category: :authentication_and_authorization do
+RSpec.describe 'profiles/keys/_key.html.haml', feature_category: :system_access do
let_it_be(:user) { create(:user) }
before do
@@ -12,10 +12,12 @@ RSpec.describe 'profiles/keys/_key.html.haml', feature_category: :authentication
context 'when the key partial is used' do
let_it_be(:key) do
- create(:personal_key,
- user: user,
- last_used_at: 7.days.ago,
- expires_at: 2.days.from_now)
+ create(
+ :personal_key,
+ user: user,
+ last_used_at: 7.days.ago,
+ expires_at: 2.days.from_now
+ )
end
it 'displays the correct values', :aggregate_failures do
@@ -54,9 +56,7 @@ RSpec.describe 'profiles/keys/_key.html.haml', feature_category: :authentication
context 'when the key has not been used' do
let_it_be(:key) do
- create(:personal_key,
- user: user,
- last_used_at: nil)
+ create(:personal_key, user: user, last_used_at: nil)
end
it 'renders "Never" for last used' do
@@ -68,30 +68,21 @@ RSpec.describe 'profiles/keys/_key.html.haml', feature_category: :authentication
end
context 'displays the usage type' do
- where(:usage_type, :usage_type_text, :displayed_buttons, :hidden_buttons, :revoke_ssh_signatures_ff) do
+ where(:usage_type, :usage_type_text, :displayed_buttons, :hidden_buttons) do
[
- [:auth, 'Authentication', ['Remove'], ['Revoke'], true],
- [:auth_and_signing, 'Authentication & Signing', %w[Remove Revoke], [], true],
- [:signing, 'Signing', %w[Remove Revoke], [], true],
- [:auth, 'Authentication', ['Remove'], ['Revoke'], false],
- [:auth_and_signing, 'Authentication & Signing', %w[Remove], ['Revoke'], false],
- [:signing, 'Signing', %w[Remove], ['Revoke'], false]
+ [:auth, 'Authentication', ['Remove'], ['Revoke']],
+ [:auth_and_signing, 'Authentication & Signing', %w[Remove Revoke], []],
+ [:signing, 'Signing', %w[Remove Revoke], []]
]
end
with_them do
let(:key) { create(:key, user: user, usage_type: usage_type) }
- it 'renders usage type text' do
+ it 'renders usage type text and remove/revoke buttons', :aggregate_failures do
render
expect(rendered).to have_text(usage_type_text)
- end
-
- it 'renders remove/revoke buttons', :aggregate_failures do
- stub_feature_flags(revoke_ssh_signatures: revoke_ssh_signatures_ff)
-
- render
displayed_buttons.each do |button|
expect(rendered).to have_text(button)
@@ -106,9 +97,7 @@ RSpec.describe 'profiles/keys/_key.html.haml', feature_category: :authentication
context 'when the key does not have an expiration date' do
let_it_be(:key) do
- create(:personal_key,
- user: user,
- expires_at: nil)
+ create(:personal_key, user: user, expires_at: nil)
end
it 'renders "Never" for expires' do
diff --git a/spec/views/profiles/preferences/show.html.haml_spec.rb b/spec/views/profiles/preferences/show.html.haml_spec.rb
index 6e0c6d67d85..9a177ba0394 100644
--- a/spec/views/profiles/preferences/show.html.haml_spec.rb
+++ b/spec/views/profiles/preferences/show.html.haml_spec.rb
@@ -54,9 +54,9 @@ RSpec.describe 'profiles/preferences/show' do
end
it 'has helpful homepage setup guidance' do
- expect(rendered).to have_selector('[data-label="Dashboard"]')
+ expect(rendered).to have_selector('[data-label="Homepage"]')
expect(rendered).to have_selector("[data-description=" \
- "'Choose what content you want to see by default on your dashboard.']")
+ "'Choose what content you want to see by default on your homepage.']")
end
end
diff --git a/spec/views/projects/_home_panel.html.haml_spec.rb b/spec/views/projects/_home_panel.html.haml_spec.rb
index 6f6a2d9a04d..e5081df4c22 100644
--- a/spec/views/projects/_home_panel.html.haml_spec.rb
+++ b/spec/views/projects/_home_panel.html.haml_spec.rb
@@ -199,18 +199,6 @@ RSpec.describe 'projects/_home_panel' do
expect(rendered).not_to have_content("Forked from #{source_project.full_name}")
end
-
- context 'when fork_divergence_counts is disabled' do
- before do
- stub_feature_flags(fork_divergence_counts: false)
- end
-
- it 'shows the forked-from project' do
- render
-
- expect(rendered).to have_content("Forked from #{source_project.full_name}")
- end
- end
end
context 'user cannot read fork source' do
@@ -223,18 +211,6 @@ RSpec.describe 'projects/_home_panel' do
expect(rendered).not_to have_content("Forked from an inaccessible project")
end
-
- context 'when fork_divergence_counts is disabled' do
- before do
- stub_feature_flags(fork_divergence_counts: false)
- end
-
- it 'shows the message that forked project is inaccessible' do
- render
-
- expect(rendered).to have_content("Forked from an inaccessible project")
- end
- end
end
end
end
diff --git a/spec/views/projects/commit/_commit_box.html.haml_spec.rb b/spec/views/projects/commit/_commit_box.html.haml_spec.rb
index 4335a0901ae..ee76560ac3b 100644
--- a/spec/views/projects/commit/_commit_box.html.haml_spec.rb
+++ b/spec/views/projects/commit/_commit_box.html.haml_spec.rb
@@ -52,8 +52,7 @@ RSpec.describe 'projects/commit/_commit_box.html.haml' do
context 'when pipeline for the commit is blocked' do
let!(:pipeline) do
- create(:ci_pipeline, :blocked, project: project,
- sha: project.commit.id)
+ create(:ci_pipeline, :blocked, project: project, sha: project.commit.id)
end
it 'shows correct pipeline description' do
diff --git a/spec/views/projects/commit/show.html.haml_spec.rb b/spec/views/projects/commit/show.html.haml_spec.rb
index eba54628215..6d2237e773e 100644
--- a/spec/views/projects/commit/show.html.haml_spec.rb
+++ b/spec/views/projects/commit/show.html.haml_spec.rb
@@ -28,19 +28,6 @@ RSpec.describe 'projects/commit/show.html.haml', feature_category: :source_code_
allow(view).to receive(:pagination_params).and_return({})
end
- context 'inline diff view' do
- before do
- allow(view).to receive(:diff_view).and_return(:inline)
- allow(view).to receive(:diff_view).and_return(:inline)
-
- render
- end
-
- it 'has limited width' do
- expect(rendered).to have_selector('.limit-container-width')
- end
- end
-
context 'parallel diff view' do
before do
allow(view).to receive(:diff_view).and_return(:parallel)
diff --git a/spec/views/projects/edit.html.haml_spec.rb b/spec/views/projects/edit.html.haml_spec.rb
index bf154b61609..77336aa7d86 100644
--- a/spec/views/projects/edit.html.haml_spec.rb
+++ b/spec/views/projects/edit.html.haml_spec.rb
@@ -13,9 +13,11 @@ RSpec.describe 'projects/edit' do
assign(:project, project)
allow(controller).to receive(:current_user).and_return(user)
- allow(view).to receive_messages(current_user: user,
- can?: true,
- current_application_settings: Gitlab::CurrentSettings.current_application_settings)
+ allow(view).to receive_messages(
+ current_user: user,
+ can?: true,
+ current_application_settings: Gitlab::CurrentSettings.current_application_settings
+ )
end
context 'project export disabled' do
@@ -101,4 +103,28 @@ RSpec.describe 'projects/edit' do
it_behaves_like 'renders registration features prompt', :project_disabled_repository_size_limit
end
end
+
+ describe 'pages menu entry callout' do
+ context 'with feature flag disabled' do
+ before do
+ stub_feature_flags(show_pages_in_deployments_menu: false)
+ end
+
+ it 'does not show a callout' do
+ render
+ expect(rendered).not_to have_content('GitLab Pages has moved')
+ end
+ end
+
+ context 'with feature flag enabled' do
+ before do
+ stub_feature_flags(show_pages_in_deployments_menu: true)
+ end
+
+ it 'does show a callout' do
+ render
+ expect(rendered).to have_content('GitLab Pages has moved')
+ end
+ end
+ end
end
diff --git a/spec/views/projects/empty.html.haml_spec.rb b/spec/views/projects/empty.html.haml_spec.rb
index 6077dda3c98..2b19b364365 100644
--- a/spec/views/projects/empty.html.haml_spec.rb
+++ b/spec/views/projects/empty.html.haml_spec.rb
@@ -73,9 +73,6 @@ RSpec.describe 'projects/empty' do
expect(rendered).to have_content('Invite your team')
expect(rendered).to have_content('Add members to this project and start collaborating with your team.')
expect(rendered).to have_selector('.js-invite-members-trigger')
- expect(rendered).to have_selector('.js-invite-members-modal')
- expect(rendered).to have_selector('[data-label=invite_members_empty_project]')
- expect(rendered).to have_selector('[data-event=click_button]')
expect(rendered).to have_selector('[data-trigger-source=project-empty-page]')
end
@@ -87,7 +84,6 @@ RSpec.describe 'projects/empty' do
expect(rendered).not_to have_content('Invite your team')
expect(rendered).not_to have_selector('.js-invite-members-trigger')
- expect(rendered).not_to have_selector('.js-invite-members-modal')
end
end
end
diff --git a/spec/views/projects/issues/_related_issues.html.haml_spec.rb b/spec/views/projects/issues/_related_issues.html.haml_spec.rb
new file mode 100644
index 00000000000..0dbca032c4b
--- /dev/null
+++ b/spec/views/projects/issues/_related_issues.html.haml_spec.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'projects/issues/_related_issues.html.haml', feature_category: :team_planning do
+ let_it_be(:project) { build_stubbed(:project) }
+ let_it_be(:issue) { build_stubbed(:issue, project: project) }
+
+ context 'when current user cannot read issue link for the project' do
+ before do
+ allow(view).to receive(:can?).and_return(false)
+ end
+
+ it 'does not render the related issues root node' do
+ render
+
+ expect(rendered).not_to have_selector(".js-related-issues-root")
+ end
+ end
+
+ context 'when current user can read issue link for the project' do
+ before do
+ allow(view).to receive(:can?).and_return(true)
+
+ assign(:project, project)
+ assign(:issue, issue)
+ end
+
+ it 'adds the report abuse path as a data attribute' do
+ render
+
+ expect(rendered).to have_selector(
+ ".js-related-issues-root[data-report-abuse-path=\"#{add_category_abuse_reports_path}\"]"
+ )
+ end
+ end
+end
diff --git a/spec/views/projects/merge_requests/edit.html.haml_spec.rb b/spec/views/projects/merge_requests/edit.html.haml_spec.rb
index 75956160c0a..bb8a4455775 100644
--- a/spec/views/projects/merge_requests/edit.html.haml_spec.rb
+++ b/spec/views/projects/merge_requests/edit.html.haml_spec.rb
@@ -35,30 +35,76 @@ RSpec.describe 'projects/merge_requests/edit.html.haml' do
.and_return(User.find(closed_merge_request.author_id))
end
- context 'when a merge request without fork' do
- it "shows editable fields" do
- unlink_project.execute
- closed_merge_request.reload
-
+ shared_examples 'merge request shows editable fields' do
+ it 'shows editable fields' do
render
expect(rendered).to have_field('merge_request[title]')
- expect(rendered).to have_field('merge_request[description]')
- expect(rendered).to have_selector('input[name="merge_request[label_ids][]"]', visible: false)
+ expect(rendered).to have_selector('input[name="merge_request[description]"]', visible: false)
expect(rendered).to have_selector('.js-milestone-dropdown-root')
- expect(rendered).not_to have_selector('#merge_request_target_branch', visible: false)
+ expect(rendered).to have_selector('#merge_request_target_branch', visible: false)
end
end
- context 'when a merge request with an existing source project is closed' do
- it "shows editable fields" do
- render
+ context 'with the visible_label_selection_on_metadata feature flag enabled' do
+ before do
+ stub_feature_flags(visible_label_selection_on_metadata: true)
+ end
- expect(rendered).to have_field('merge_request[title]')
- expect(rendered).to have_field('merge_request[description]')
- expect(rendered).to have_selector('input[name="merge_request[label_ids][]"]', visible: false)
- expect(rendered).to have_selector('.js-milestone-dropdown-root')
- expect(rendered).to have_selector('#merge_request_target_branch', visible: false)
+ context 'when a merge request without fork' do
+ it_behaves_like 'merge request shows editable fields'
+
+ it "shows editable fields" do
+ unlink_project.execute
+ closed_merge_request.reload
+
+ render
+
+ expect(rendered).not_to have_selector('#merge_request_target_branch', visible: false)
+ expect(rendered).to have_selector('.js-issuable-form-label-selector')
+ end
+ end
+
+ context 'when a merge request with an existing source project is closed' do
+ it_behaves_like 'merge request shows editable fields'
+
+ it "shows editable fields" do
+ render
+
+ expect(rendered).to have_selector('#merge_request_target_branch', visible: false)
+ expect(rendered).to have_selector('.js-issuable-form-label-selector')
+ end
+ end
+ end
+
+ context 'with the visible_label_selection_on_metadata feature flag disabled' do
+ before do
+ stub_feature_flags(visible_label_selection_on_metadata: false)
+ end
+
+ context 'when a merge request without fork' do
+ it_behaves_like 'merge request shows editable fields'
+
+ it "shows editable fields" do
+ unlink_project.execute
+ closed_merge_request.reload
+
+ render
+
+ expect(rendered).not_to have_selector('#merge_request_target_branch', visible: false)
+ expect(rendered).not_to have_selector('.js-issuable-form-label-selector')
+ end
+ end
+
+ context 'when a merge request with an existing source project is closed' do
+ it_behaves_like 'merge request shows editable fields'
+
+ it "shows editable fields" do
+ render
+
+ expect(rendered).to have_selector('#merge_request_target_branch', visible: false)
+ expect(rendered).not_to have_selector('.js-issuable-form-label-selector')
+ end
end
end
end
diff --git a/spec/views/projects/packages/index.html.haml_spec.rb b/spec/views/projects/packages/index.html.haml_spec.rb
new file mode 100644
index 00000000000..2557ceb70b3
--- /dev/null
+++ b/spec/views/projects/packages/index.html.haml_spec.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'projects/packages/packages/index.html.haml', feature_category: :package_registry do
+ let_it_be(:project) { build(:project) }
+
+ subject { rendered }
+
+ before do
+ assign(:project, project)
+ end
+
+ it 'renders vue entrypoint' do
+ render
+
+ expect(rendered).to have_selector('#js-vue-packages-list')
+ end
+
+ describe 'settings path' do
+ it 'without permission sets empty settings path' do
+ allow(view).to receive(:show_package_registry_settings).and_return(false)
+
+ render
+
+ expect(rendered).to have_selector('[data-settings-path=""]')
+ end
+
+ it 'with permission sets project settings path' do
+ allow(view).to receive(:show_package_registry_settings).and_return(true)
+
+ render
+
+ expect(rendered).to have_selector(
+ "[data-settings-path=\"#{project_settings_packages_and_registries_path(project)}\"]"
+ )
+ end
+ end
+end
diff --git a/spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb b/spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb
index 37c9908af1d..13ec7207ec9 100644
--- a/spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb
+++ b/spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb
@@ -22,7 +22,7 @@ RSpec.describe 'projects/pipeline_schedules/_pipeline_schedule' do
let(:user) { maintainer }
before do
- allow(view).to receive(:can?).with(maintainer, :take_ownership_pipeline_schedule, pipeline_schedule).and_return(true)
+ allow(view).to receive(:can?).with(maintainer, :admin_pipeline_schedule, pipeline_schedule).and_return(true)
end
it 'non-owner can take ownership of pipeline' do
@@ -36,7 +36,7 @@ RSpec.describe 'projects/pipeline_schedules/_pipeline_schedule' do
let(:user) { owner }
before do
- allow(view).to receive(:can?).with(owner, :take_ownership_pipeline_schedule, pipeline_schedule).and_return(false)
+ allow(view).to receive(:can?).with(owner, :admin_pipeline_schedule, pipeline_schedule).and_return(false)
end
it 'owner cannot take ownership of pipeline' do
diff --git a/spec/views/projects/pipelines/show.html.haml_spec.rb b/spec/views/projects/pipelines/show.html.haml_spec.rb
index b9c7da20d1a..81a11874886 100644
--- a/spec/views/projects/pipelines/show.html.haml_spec.rb
+++ b/spec/views/projects/pipelines/show.html.haml_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'projects/pipelines/show', feature_category: :pipeline_authoring do
+RSpec.describe 'projects/pipelines/show', feature_category: :pipeline_composition do
include Devise::Test::ControllerHelpers
let_it_be(:project) { create(:project, :repository) }
let_it_be(:user) { create(:user) }
@@ -13,6 +13,7 @@ RSpec.describe 'projects/pipelines/show', feature_category: :pipeline_authoring
before do
assign(:project, project)
assign(:pipeline, presented_pipeline)
+ allow(view).to receive(:current_user) { user }
end
context 'when pipeline has errors' do
@@ -32,6 +33,22 @@ RSpec.describe 'projects/pipelines/show', feature_category: :pipeline_authoring
expect(rendered).not_to have_selector('#js-pipeline-tabs')
end
+
+ it 'renders the pipeline editor button with correct link for users who can view' do
+ project.add_developer(user)
+
+ render
+
+ expect(rendered).to have_link s_('Go to the pipeline editor'),
+ href: project_ci_pipeline_editor_path(project)
+ end
+
+ it 'renders the pipeline editor button with correct link for users who can not view' do
+ render
+
+ expect(rendered).not_to have_link s_('Go to the pipeline editor'),
+ href: project_ci_pipeline_editor_path(project)
+ end
end
context 'when pipeline is valid' do
diff --git a/spec/views/projects/project_members/index.html.haml_spec.rb b/spec/views/projects/project_members/index.html.haml_spec.rb
index 4c4cde01cca..2fcc5c6935b 100644
--- a/spec/views/projects/project_members/index.html.haml_spec.rb
+++ b/spec/views/projects/project_members/index.html.haml_spec.rb
@@ -28,7 +28,6 @@ RSpec.describe 'projects/project_members/index', :aggregate_failures, feature_ca
expect(rendered).to have_selector('.js-invite-group-trigger')
expect(rendered).to have_selector('.js-invite-members-trigger')
expect(rendered).not_to have_content('Members can be added by project')
- expect(response).to render_template(partial: 'projects/_invite_members_modal')
end
context 'when project is not allowed to share with group' do
diff --git a/spec/views/projects/runners/_project_runners.html.haml_spec.rb b/spec/views/projects/runners/_project_runners.html.haml_spec.rb
index 8a7e693bdeb..d96b77b368c 100644
--- a/spec/views/projects/runners/_project_runners.html.haml_spec.rb
+++ b/spec/views/projects/runners/_project_runners.html.haml_spec.rb
@@ -15,30 +15,66 @@ RSpec.describe 'projects/runners/_project_runners.html.haml', feature_category:
allow(view).to receive(:reset_registration_token_namespace_project_settings_ci_cd_path).and_return('banana_url')
end
- context 'when project runner registration is allowed' do
+ context 'when create_runner_workflow_for_namespace is disabled' do
before do
- stub_application_setting(valid_runner_registrars: ['project'])
- allow(view).to receive(:can?).with(user, :register_project_runners, project).and_return(true)
+ stub_feature_flags(create_runner_workflow_for_namespace: false)
end
- it 'enables the Remove project button for a project' do
- render 'projects/runners/project_runners', project: project
+ context 'when project runner registration is allowed' do
+ before do
+ stub_application_setting(valid_runner_registrars: ['project'])
+ allow(view).to receive(:can?).with(user, :register_project_runners, project).and_return(true)
+ end
- expect(rendered).to have_selector '#js-install-runner'
- expect(rendered).not_to have_content 'Please contact an admin to register runners.'
+ it 'enables the Remove project button for a project' do
+ render 'projects/runners/project_runners', project: project
+
+ expect(rendered).to have_selector '#js-install-runner'
+ expect(rendered).not_to have_content 'Please contact an admin to register runners.'
+ end
+ end
+
+ context 'when project runner registration is not allowed' do
+ before do
+ stub_application_setting(valid_runner_registrars: ['group'])
+ end
+
+ it 'does not enable the Remove project button for a project' do
+ render 'projects/runners/project_runners', project: project
+
+ expect(rendered).to have_content 'Please contact an admin to register runners.'
+ expect(rendered).not_to have_selector '#js-install-runner'
+ end
end
end
- context 'when project runner registration is not allowed' do
+ context 'when create_runner_workflow_for_namespace is enabled' do
before do
- stub_application_setting(valid_runner_registrars: ['group'])
+ stub_feature_flags(create_runner_workflow_for_namespace: project.namespace)
end
- it 'does not enable the Remove project button for a project' do
- render 'projects/runners/project_runners', project: project
+ context 'when user can create project runner' do
+ before do
+ allow(view).to receive(:can?).with(user, :create_runner, project).and_return(true)
+ end
+
+ it 'renders the New project runner button' do
+ render 'projects/runners/project_runners', project: project
+
+ expect(rendered).to have_link(s_('Runners|New project runner'), href: new_project_runner_path(project))
+ end
+ end
+
+ context 'when user cannot create project runner' do
+ before do
+ allow(view).to receive(:can?).with(user, :create_runner, project).and_return(false)
+ end
+
+ it 'does not render the New project runner button' do
+ render 'projects/runners/project_runners', project: project
- expect(rendered).to have_content 'Please contact an admin to register runners.'
- expect(rendered).not_to have_selector '#js-install-runner'
+ expect(rendered).not_to have_link(s_('Runners|New project runner'))
+ end
end
end
end
diff --git a/spec/views/projects/settings/merge_requests/show.html.haml_spec.rb b/spec/views/projects/settings/merge_requests/show.html.haml_spec.rb
index 821f430eb10..1a7bfc5b5cd 100644
--- a/spec/views/projects/settings/merge_requests/show.html.haml_spec.rb
+++ b/spec/views/projects/settings/merge_requests/show.html.haml_spec.rb
@@ -13,9 +13,11 @@ RSpec.describe 'projects/settings/merge_requests/show' do
assign(:project, project)
allow(controller).to receive(:current_user).and_return(user)
- allow(view).to receive_messages(current_user: user,
- can?: true,
- current_application_settings: Gitlab::CurrentSettings.current_application_settings)
+ allow(view).to receive_messages(
+ current_user: user,
+ can?: true,
+ current_application_settings: Gitlab::CurrentSettings.current_application_settings
+ )
end
describe 'merge suggestions settings' do
diff --git a/spec/views/projects/tags/index.html.haml_spec.rb b/spec/views/projects/tags/index.html.haml_spec.rb
index 99db5d9e2a8..dfa27afb72f 100644
--- a/spec/views/projects/tags/index.html.haml_spec.rb
+++ b/spec/views/projects/tags/index.html.haml_spec.rb
@@ -6,9 +6,7 @@ RSpec.describe 'projects/tags/index.html.haml' do
let_it_be(:project) { create(:project, :repository) }
let_it_be(:git_tag) { project.repository.tags.last }
let_it_be(:release) do
- create(:release, project: project,
- sha: git_tag.target_commit.sha,
- tag: 'v1.1.0')
+ create(:release, project: project, sha: git_tag.target_commit.sha, tag: 'v1.1.0')
end
let(:pipeline) { create(:ci_pipeline, :success, project: project, ref: git_tag.name, sha: release.sha) }
diff --git a/spec/views/registrations/welcome/show.html.haml_spec.rb b/spec/views/registrations/welcome/show.html.haml_spec.rb
index 372dbf01a64..e229df555b1 100644
--- a/spec/views/registrations/welcome/show.html.haml_spec.rb
+++ b/spec/views/registrations/welcome/show.html.haml_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe 'registrations/welcome/show' do
before do
allow(view).to receive(:current_user).and_return(user)
- allow(view).to receive(:glm_tracking_params).and_return({})
+ allow(view).to receive(:welcome_update_params).and_return({})
render
end
diff --git a/spec/views/search/_results.html.haml_spec.rb b/spec/views/search/_results.html.haml_spec.rb
index ed71a03c7e0..832cc5b7cf3 100644
--- a/spec/views/search/_results.html.haml_spec.rb
+++ b/spec/views/search/_results.html.haml_spec.rb
@@ -97,12 +97,6 @@ RSpec.describe 'search/_results', feature_category: :global_search do
expect(rendered).not_to have_selector('[data-track-property=search_result]')
end
end
-
- it 'does render the sidebar' do
- render
-
- expect(rendered).to have_selector('#js-search-sidebar')
- end
end
end
diff --git a/spec/views/search/show.html.haml_spec.rb b/spec/views/search/show.html.haml_spec.rb
index db06adfeb6b..0158a9049b9 100644
--- a/spec/views/search/show.html.haml_spec.rb
+++ b/spec/views/search/show.html.haml_spec.rb
@@ -41,6 +41,12 @@ RSpec.describe 'search/show', feature_category: :global_search do
expect(rendered).not_to render_template('search/_results')
end
+
+ it 'does render the sidebar' do
+ render
+
+ expect(rendered).to have_selector('#js-search-sidebar')
+ end
end
context 'unfurling support' do
diff --git a/spec/views/shared/_label_row.html.haml_spec.rb b/spec/views/shared/_label_row.html.haml_spec.rb
index 6fe74b6633b..eb277930c1d 100644
--- a/spec/views/shared/_label_row.html.haml_spec.rb
+++ b/spec/views/shared/_label_row.html.haml_spec.rb
@@ -38,7 +38,7 @@ RSpec.describe 'shared/_label_row.html.haml' do
end
it 'shows the path from where the label was created' do
- expect(rendered).to have_css('.label-badge', text: project.full_name)
+ expect(rendered).to have_text(project.full_name)
end
end
@@ -70,7 +70,7 @@ RSpec.describe 'shared/_label_row.html.haml' do
end
it 'shows the path from where the label was created' do
- expect(rendered).to have_css('.label-badge', text: subgroup.full_name)
+ expect(rendered).to have_text(subgroup.full_name)
end
end
diff --git a/spec/views/shared/milestones/_issuables.html.haml_spec.rb b/spec/views/shared/milestones/_issuables.html.haml_spec.rb
index 5eed2c96a45..cd11c028bd7 100644
--- a/spec/views/shared/milestones/_issuables.html.haml_spec.rb
+++ b/spec/views/shared/milestones/_issuables.html.haml_spec.rb
@@ -6,8 +6,13 @@ RSpec.describe 'shared/milestones/_issuables.html.haml' do
let(:issuables_size) { 100 }
before do
- allow(view).to receive_messages(title: nil, id: nil, show_project_name: nil, dom_class: '',
- issuables: double(length: issuables_size).as_null_object)
+ allow(view).to receive_messages(
+ title: nil,
+ id: nil,
+ show_project_name: nil,
+ dom_class: '',
+ issuables: double(length: issuables_size).as_null_object
+ )
stub_template 'shared/milestones/_issuable.html.haml' => ''
end
diff --git a/spec/views/shared/runners/_runner_details.html.haml_spec.rb b/spec/views/shared/runners/_runner_details.html.haml_spec.rb
index 6e95f6e8075..a597c719d87 100644
--- a/spec/views/shared/runners/_runner_details.html.haml_spec.rb
+++ b/spec/views/shared/runners/_runner_details.html.haml_spec.rb
@@ -2,15 +2,18 @@
require 'spec_helper'
-RSpec.describe 'shared/runners/_runner_details.html.haml' do
+RSpec.describe 'shared/runners/_runner_details.html.haml', feature_category: :runner_fleet do
include PageLayoutHelper
- let(:runner) do
- create(:ci_runner, name: 'test runner',
- version: '11.4.0',
- ip_address: '127.1.2.3',
- revision: 'abcd1234',
- architecture: 'amd64' )
+ let_it_be(:runner) do
+ build_stubbed(
+ :ci_runner,
+ name: 'test runner',
+ version: '11.4.0',
+ ip_address: '127.1.2.3',
+ revision: 'abcd1234',
+ architecture: 'amd64'
+ )
end
before do
@@ -22,29 +25,19 @@ RSpec.describe 'shared/runners/_runner_details.html.haml' do
rendered
end
- describe 'Page title' do
- before do
- expect(view).to receive(:page_title).with("##{runner.id} (#{runner.short_sha})")
- end
-
- it 'sets proper page title' do
- render
- end
- end
-
describe 'Runner id and type' do
context 'when runner is of type instance' do
it { is_expected.to have_content("Runner ##{runner.id} shared") }
end
context 'when runner is of type group' do
- let(:runner) { create(:ci_runner, :group) }
+ let(:runner) { build_stubbed(:ci_runner, :group) }
it { is_expected.to have_content("Runner ##{runner.id} group") }
end
context 'when runner is of type project' do
- let(:runner) { create(:ci_runner, :project) }
+ let(:runner) { build_stubbed(:ci_runner, :project) }
it { is_expected.to have_content("Runner ##{runner.id} project") }
end
@@ -56,7 +49,7 @@ RSpec.describe 'shared/runners/_runner_details.html.haml' do
end
context 'when runner is inactive' do
- let(:runner) { create(:ci_runner, :inactive) }
+ let(:runner) { build_stubbed(:ci_runner, :inactive) }
it { is_expected.to have_content('Active No') }
end
@@ -68,7 +61,7 @@ RSpec.describe 'shared/runners/_runner_details.html.haml' do
end
context 'when runner is protected' do
- let(:runner) { create(:ci_runner, :ref_protected) }
+ let(:runner) { build_stubbed(:ci_runner, :ref_protected) }
it { is_expected.to have_content('Protected Yes') }
end
@@ -80,7 +73,7 @@ RSpec.describe 'shared/runners/_runner_details.html.haml' do
end
context 'when runner run untagged job is unset' do
- let(:runner) { create(:ci_runner, :tagged_only) }
+ let(:runner) { build_stubbed(:ci_runner, :tagged_only) }
it { is_expected.to have_content('Can run untagged jobs No') }
end
@@ -91,19 +84,19 @@ RSpec.describe 'shared/runners/_runner_details.html.haml' do
it { is_expected.to have_content('Locked to this project No') }
context 'when runner is of type group' do
- let(:runner) { create(:ci_runner, :group) }
+ let(:runner) { build_stubbed(:ci_runner, :group) }
it { is_expected.not_to have_content('Locked to this project') }
end
end
context 'when runner locked is set' do
- let(:runner) { create(:ci_runner, :locked) }
+ let(:runner) { build_stubbed(:ci_runner, :locked) }
it { is_expected.to have_content('Locked to this project Yes') }
context 'when runner is of type group' do
- let(:runner) { create(:ci_runner, :group, :locked) }
+ let(:runner) { build_stubbed(:ci_runner, :group, :locked) }
it { is_expected.not_to have_content('Locked to this project') }
end
@@ -117,7 +110,7 @@ RSpec.describe 'shared/runners/_runner_details.html.haml' do
end
context 'when runner have tags' do
- let(:runner) { create(:ci_runner, tag_list: %w(tag2 tag3 tag1)) }
+ let(:runner) { build_stubbed(:ci_runner, tag_list: %w[tag2 tag3 tag1]) }
it { is_expected.to have_content('Tags tag1 tag2 tag3') }
it { is_expected.to have_selector('span.gl-badge.badge.badge-info') }
@@ -135,7 +128,7 @@ RSpec.describe 'shared/runners/_runner_details.html.haml' do
end
describe 'Maximum job timeout value' do
- let(:runner) { create(:ci_runner, maximum_timeout: 5400) }
+ let(:runner) { build_stubbed(:ci_runner, maximum_timeout: 5400) }
it { is_expected.to have_content('Maximum job timeout 1h 30m') }
end
@@ -146,7 +139,7 @@ RSpec.describe 'shared/runners/_runner_details.html.haml' do
end
context 'when runner have already contacted' do
- let(:runner) { create(:ci_runner, contacted_at: DateTime.now - 6.days) }
+ let(:runner) { build_stubbed(:ci_runner, contacted_at: DateTime.now - 6.days) }
let(:expected_contacted_at) { I18n.l(runner.contacted_at, format: "%b %d, %Y") }
it { is_expected.to have_content("Last contact #{expected_contacted_at}") }