diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-18 10:34:06 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-18 10:34:06 +0000 |
commit | 859a6fb938bb9ee2a317c46dfa4fcc1af49608f0 (patch) | |
tree | d7f2700abe6b4ffcb2dcfc80631b2d87d0609239 /spec/rubocop/cop/gitlab/predicate_memoization_spec.rb | |
parent | 446d496a6d000c73a304be52587cd9bbc7493136 (diff) | |
download | gitlab-ce-859a6fb938bb9ee2a317c46dfa4fcc1af49608f0.tar.gz |
Add latest changes from gitlab-org/gitlab@13-9-stable-eev13.9.0-rc42
Diffstat (limited to 'spec/rubocop/cop/gitlab/predicate_memoization_spec.rb')
-rw-r--r-- | spec/rubocop/cop/gitlab/predicate_memoization_spec.rb | 74 |
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 |