diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-19 10:33:21 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-19 10:33:21 +0300 |
commit | 36a59d088eca61b834191dacea009677a96c052f (patch) | |
tree | e4f33972dab5d8ef79e3944a9f403035fceea43f /spec/rubocop/cop/gitlab/namespaced_class_spec.rb | |
parent | a1761f15ec2cae7c7f7bbda39a75494add0dfd6f (diff) |
Add latest changes from gitlab-org/gitlab@15-0-stable-eev15.0.0-rc42
Diffstat (limited to 'spec/rubocop/cop/gitlab/namespaced_class_spec.rb')
-rw-r--r-- | spec/rubocop/cop/gitlab/namespaced_class_spec.rb | 143 |
1 files changed, 98 insertions, 45 deletions
diff --git a/spec/rubocop/cop/gitlab/namespaced_class_spec.rb b/spec/rubocop/cop/gitlab/namespaced_class_spec.rb index 824a1b8cef5..d9209a8672c 100644 --- a/spec/rubocop/cop/gitlab/namespaced_class_spec.rb +++ b/spec/rubocop/cop/gitlab/namespaced_class_spec.rb @@ -1,72 +1,125 @@ # frozen_string_literal: true require 'fast_spec_helper' -require 'rubocop/rspec/support' require_relative '../../../../rubocop/cop/gitlab/namespaced_class' RSpec.describe RuboCop::Cop::Gitlab::NamespacedClass do subject(:cop) { described_class.new } - it 'flags a class definition without namespace' do - expect_offense(<<~SOURCE) - class MyClass - ^^^^^^^^^^^^^ #{described_class::MSG} - end - SOURCE - end + shared_examples 'enforces namespaced classes' do + def namespaced(code) + return code unless namespace - it 'flags a class definition with inheritance without namespace' do - expect_offense(<<~SOURCE) - class MyClass < ApplicationRecord - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{described_class::MSG} - def some_method - true + <<~SOURCE + module #{namespace} + #{code} end - end - SOURCE - end + SOURCE + end + + it 'flags a class definition without additional namespace' do + expect_offense(namespaced(<<~SOURCE)) + class MyClass + ^^^^^^^^^^^^^ #{described_class::MSG} + end + SOURCE + end - it 'does not flag the class definition with namespace in separate lines' do - expect_no_offenses(<<~SOURCE) - module MyModule + it 'flags a compact class definition without additional namespace' do + expect_offense(<<~SOURCE, namespace: namespace) + class %{namespace}::MyClass + ^{namespace}^^^^^^^^^^^^^^^ #{described_class::MSG} + end + SOURCE + end + + it 'flags a class definition with inheritance without additional namespace' do + expect_offense(namespaced(<<~SOURCE)) class MyClass < ApplicationRecord + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{described_class::MSG} + def some_method + true + end end + SOURCE + end - class MyOtherClass - def other_method - 1 + 1 + it 'does not flag the class definition with namespace in separate lines' do + expect_no_offenses(namespaced(<<~SOURCE)) + module MyModule + class MyClass < ApplicationRecord + end + + class MyOtherClass + def other_method + 1 + 1 + end end end - end - SOURCE - end + SOURCE + end - it 'does not flag the class definition with nested namespace in separate lines' do - expect_no_offenses(<<~SOURCE) - module TopLevelModule - module NestedModule - class MyClass + it 'does not flag the class definition with nested namespace in separate lines' do + expect_no_offenses(namespaced(<<~SOURCE)) + module TopLevelModule + module NestedModule + class MyClass + end end end - end - SOURCE - end + SOURCE + end + + it 'does not flag the class definition nested inside namespaced class' do + expect_no_offenses(namespaced(<<~SOURCE)) + module TopLevelModule + class TopLevelClass + class MyClass + end + end + end + SOURCE + end - it 'does not flag the class definition nested inside namespaced class' do - expect_no_offenses(<<~SOURCE) - module TopLevelModule - class TopLevelClass + it 'does not flag the class definition nested inside compact namespace' do + expect_no_offenses(<<~SOURCE) + module #{namespace}::TopLevelModule class MyClass end end - end - SOURCE + SOURCE + end + + it 'does not flag a compact namespaced class definition' do + expect_no_offenses(namespaced(<<~SOURCE)) + class MyModule::MyClass < ApplicationRecord + end + SOURCE + end + + it 'does not flag a truly compact namespaced class definition' do + expect_no_offenses(<<~SOURCE, namespace: namespace) + class %{namespace}::MyModule::MyClass < ApplicationRecord + end + SOURCE + end end - it 'does not flag a compact namespaced class definition' do - expect_no_offenses(<<~SOURCE) - class MyModule::MyClass < ApplicationRecord - end - SOURCE + context 'without top-level namespace' do + let(:namespace) { nil } + + it_behaves_like 'enforces namespaced classes' + end + + context 'with Gitlab namespace' do + let(:namespace) { 'Gitlab' } + + it_behaves_like 'enforces namespaced classes' + end + + context 'with ::Gitlab namespace' do + let(:namespace) { '::Gitlab' } + + it_behaves_like 'enforces namespaced classes' end end |