mirror of
https://github.com/manyfold3d/manyfold.git
synced 2026-10-21 19:22:18 -05:00
50 lines
1.9 KiB
Ruby
50 lines
1.9 KiB
Ruby
# Helper methods for running migrations
|
|
# This is a little more complex than it would be using plain ActiveRecord migrations,
|
|
# because we also have DataMigrate in the mix.
|
|
|
|
RSpec.shared_context "with migration helpers" do
|
|
let(:data_migration_context) { DataMigrate::MigrationContext.new }
|
|
let(:migration_context) { ActiveRecord::MigrationContext.new(ActiveRecord::Migrator.migrations_paths) }
|
|
|
|
def migrate(to: nil, from: nil)
|
|
# Work out which migrations we're going to run
|
|
version = to&.to_i || from&.to_i
|
|
raise ArgumentError.new("you must specify to: or from:") if version.nil?
|
|
all_versions = (migration_context.pending_migration_versions + data_migration_context.pending_migration_versions).sort
|
|
before, after = all_versions.partition { |i| i <= version.to_i }
|
|
migrations = to ? before : after
|
|
# Run them each in turn
|
|
ActiveRecord::Migration.suppress_messages do
|
|
migrations.each do |migration|
|
|
migration_context.migrate migration
|
|
rescue ActiveRecord::UnknownMigrationVersionError
|
|
data_migration_context.migrate migration
|
|
end
|
|
end
|
|
end
|
|
|
|
def load_sql(version)
|
|
queries = File.read("spec/fixtures/migrations/#{version}.sql")
|
|
queries.split(";").compact_blank.each { |it| ActiveRecord::Base.connection.execute(it) }
|
|
end
|
|
end
|
|
|
|
# Setup for migration tests
|
|
|
|
RSpec.configure do |config|
|
|
config.include_context "with migration helpers", :migration
|
|
config.around(:each, :migration) do |example|
|
|
# Setup
|
|
FileUtils.rm(Rails.root.glob(database + "*"), force: true)
|
|
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: database)
|
|
ActiveRecord::Base.descendants.each(&:reset_column_information)
|
|
DataMigrate::DataMigrator.create_data_schema_table
|
|
# Run
|
|
example.run
|
|
# Teardown
|
|
ActiveRecord::Base.connection.close
|
|
ActiveRecord::Base.establish_connection(:test)
|
|
ActiveRecord::Base.descendants.each(&:reset_column_information)
|
|
end
|
|
end
|