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:
Diffstat (limited to 'spec/rubocop/cop/gitlab/predicate_memoization_spec.rb')
-rw-r--r--spec/rubocop/cop/gitlab/predicate_memoization_spec.rb74
1 files changed, 32 insertions, 42 deletions
diff --git a/spec/rubocop/cop/gitlab/predicate_memoization_spec.rb b/spec/rubocop/cop/gitlab/predicate_memoization_spec.rb
index 322c7c82968..071ddcf8b7d 100644
--- a/spec/rubocop/cop/gitlab/predicate_memoization_spec.rb
+++ b/spec/rubocop/cop/gitlab/predicate_memoization_spec.rb
@@ -2,55 +2,38 @@
require 'fast_spec_helper'
require 'rubocop'
-require 'rubocop/rspec/support'
require_relative '../../../../rubocop/cop/gitlab/predicate_memoization'
RSpec.describe RuboCop::Cop::Gitlab::PredicateMemoization do
- include CopHelper
-
subject(:cop) { described_class.new }
- shared_examples('registering offense') do |options|
- let(:offending_lines) { options[:offending_lines] }
-
- it 'registers an offense when a predicate method is memoizing via ivar' do
- inspect_source(source)
-
- aggregate_failures do
- expect(cop.offenses.size).to eq(offending_lines.size)
- expect(cop.offenses.map(&:line)).to eq(offending_lines)
- end
- end
- end
-
shared_examples('not registering offense') do
it 'does not register offenses' do
- inspect_source(source)
-
- expect(cop.offenses).to be_empty
+ expect_no_offenses(source)
end
end
- context 'when source is a predicate method memoizing via ivar' do
- it_behaves_like 'registering offense', offending_lines: [3] do
+ context 'when source is a predicate method using ivar with assignment' do
+ it_behaves_like 'not registering offense' do
let(:source) do
<<~RUBY
class C
def really?
- @really ||= true
+ @really = true
end
end
RUBY
end
end
+ end
- it_behaves_like 'registering offense', offending_lines: [4] do
+ context 'when source is a predicate method using local with ||=' do
+ it_behaves_like 'not registering offense' do
let(:source) do
<<~RUBY
class C
def really?
- value = true
- @really ||= value
+ really ||= true
end
end
RUBY
@@ -58,13 +41,13 @@ RSpec.describe RuboCop::Cop::Gitlab::PredicateMemoization do
end
end
- context 'when source is a predicate method using ivar with assignment' do
+ context 'when source is a regular method memoizing via ivar' do
it_behaves_like 'not registering offense' do
let(:source) do
<<~RUBY
class C
- def really?
- @really = true
+ def really
+ @really ||= true
end
end
RUBY
@@ -72,30 +55,37 @@ RSpec.describe RuboCop::Cop::Gitlab::PredicateMemoization do
end
end
- context 'when source is a predicate method using local with ||=' do
- it_behaves_like 'not registering offense' do
- let(:source) do
- <<~RUBY
+ context 'when source is a predicate method memoizing via ivar' do
+ let(:msg) { "Avoid using `@value ||= query` [...]" }
+
+ context 'when assigning to boolean' do
+ it 'registers an offense' do
+ node = "@really ||= true"
+
+ expect_offense(<<~CODE, node: node, msg: msg)
class C
def really?
- really ||= true
+ %{node}
+ ^{node} %{msg}
end
end
- RUBY
+ CODE
end
end
- end
- context 'when source is a regular method memoizing via ivar' do
- it_behaves_like 'not registering offense' do
- let(:source) do
- <<~RUBY
+ context 'when assigning to another variable that is a boolean' do
+ it 'registers an offense' do
+ node = "@really ||= value"
+
+ expect_offense(<<~CODE, node: node, msg: msg)
class C
- def really
- @really ||= true
+ def really?
+ value = true
+ %{node}
+ ^{node} %{msg}
end
end
- RUBY
+ CODE
end
end
end