diff options
Diffstat (limited to 'spec/support/helpers')
-rw-r--r-- | spec/support/helpers/access_matchers_helpers.rb | 16 | ||||
-rw-r--r-- | spec/support/helpers/cycle_analytics_helpers.rb | 5 | ||||
-rw-r--r-- | spec/support/helpers/feature_flag_helpers.rb | 3 | ||||
-rw-r--r-- | spec/support/helpers/features/top_nav_spec_helpers.rb | 53 | ||||
-rw-r--r-- | spec/support/helpers/gitaly_setup.rb | 4 | ||||
-rw-r--r-- | spec/support/helpers/global_id_deprecation_helpers.rb | 13 | ||||
-rw-r--r-- | spec/support/helpers/graphql_helpers.rb | 4 | ||||
-rw-r--r-- | spec/support/helpers/javascript_fixtures_helpers.rb | 10 | ||||
-rw-r--r-- | spec/support/helpers/login_helpers.rb | 6 | ||||
-rw-r--r-- | spec/support/helpers/query_recorder.rb | 7 | ||||
-rw-r--r-- | spec/support/helpers/rake_helpers.rb | 5 | ||||
-rw-r--r-- | spec/support/helpers/reference_parser_helpers.rb | 18 | ||||
-rw-r--r-- | spec/support/helpers/usage_data_helpers.rb | 2 |
13 files changed, 116 insertions, 30 deletions
diff --git a/spec/support/helpers/access_matchers_helpers.rb b/spec/support/helpers/access_matchers_helpers.rb index 9100f245d36..035653172c1 100644 --- a/spec/support/helpers/access_matchers_helpers.rb +++ b/spec/support/helpers/access_matchers_helpers.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true module AccessMatchersHelpers + include Gitlab::Utils::StrongMemoize + USER_ACCESSOR_METHOD_NAME = 'user' def provide_user(role, membership = nil) @@ -61,11 +63,6 @@ module AccessMatchersHelpers # (or defined by `method_name`) method generated by `let` definition in example group before it's used by `subject`. # This override is per concrete example only because the example group class gets re-created for each example. instance_eval(<<~CODE, __FILE__, __LINE__ + 1) - if instance_variable_get(:@__#{USER_ACCESSOR_METHOD_NAME}_patched) - raise ArgumentError, 'An access matcher be_allowed_for/be_denied_for can be used only once per example (`it` block)' - end - instance_variable_set(:@__#{USER_ACCESSOR_METHOD_NAME}_patched, true) - def #{USER_ACCESSOR_METHOD_NAME} @#{USER_ACCESSOR_METHOD_NAME} ||= User.find(#{user.id}) end @@ -81,6 +78,13 @@ module AccessMatchersHelpers end end + def reset_matcher_environment + instance_eval(<<~CODE, __FILE__, __LINE__ + 1) + clear_memoization(:#{USER_ACCESSOR_METHOD_NAME}) + undef #{USER_ACCESSOR_METHOD_NAME} if defined? user + CODE + end + def run_matcher(action, role, membership, owned_objects) raise_if_non_block_expectation!(action) @@ -91,5 +95,7 @@ module AccessMatchersHelpers else action.call end + + reset_matcher_environment end end diff --git a/spec/support/helpers/cycle_analytics_helpers.rb b/spec/support/helpers/cycle_analytics_helpers.rb index 5510284b30d..4515b96c79e 100644 --- a/spec/support/helpers/cycle_analytics_helpers.rb +++ b/spec/support/helpers/cycle_analytics_helpers.rb @@ -7,6 +7,11 @@ module CycleAnalyticsHelpers page.find('[data-testid="dropdown-value-streams"]').click end + def path_nav_stage_names_without_median + # Returns the path names with the median value stripped out + page.all('.gl-path-button').collect(&:text).map {|name_with_median| name_with_median.split("\n")[0] } + end + def add_custom_stage_to_form page.find_button(s_('CreateValueStreamForm|Add another stage')).click diff --git a/spec/support/helpers/feature_flag_helpers.rb b/spec/support/helpers/feature_flag_helpers.rb index 93cd915879b..af7a674f3bc 100644 --- a/spec/support/helpers/feature_flag_helpers.rb +++ b/spec/support/helpers/feature_flag_helpers.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module FeatureFlagHelpers - def create_flag(project, name, active = true, description: nil, version: Operations::FeatureFlag.versions['legacy_flag']) + def create_flag(project, name, active = true, description: nil, version: Operations::FeatureFlag.versions['new_version_flag']) create(:operations_feature_flag, name: name, active: active, version: version, description: description, project: project) end @@ -90,6 +90,5 @@ module FeatureFlagHelpers def expect_user_to_see_feature_flags_index_page expect(page).to have_text('Feature Flags') - expect(page).to have_text('Lists') end end diff --git a/spec/support/helpers/features/top_nav_spec_helpers.rb b/spec/support/helpers/features/top_nav_spec_helpers.rb new file mode 100644 index 00000000000..ab664ce4283 --- /dev/null +++ b/spec/support/helpers/features/top_nav_spec_helpers.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +# These helpers help you interact within the Editor Lite (single-file editor, snippets, etc.). +# +module Spec + module Support + module Helpers + module Features + module TopNavSpecHelpers + def open_top_nav + return unless Feature.enabled?(:combined_menu, default_enabled: :yaml) + + find('.js-top-nav-dropdown-toggle').click + end + + def within_top_nav + if Feature.enabled?(:combined_menu, default_enabled: :yaml) + within('.js-top-nav-dropdown-menu') do + yield + end + else + within('.navbar-sub-nav') do + yield + end + end + end + + def open_top_nav_projects + if Feature.enabled?(:combined_menu, default_enabled: :yaml) + open_top_nav + + within_top_nav do + click_button('Projects') + end + else + find('#nav-projects-dropdown').click + end + end + + def open_top_nav_groups + return unless Feature.enabled?(:combined_menu, default_enabled: :yaml) + + open_top_nav + + within_top_nav do + click_button('Groups') + end + end + end + end + end + end +end diff --git a/spec/support/helpers/gitaly_setup.rb b/spec/support/helpers/gitaly_setup.rb index 2ce4bcfa943..5cfd03ecea8 100644 --- a/spec/support/helpers/gitaly_setup.rb +++ b/spec/support/helpers/gitaly_setup.rb @@ -15,7 +15,7 @@ module GitalySetup default_name = ENV['CI'] ? 'DEBUG' : 'WARN' level_name = ENV['GITLAB_TESTING_LOG_LEVEL']&.upcase level = Logger.const_get(level_name || default_name, true) # rubocop: disable Gitlab/ConstGetInheritFalse - Logger.new(STDOUT, level: level, formatter: ->(_, _, _, msg) { msg }) + Logger.new($stdout, level: level, formatter: ->(_, _, _, msg) { msg }) end def tmp_tests_gitaly_dir @@ -153,7 +153,7 @@ module GitalySetup end LOGGER.debug "Checking gitaly-ruby bundle...\n" - out = ENV['CI'] ? STDOUT : '/dev/null' + out = ENV['CI'] ? $stdout : '/dev/null' abort 'bundle check failed' unless system(env, 'bundle', 'check', out: out, chdir: File.dirname(gemfile)) end diff --git a/spec/support/helpers/global_id_deprecation_helpers.rb b/spec/support/helpers/global_id_deprecation_helpers.rb new file mode 100644 index 00000000000..37ba1420fb3 --- /dev/null +++ b/spec/support/helpers/global_id_deprecation_helpers.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module GlobalIDDeprecationHelpers + def stub_global_id_deprecations(*deprecations) + old_name_map = deprecations.index_by(&:old_model_name) + new_name_map = deprecations.index_by(&:new_model_name) + old_graphql_name_map = deprecations.index_by { |d| Types::GlobalIDType.model_name_to_graphql_name(d.old_model_name) } + + stub_const('Gitlab::GlobalId::Deprecations::OLD_NAME_MAP', old_name_map) + stub_const('Gitlab::GlobalId::Deprecations::NEW_NAME_MAP', new_name_map) + stub_const('Gitlab::GlobalId::Deprecations::OLD_GRAPHQL_NAME_MAP', old_graphql_name_map) + end +end diff --git a/spec/support/helpers/graphql_helpers.rb b/spec/support/helpers/graphql_helpers.rb index 5dc6945ec5e..4857fa63114 100644 --- a/spec/support/helpers/graphql_helpers.rb +++ b/spec/support/helpers/graphql_helpers.rb @@ -1,6 +1,10 @@ # frozen_string_literal: true module GraphqlHelpers + def self.included(base) + base.include(::Gitlab::Graphql::Laziness) + end + MutationDefinition = Struct.new(:query, :variables) NoData = Class.new(StandardError) diff --git a/spec/support/helpers/javascript_fixtures_helpers.rb b/spec/support/helpers/javascript_fixtures_helpers.rb index 28375c1d51e..8fd8a548011 100644 --- a/spec/support/helpers/javascript_fixtures_helpers.rb +++ b/spec/support/helpers/javascript_fixtures_helpers.rb @@ -66,6 +66,14 @@ module JavaScriptFixturesHelpers File.write(full_fixture_path, fixture) end + def parse_html(fixture) + if respond_to?(:use_full_html) && public_send(:use_full_html) + Nokogiri::HTML::Document.parse(fixture) + else + Nokogiri::HTML::DocumentFragment.parse(fixture) + end + end + # Private: Prepare a response object for use as a frontend fixture # # response - response object to prepare @@ -76,7 +84,7 @@ module JavaScriptFixturesHelpers response_mime_type = Mime::Type.lookup(response.media_type) if response_mime_type.html? - doc = Nokogiri::HTML::DocumentFragment.parse(fixture) + doc = parse_html(fixture) link_tags = doc.css('link') link_tags.remove diff --git a/spec/support/helpers/login_helpers.rb b/spec/support/helpers/login_helpers.rb index fc3eb976276..cc88a3fc71e 100644 --- a/spec/support/helpers/login_helpers.rb +++ b/spec/support/helpers/login_helpers.rb @@ -77,7 +77,11 @@ module LoginHelpers # Requires Javascript driver. def gitlab_disable_admin_mode - click_on 'Leave Admin Mode' + open_top_nav + + within_top_nav do + click_on 'Leave Admin Mode' + end end private diff --git a/spec/support/helpers/query_recorder.rb b/spec/support/helpers/query_recorder.rb index 05afbc336da..d18a1d23584 100644 --- a/spec/support/helpers/query_recorder.rb +++ b/spec/support/helpers/query_recorder.rb @@ -2,15 +2,16 @@ module ActiveRecord class QueryRecorder - attr_reader :log, :skip_cached, :cached, :data + attr_reader :log, :skip_cached, :skip_schema_queries, :cached, :data UNKNOWN = %w[unknown unknown].freeze - def initialize(skip_cached: true, log_file: nil, query_recorder_debug: false, &block) + def initialize(skip_cached: true, skip_schema_queries: true, log_file: nil, query_recorder_debug: false, &block) @data = Hash.new { |h, k| h[k] = { count: 0, occurrences: [], backtrace: [], durations: [] } } @log = [] @cached = [] @skip_cached = skip_cached + @skip_schema_queries = skip_schema_queries @query_recorder_debug = ENV['QUERY_RECORDER_DEBUG'] || query_recorder_debug @log_file = log_file record(&block) if block_given? @@ -79,7 +80,7 @@ module ActiveRecord if values[:cached] && skip_cached @cached << values[:sql] - elsif !values[:name]&.include?("SCHEMA") + elsif !skip_schema_queries || !values[:name]&.include?("SCHEMA") backtrace = @query_recorder_debug ? show_backtrace(values, duration) : nil @log << values[:sql] store_sql_by_source(values: values, duration: duration, backtrace: backtrace) diff --git a/spec/support/helpers/rake_helpers.rb b/spec/support/helpers/rake_helpers.rb index d8f354a69da..4c0fa9d1b0b 100644 --- a/spec/support/helpers/rake_helpers.rb +++ b/spec/support/helpers/rake_helpers.rb @@ -10,11 +10,6 @@ module RakeHelpers allow(main_object).to receive(:warn_user_is_not_gitlab) end - def silence_output - allow(main_object).to receive(:puts) - allow(main_object).to receive(:print) - end - def silence_progress_bar allow_any_instance_of(ProgressBar::Output).to receive(:stream).and_return(double.as_null_object) end diff --git a/spec/support/helpers/reference_parser_helpers.rb b/spec/support/helpers/reference_parser_helpers.rb index e65cb8c96db..a6a7948d9d9 100644 --- a/spec/support/helpers/reference_parser_helpers.rb +++ b/spec/support/helpers/reference_parser_helpers.rb @@ -11,20 +11,20 @@ module ReferenceParserHelpers end RSpec.shared_examples 'no project N+1 queries' do - it 'avoids N+1 queries in #nodes_visible_to_user', :request_store do + it 'avoids N+1 queries in #nodes_visible_to_user' do context = Banzai::RenderContext.new(project, user) - record_queries = lambda do |links| - ActiveRecord::QueryRecorder.new do - described_class.new(context).nodes_visible_to_user(user, links) - end + request = lambda do |links| + described_class.new(context).nodes_visible_to_user(user, links) end - control = record_queries.call(control_links) - actual = record_queries.call(actual_links) + control = ActiveRecord::QueryRecorder.new { request.call(control_links) } - expect(actual.count).to be <= control.count - expect(actual.cached_count).to be <= control.cached_count + create(:group_member, group: project.group) if project.group + create(:project_member, project: project) + create(:project_group_link, project: project) + + expect { request.call(actual_links) }.not_to exceed_query_limit(control) end end diff --git a/spec/support/helpers/usage_data_helpers.rb b/spec/support/helpers/usage_data_helpers.rb index c6176b5bcbc..b1a9aade043 100644 --- a/spec/support/helpers/usage_data_helpers.rb +++ b/spec/support/helpers/usage_data_helpers.rb @@ -99,7 +99,6 @@ module UsageDataHelpers projects_with_repositories_enabled projects_with_error_tracking_enabled projects_with_enabled_alert_integrations - projects_with_prometheus_alerts projects_with_tracing_enabled projects_with_expiration_policy_enabled projects_with_expiration_policy_disabled @@ -163,7 +162,6 @@ module UsageDataHelpers database prometheus_metrics_enabled web_ide_clientside_preview_enabled - ingress_modsecurity_enabled object_store topology ).freeze |