12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # require all database migrations so we can test them without manual require
- Rails.root.join('db', 'migrate').children.each do |migration|
- require migration.to_s
- end
- module DbMigrationHelper
- # Provides a helper method to execute a migration for the current class.
- # Make sure to define type: :db_migration in your RSpec.describe call.
- #
- # @param [Symbol] direction the migration should take (:up or :down)
- # @yield [instance] Yields the created instance of the
- # migration to allow expectations or other changes to it
- #
- # @example
- # migrate
- # @example
- # migrate(:down)
- #
- # @return [nil]
- def migrate(direction = :up)
- instance = described_class.new
- yield(instance) if block_given?
- instance.suppress_messages do
- instance.migrate(direction)
- end
- end
- def self.included(base)
- # Execute in RSpec class context
- base.class_exec do
- # This method simulates a system that is is already initialized
- # aka `Setting.exists?(name: 'system_init_done')`
- # It's possible to simulate a not yet initialized system by adding the
- # meta tag `system_init_done` to `false` to the needing example:
- #
- # @example
- # it 'does stuff in an unitialized system', system_init_done: false do
- #
- before(:each) do |example|
- initialized = example.metadata.fetch(:system_init_done, true)
- system_init_done(initialized)
- end
- end
- end
- end
- RSpec.configure do |config|
- config.include DbMigrationHelper, type: :db_migration
- end
|