diff options
Diffstat (limited to 'spec/rubocop/cop/migration/prevent_strings_spec.rb')
-rw-r--r-- | spec/rubocop/cop/migration/prevent_strings_spec.rb | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/spec/rubocop/cop/migration/prevent_strings_spec.rb b/spec/rubocop/cop/migration/prevent_strings_spec.rb new file mode 100644 index 00000000000..2702ce1c090 --- /dev/null +++ b/spec/rubocop/cop/migration/prevent_strings_spec.rb @@ -0,0 +1,143 @@ +# frozen_string_literal: true + +require 'spec_helper' +require 'rubocop' +require 'rubocop/rspec/support' + +require_relative '../../../../rubocop/cop/migration/prevent_strings' + +describe RuboCop::Cop::Migration::PreventStrings do + include CopHelper + + subject(:cop) { described_class.new } + + context 'in migration' do + before do + allow(cop).to receive(:in_migration?).and_return(true) + end + + context 'when the string data type is used' do + it 'registers an offense' do + expect_offense(<<~RUBY) + class Users < ActiveRecord::Migration[6.0] + DOWNTIME = false + + def up + create_table :users do |t| + t.string :username, null: false + ^^^^^^ #{described_class::MSG} + + t.timestamps_with_timezone null: true + + t.string :password + ^^^^^^ #{described_class::MSG} + end + + add_column(:users, :bio, :string) + ^^^^^^^^^^ #{described_class::MSG} + + add_column_with_default(:users, :url, :string, default: '/-/user', allow_null: false, limit: 255) + ^^^^^^^^^^^^^^^^^^^^^^^ #{described_class::MSG} + + change_column_type_concurrently :users, :commit_id, :string + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{described_class::MSG} + end + end + RUBY + + expect(cop.offenses.map(&:cop_name)).to all(eq('Migration/PreventStrings')) + end + end + + context 'when the string data type is not used' do + it 'registers no offense' do + expect_no_offenses(<<~RUBY) + class Users < ActiveRecord::Migration[6.0] + DOWNTIME = false + + def up + create_table :users do |t| + t.integer :not_a_string, null: false + t.timestamps_with_timezone null: true + end + + add_column(:users, :not_a_string, :integer) + end + end + RUBY + end + end + + context 'when the text data type is used' do + it 'registers no offense' do + expect_no_offenses(<<~RUBY) + class Users < ActiveRecord::Migration[6.0] + DOWNTIME = false + + def up + create_table :users do |t| + t.text :username, null: false + t.timestamps_with_timezone null: true + t.text :password + end + + add_column(:users, :bio, :text) + add_column_with_default(:users, :url, :text, default: '/-/user', allow_null: false, limit: 255) + change_column_type_concurrently :users, :commit_id, :text + end + end + RUBY + end + end + + context 'on down' do + it 'registers no offense' do + expect_no_offenses(<<~RUBY) + class Users < ActiveRecord::Migration[6.0] + DOWNTIME = false + + def up + remove_column :users, :bio + remove_column :users, :url + + drop_table :test_strings + end + + def down + create_table :test_strings, id: false do |t| + t.integer :test_id, null: false + t.string :name + end + + add_column(:users, :bio, :string) + add_column_with_default(:users, :url, :string, default: '/-/user', allow_null: false, limit: 255) + change_column_type_concurrently :users, :commit_id, :string + end + end + RUBY + end + end + end + + context 'outside of migration' do + it 'registers no offense' do + expect_no_offenses(<<~RUBY) + class Users < ActiveRecord::Migration[6.0] + DOWNTIME = false + + def up + create_table :users do |t| + t.string :username, null: false + t.timestamps_with_timezone null: true + t.string :password + end + + add_column(:users, :bio, :string) + add_column_with_default(:users, :url, :string, default: '/-/user', allow_null: false, limit: 255) + change_column_type_concurrently :users, :commit_id, :string + end + end + RUBY + end + end +end |