Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-05-19 10:33:21 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-05-19 10:33:21 +0300
commit36a59d088eca61b834191dacea009677a96c052f (patch)
treee4f33972dab5d8ef79e3944a9f403035fceea43f /spec/rubocop/cop/gitlab/namespaced_class_spec.rb
parenta1761f15ec2cae7c7f7bbda39a75494add0dfd6f (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.rb143
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