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/todo_dir_spec.rb')
-rw-r--r--spec/rubocop/todo_dir_spec.rb218
1 files changed, 218 insertions, 0 deletions
diff --git a/spec/rubocop/todo_dir_spec.rb b/spec/rubocop/todo_dir_spec.rb
new file mode 100644
index 00000000000..ae59def885d
--- /dev/null
+++ b/spec/rubocop/todo_dir_spec.rb
@@ -0,0 +1,218 @@
+# frozen_string_literal: true
+
+require 'fast_spec_helper'
+require 'fileutils'
+require 'active_support/inflector/inflections'
+
+require_relative '../../rubocop/todo_dir'
+
+RSpec.describe RuboCop::TodoDir do
+ let(:todo_dir) { described_class.new(directory) }
+ let(:directory) { Dir.mktmpdir }
+ let(:cop_name) { 'RSpec/VariableInstance' }
+ let(:cop_name_underscore) { ActiveSupport::Inflector.underscore(cop_name) }
+ let(:yaml_path) { "#{File.join(directory, cop_name_underscore)}.yml" }
+
+ around do |example|
+ Dir.chdir(directory) do
+ example.run
+ end
+ end
+
+ after do
+ FileUtils.remove_entry(directory)
+ end
+
+ describe '#initialize' do
+ context 'when passing inflector' do
+ let(:fake_inflector) { double(:inflector) } # rubocop:disable RSpec/VerifiedDoubles
+ let(:todo_dir) { described_class.new(directory, inflector: fake_inflector) }
+
+ before do
+ allow(fake_inflector).to receive(:underscore)
+ .with(cop_name)
+ .and_return(cop_name_underscore)
+ end
+
+ it 'calls .underscore' do
+ todo_dir.write(cop_name, 'a')
+
+ expect(fake_inflector).to have_received(:underscore)
+ end
+ end
+ end
+
+ describe '#directory' do
+ subject { todo_dir.directory }
+
+ it { is_expected.to eq(directory) }
+ end
+
+ describe '#read' do
+ let(:content) { 'a' }
+
+ subject { todo_dir.read(cop_name) }
+
+ context 'when file exists' do
+ before do
+ todo_dir.write(cop_name, content)
+ end
+
+ it { is_expected.to eq(content) }
+ end
+
+ context 'when file is missing' do
+ it { is_expected.to be_nil }
+ end
+ end
+
+ describe '#write' do
+ let(:content) { 'a' }
+
+ subject { todo_dir.write(cop_name, content) }
+
+ it { is_expected.to eq(yaml_path) }
+
+ it 'writes content to YAML file' do
+ subject
+
+ expect(File.read(yaml_path)).to eq(content)
+ end
+ end
+
+ describe '#inspect' do
+ subject { todo_dir.inspect(cop_name) }
+
+ context 'with existing YAML file' do
+ before do
+ todo_dir.write(cop_name, 'a')
+ end
+
+ it { is_expected.to eq(true) }
+
+ it 'moves YAML file to .inspect' do
+ subject
+
+ expect(File).not_to exist(yaml_path)
+ expect(File).to exist("#{yaml_path}.inspect")
+ end
+ end
+
+ context 'with missing YAML file' do
+ it { is_expected.to eq(false) }
+ end
+ end
+
+ describe '#inspect_all' do
+ subject { todo_dir.inspect_all }
+
+ context 'with YAML files' do
+ before do
+ todo_dir.write(cop_name, 'a')
+ todo_dir.write('Other/Rule', 'a')
+ todo_dir.write('Very/Nested/Rule', 'a')
+ end
+
+ it { is_expected.to eq(3) }
+
+ it 'moves all YAML files to .inspect' do
+ subject
+
+ expect(Dir.glob('**/*.yml')).to be_empty
+ expect(Dir.glob('**/*.yml.inspect').size).to eq(3)
+ end
+ end
+
+ context 'with non-YAML files' do
+ before do
+ File.write('file', 'a')
+ File.write('file.txt', 'a')
+ File.write('file.yaml', 'a') # not .yml
+ end
+
+ it { is_expected.to eq(0) }
+
+ it 'does not move non-YAML files' do
+ subject
+
+ expect(Dir.glob('**/*'))
+ .to contain_exactly('file', 'file.txt', 'file.yaml')
+ end
+ end
+
+ context 'without files' do
+ it { is_expected.to eq(0) }
+ end
+ end
+
+ describe '#list_inspect' do
+ let(:content) { 'a' }
+
+ subject { todo_dir.list_inspect }
+
+ context 'when file exists and is being inspected' do
+ before do
+ todo_dir.write(cop_name, content)
+ todo_dir.inspect_all
+ end
+
+ it do
+ is_expected.to contain_exactly("#{yaml_path}.inspect")
+ end
+ end
+
+ context 'when file exists but not being inspected' do
+ before do
+ todo_dir.write(cop_name, content)
+ end
+
+ it { is_expected.to be_empty }
+ end
+
+ context 'when file is missing' do
+ it { is_expected.to be_empty }
+ end
+ end
+
+ describe '#delete_inspected' do
+ subject { todo_dir.delete_inspected }
+
+ context 'with YAML files' do
+ before do
+ todo_dir.write(cop_name, 'a')
+ todo_dir.write('Other/Rule', 'a')
+ todo_dir.write('Very/Nested/Rule', 'a')
+ todo_dir.inspect_all
+ end
+
+ it { is_expected.to eq(3) }
+
+ it 'deletes all .inspected YAML files' do
+ subject
+
+ expect(Dir.glob('**/*.yml.inspect')).to be_empty
+ end
+ end
+
+ context 'with non-YAML files' do
+ before do
+ File.write('file.inspect', 'a')
+ File.write('file.txt.inspect', 'a')
+ File.write('file.yaml.inspect', 'a') # not .yml
+ end
+
+ it { is_expected.to eq(0) }
+
+ it 'does not delete non-YAML files' do
+ subject
+
+ expect(Dir.glob('**/*')).to contain_exactly(
+ 'file.inspect', 'file.txt.inspect', 'file.yaml.inspect')
+ end
+ end
+
+ context 'without files' do
+ it { is_expected.to eq(0) }
+ end
+ end
+end