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