diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-04-06 18:08:20 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-04-06 18:08:20 +0300 |
commit | 78782cd1eb5273265668ca3e438bb8cbb1344004 (patch) | |
tree | 63e9715611d41a0c9dac52aca6613c1fc2af7b58 /rubocop | |
parent | b161512b300e70c1e786dd299867dad284e11019 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'rubocop')
-rw-r--r-- | rubocop/cop/rspec/feature_category_on_shared_examples.rb | 45 | ||||
-rw-r--r-- | rubocop/cop/rspec/shared_groups_metadata.rb | 52 |
2 files changed, 52 insertions, 45 deletions
diff --git a/rubocop/cop/rspec/feature_category_on_shared_examples.rb b/rubocop/cop/rspec/feature_category_on_shared_examples.rb deleted file mode 100644 index acb2ae79d12..00000000000 --- a/rubocop/cop/rspec/feature_category_on_shared_examples.rb +++ /dev/null @@ -1,45 +0,0 @@ -# frozen_string_literal: true - -require 'rubocop/cop/rspec/base' - -module RuboCop - module Cop - module RSpec - # Ensures that shared examples don't have feature category. - # - # @example - # - # # bad - # RSpec.shared_examples 'an external link with rel attribute', feature_category: :team_planning do - # end - # - # # good - # RSpec.shared_examples 'an external link with rel attribute' do - # end - # - # it 'adds rel="nofollow" to external links', feature_category: :team_planning do - # end - class FeatureCategoryOnSharedExamples < RuboCop::Cop::RSpec::Base - MSG = 'Shared examples should not have feature category set' - - # @!method feature_category_value(node) - def_node_matcher :feature_category_value, <<~PATTERN - (block - (send #rspec? {#SharedGroups.all} ... - $(hash <(pair (sym :feature_category) _) ...>) - ) - ... - ) - PATTERN - - def on_block(node) - value_node = feature_category_value(node) - - return unless value_node - - add_offense(value_node, message: MSG) - end - end - end - end -end diff --git a/rubocop/cop/rspec/shared_groups_metadata.rb b/rubocop/cop/rspec/shared_groups_metadata.rb new file mode 100644 index 00000000000..ac2406e54d2 --- /dev/null +++ b/rubocop/cop/rspec/shared_groups_metadata.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'rubocop/cop/rspec/base' + +module RuboCop + module Cop + module RSpec + # Ensures that shared examples and shared context don't have any metadata. + # + # @example + # + # # bad + # RSpec.shared_examples 'an external link with rel attribute', feature_category: :team_planning do + # end + # + # RSpec.shared_examples 'an external link with rel attribute', :aggregate_failures do + # end + # + # RSpec.shared_context 'an external link with rel attribute', :aggregate_failures do + # end + # + # # good + # RSpec.shared_examples 'an external link with rel attribute' do + # end + # + # shared_examples 'an external link with rel attribute' do + # end + # + # it 'adds rel="nofollow" to external links', feature_category: :team_planning do + # end + class SharedGroupsMetadata < RuboCop::Cop::RSpec::Base + MSG = 'Avoid using metadata on shared examples and shared context. They might cause flaky tests. See https://gitlab.com/gitlab-org/gitlab/-/issues/404388' + + # @!method metadata_value(node) + def_node_matcher :metadata_value, <<~PATTERN + (block + (send #rspec? {#SharedGroups.all} _description $_ ...) + ... + ) + PATTERN + + def on_block(node) + value_node = metadata_value(node) + + return unless value_node + + add_offense(value_node, message: MSG) + end + end + end + end +end |