From 481141e737493adb1c1de4d0745e16e779e5a3a4 Mon Sep 17 00:00:00 2001 From: Andrei Kaleshka Date: Fri, 3 May 2024 00:48:23 +0200 Subject: [PATCH] try tests fix --- .../migrate_secondary/.keep} | 0 test/dummy_app/db/secondary_schema.rb | 2 +- test/rake_task_secondary_test.rb | 85 +++++++++++++++++++ test/rake_task_test.rb | 6 +- test/test_helper.rb | 18 ++-- 5 files changed, 99 insertions(+), 12 deletions(-) rename test/dummy_app/{config/database.yml => db/migrate_secondary/.keep} (100%) create mode 100644 test/rake_task_secondary_test.rb diff --git a/test/dummy_app/config/database.yml b/test/dummy_app/db/migrate_secondary/.keep similarity index 100% rename from test/dummy_app/config/database.yml rename to test/dummy_app/db/migrate_secondary/.keep diff --git a/test/dummy_app/db/secondary_schema.rb b/test/dummy_app/db/secondary_schema.rb index 03e704f..2deffcd 100644 --- a/test/dummy_app/db/secondary_schema.rb +++ b/test/dummy_app/db/secondary_schema.rb @@ -10,5 +10,5 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2013_09_06_111512) do +ActiveRecord::Schema[7.0].define(version: 2013_09_06_111512) do end diff --git a/test/rake_task_secondary_test.rb b/test/rake_task_secondary_test.rb new file mode 100644 index 0000000..ec84738 --- /dev/null +++ b/test/rake_task_secondary_test.rb @@ -0,0 +1,85 @@ +# frozen_string_literal: true + +require "test_helper" + +describe "multiple databases support" do + let(:utils) do + TestUtils.new(migrations_path: "db/migrate_secondary", migrated_path: "tmp/migrated_migrate_secondary") + end + + before do + ActiveRecord::Tasks::DatabaseTasks.database_configuration = { "test" => TestingState.db_config["secondary"] } + ActiveRecord::Base.establish_connection(**TestingState.db_config["secondary"]) + utils.cleanup + end + + describe "db:rollback_branches" do + it "creates the tmp/migrated_migrate_secondary folder" do + refute File.exist?(utils.app_file("tmp/migrated_migrate_secondary")) + utils.run_migrations + assert File.exist?(utils.app_file("tmp/migrated_migrate_secondary")) + end + + it "migrates the migrations" do + assert_empty utils.applied_migrations + utils.run_migrations + assert_equal %w[20130906111511 20130906111512], utils.applied_migrations + end + + it "keeps migrated migrations in tmp/migrated folder" do + utils.run_migrations + assert_equal %w[20130906111511_first.rb 20130906111512_second.rb], utils.migrated_files + end + + it "rolls back the migrations in the reversed order" do + utils.prepare_phantom_migrations + assert_empty TestingState.down + utils.run_migrations + assert_equal %i[second first], TestingState.down + end + + describe "with irreversible migration" do + before do + utils.define_migration_file("20130906111513_irreversible.rb", <<~RUBY) + class Irreversible < ActiveRecord::Migration[6.0] + def up + TestingState.up << :irreversible + end + + def down + raise ActiveRecord::IrreversibleMigration + end + end + RUBY + end + + it "keeps track of the irreversible migrations" do + utils.prepare_phantom_migrations + assert_equal %i[first second irreversible], TestingState.up + assert_empty ActualDbSchema.failed + utils.run_migrations + assert_equal(%w[20130906111513_irreversible.rb], ActualDbSchema.failed.map { |m| File.basename(m.filename) }) + end + end + end + + describe "db:phantom_migrations" do + it "shows the list of phantom migrations" do + ActualDbSchema::Git.stub(:current_branch, "fix-bug") do + utils.prepare_phantom_migrations + Rake::Task["db:phantom_migrations"].invoke + Rake::Task["db:phantom_migrations"].reenable + assert_match(/ Status Migration ID Branch Migration File/, TestingState.output) + assert_match(/---------------------------------------------------/, TestingState.output) + assert_match( + %r{ up 20130906111511 fix-bug tmp/migrated_migrate_secondary/20130906111511_first.rb}, + TestingState.output + ) + assert_match( + %r{ up 20130906111512 fix-bug tmp/migrated_migrate_secondary/20130906111512_second.rb}, + TestingState.output + ) + end + end + end +end diff --git a/test/rake_task_test.rb b/test/rake_task_test.rb index 2311577..395173b 100644 --- a/test/rake_task_test.rb +++ b/test/rake_task_test.rb @@ -5,7 +5,11 @@ describe "single db" do let(:utils) { TestUtils.new } - before { utils.cleanup } + before do + ActiveRecord::Tasks::DatabaseTasks.database_configuration = { "test" => TestingState.db_config["primary"] } + ActiveRecord::Base.establish_connection(**TestingState.db_config["primary"]) + utils.cleanup + end describe "db:rollback_branches" do it "creates the tmp/migrated folder" do diff --git a/test/test_helper.rb b/test/test_helper.rb index 67c1e6b..0d9758b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -32,14 +32,15 @@ def self.reset def self.db_config { - primary: { - adapter: "sqlite3", - database: "tmp/primary.sqlite3" + "primary" => { + "adapter" => "sqlite3", + "database" => "tmp/primary.sqlite3", + "migrations_paths" => Rails.root.join("db", "migrate").to_s }, - secondary: { - adapter: "sqlite3", - database: "tmp/secondary.sqlite3", - migrations_paths: Rails.root.join("db", "migrate_secondary").to_s + "secondary" => { + "adapter" => "sqlite3", + "database" => "tmp/secondary.sqlite3", + "migrations_paths" => Rails.root.join("db", "migrate_secondary").to_s } } end @@ -47,9 +48,6 @@ def self.db_config reset end -ActiveRecord::Tasks::DatabaseTasks.database_configuration = { test: TestingState.db_config } -ActiveRecord::Base.establish_connection(**TestingState.db_config.fetch(:primary)) - ActualDbSchema.config[:enabled] = true module Kernel