diff options
Diffstat (limited to 'spec/views')
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}") } |
