Fixed automatic maintaining test schema to properly handle sql structure schema format.
Additionally: * It changes `purge` task on `sqlite3` adapter to recreate database file, to be consistent with other adapters. * Adds `purge` step when loading from `schema.rb`
This commit is contained in:
parent
df6dc1b51a
commit
ad42aaed04
@ -1,3 +1,8 @@
|
||||
* Fixed automatic maintaining test schema to properly handle sql structure
|
||||
schema format. Fixes #15394.
|
||||
|
||||
*Wojciech Wnętrzak*
|
||||
|
||||
* PostgreSQL support default values for enum types. Fixes #7814.
|
||||
|
||||
*Yves Senn*
|
||||
|
@ -161,10 +161,12 @@ def load_schema(format = ActiveRecord::Base.schema_format, file = nil)
|
||||
when :ruby
|
||||
file ||= File.join(db_dir, "schema.rb")
|
||||
check_schema_file(file)
|
||||
purge(current_config)
|
||||
load(file)
|
||||
when :sql
|
||||
file ||= File.join(db_dir, "structure.sql")
|
||||
check_schema_file(file)
|
||||
purge(current_config)
|
||||
structure_load(current_config, file)
|
||||
else
|
||||
raise ArgumentError, "unknown format #{format.inspect}"
|
||||
|
@ -21,7 +21,11 @@ def drop
|
||||
|
||||
FileUtils.rm(file) if File.exist?(file)
|
||||
end
|
||||
alias :purge :drop
|
||||
|
||||
def purge
|
||||
drop
|
||||
create
|
||||
end
|
||||
|
||||
def charset
|
||||
connection.encoding
|
||||
|
@ -125,12 +125,12 @@ class UserTest < ActiveSupport::TestCase
|
||||
|
||||
assert_unsuccessful_run "models/user_test.rb", "Migrations are pending"
|
||||
|
||||
app_file 'db/structure.sql', <<-RUBY
|
||||
app_file 'db/structure.sql', <<-SQL
|
||||
CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
|
||||
CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
|
||||
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255));
|
||||
INSERT INTO schema_migrations (version) VALUES ('#{version}');
|
||||
RUBY
|
||||
SQL
|
||||
|
||||
app_file 'config/initializers/disable_maintain_test_schema.rb', <<-RUBY
|
||||
Rails.application.config.active_record.maintain_test_schema = false
|
||||
@ -143,6 +143,56 @@ class UserTest < ActiveSupport::TestCase
|
||||
assert_successful_test_run('models/user_test.rb')
|
||||
end
|
||||
|
||||
test "sql structure migrations when adding column to existing table" do
|
||||
output_1 = script('generate model user name:string')
|
||||
version_1 = output_1.match(/(\d+)_create_users\.rb/)[1]
|
||||
|
||||
app_file 'test/models/user_test.rb', <<-RUBY
|
||||
require 'test_helper'
|
||||
class UserTest < ActiveSupport::TestCase
|
||||
test "user" do
|
||||
User.create! name: "Jon"
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
|
||||
app_file 'config/initializers/enable_sql_schema_format.rb', <<-RUBY
|
||||
Rails.application.config.active_record.schema_format = :sql
|
||||
RUBY
|
||||
|
||||
app_file 'db/structure.sql', <<-SQL
|
||||
CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
|
||||
CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
|
||||
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255));
|
||||
INSERT INTO schema_migrations (version) VALUES ('#{version_1}');
|
||||
SQL
|
||||
|
||||
assert_successful_test_run('models/user_test.rb')
|
||||
|
||||
output_2 = script('generate migration add_email_to_users')
|
||||
version_2 = output_2.match(/(\d+)_add_email_to_users\.rb/)[1]
|
||||
|
||||
app_file 'test/models/user_test.rb', <<-RUBY
|
||||
require 'test_helper'
|
||||
|
||||
class UserTest < ActiveSupport::TestCase
|
||||
test "user" do
|
||||
User.create! name: "Jon", email: "jon@doe.com"
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
|
||||
app_file 'db/structure.sql', <<-SQL
|
||||
CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
|
||||
CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
|
||||
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "email" varchar(255));
|
||||
INSERT INTO schema_migrations (version) VALUES ('#{version_1}');
|
||||
INSERT INTO schema_migrations (version) VALUES ('#{version_2}');
|
||||
SQL
|
||||
|
||||
assert_successful_test_run('models/user_test.rb')
|
||||
end
|
||||
|
||||
private
|
||||
def assert_unsuccessful_run(name, message)
|
||||
result = run_test_file(name)
|
||||
|
Loading…
Reference in New Issue
Block a user