From a004f9ec8c66ea9dcce0e76e28b0a343437c0b16 Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Fri, 14 Jul 2017 13:19:00 +0200 Subject: Added cop to blacklist the use of hash indexes These indexes are not recorded in the WAL (at least until PostgreSQL 10) and this isn't worth the minor performance improvement over btree indexes. --- spec/rubocop/cop/migration/hash_index_spec.rb | 53 +++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 spec/rubocop/cop/migration/hash_index_spec.rb (limited to 'spec/rubocop/cop/migration') diff --git a/spec/rubocop/cop/migration/hash_index_spec.rb b/spec/rubocop/cop/migration/hash_index_spec.rb new file mode 100644 index 00000000000..9a8576a19e5 --- /dev/null +++ b/spec/rubocop/cop/migration/hash_index_spec.rb @@ -0,0 +1,53 @@ +require 'spec_helper' + +require 'rubocop' +require 'rubocop/rspec/support' + +require_relative '../../../../rubocop/cop/migration/hash_index' + +describe RuboCop::Cop::Migration::HashIndex do + include CopHelper + + subject(:cop) { described_class.new } + + context 'in migration' do + before do + allow(cop).to receive(:in_migration?).and_return(true) + end + + it 'registers an offense when creating a hash index' do + inspect_source(cop, 'def change; add_index :table, :column, using: :hash; end') + + aggregate_failures do + expect(cop.offenses.size).to eq(1) + expect(cop.offenses.map(&:line)).to eq([1]) + end + end + + it 'registers an offense when creating a concurrent hash index' do + inspect_source(cop, 'def change; add_concurrent_index :table, :column, using: :hash; end') + + aggregate_failures do + expect(cop.offenses.size).to eq(1) + expect(cop.offenses.map(&:line)).to eq([1]) + end + end + + it 'registers an offense when creating a hash index using t.index' do + inspect_source(cop, 'def change; t.index :table, :column, using: :hash; end') + + aggregate_failures do + expect(cop.offenses.size).to eq(1) + expect(cop.offenses.map(&:line)).to eq([1]) + end + end + end + + context 'outside of migration' do + it 'registers no offense' do + inspect_source(cop, 'def change; index :table, :column, using: :hash; end') + + expect(cop.offenses.size).to eq(0) + end + end +end -- cgit v1.2.3