aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--spec/db/schema_spec.rb33
1 files changed, 26 insertions, 7 deletions
diff --git a/spec/db/schema_spec.rb b/spec/db/schema_spec.rb
index 8111988ee..0e0fe780a 100644
--- a/spec/db/schema_spec.rb
+++ b/spec/db/schema_spec.rb
@@ -1,21 +1,40 @@
RSpec.describe ActiveRecord::Schema do
it "uses type `bigint` for primary and foreign keys" do
- non_bigint_primary_keys = []
- non_bigint_foreign_keys = []
+ expect('db/schema.rb').to use_bigint_keys
+ end
+end
+
+
+RSpec::Matchers.define :use_bigint_keys do
+ match do |filename|
+ @non_bigint_primary_keys = []
+ @non_bigint_foreign_keys = []
- File.open('db/schema.rb', 'r') do |f|
- non_bigint_primary_keys = f
+ File.open(filename, 'r') do |f|
+ @non_bigint_primary_keys = f
.grep(/create_table /)
.grep_v(/id: :bigserial/)
f.rewind
- non_bigint_foreign_keys = f
+ @non_bigint_foreign_keys = f
.grep(/t\.integer +"\w+_id"/)
.grep_v(/limit: 8/)
end
- expect(non_bigint_primary_keys).to be_empty
- expect(non_bigint_foreign_keys).to be_empty
+ @non_bigint_primary_keys.empty? && @non_bigint_foreign_keys.empty?
+ end
+
+ failure_message do |filename|
+ <<~EOS
+ expected #{filename.inspect} to use bigint keys
+ Diff: #{diff}
+ EOS
+ end
+
+ def diff
+ RSpec::Support::Differ.new(
+ color: RSpec::Matchers.configuration.color?
+ ).diff(@non_bigint_primary_keys + @non_bigint_foreign_keys, [])
end
end