lib/gumboot/shared_examples/database_schema.rb in aaf-gumboot-1.0.0.pre.alpha.2 vs lib/gumboot/shared_examples/database_schema.rb in aaf-gumboot-1.1.0

- old
+ new

@@ -1,5 +1,7 @@ +# frozen_string_literal: true + RSpec.shared_examples 'Database Schema' do context 'AAF shared implementation' do RSpec::Matchers.define :have_collation do |expected, name| match { |actual| actual[:Collation] == expected } @@ -22,20 +24,28 @@ it 'has the correct collation set for the connection' do expect(connection.query_options).to include(collation: 'utf8_bin') end it 'has the correct collation' do + exemptions = defined?(collation_exemptions) ? collation_exemptions : [] + db_collation = query('SHOW VARIABLES LIKE "collation_database"') .first[:Value] expect(db_collation).to eq('utf8_bin') query('SHOW TABLE STATUS').each do |table| table_name = table[:Name] next if table_name == 'schema_migrations' expect(table).to have_collation('utf8_bin', "`#{table_name}`") - query("SHOW FULL COLUMNS FROM #{table[:Name]}").each do |column| + query("SHOW FULL COLUMNS FROM #{table_name}").each do |column| next unless column[:Collation] + next if exemptions.any? do |except_table, except_columns| + except_table == table_name.to_sym && + except_columns.any? do |except_column| + except_column == column[:Field].to_sym + end + end expect(column) .to have_collation('utf8_bin', " `#{table_name}`.`#{column[:Field]}`") end end