@@ -67,7 +67,7 @@ def test_failure
6767 assert_match %r{/app/test/unit/failing_test\. rb} , output
6868 end
6969
70- test "migrations" do
70+ test "ruby schema migrations" do
7171 output = script ( 'generate model user name:string' )
7272 version = output . match ( /(\d +)_create_users\. rb/ ) [ 1 ]
7373
@@ -104,6 +104,95 @@ class UserTest < ActiveSupport::TestCase
104104 assert !result . include? ( "create_table(:users)" )
105105 end
106106
107+ test "sql structure migrations" do
108+ output = script ( 'generate model user name:string' )
109+ version = output . match ( /(\d +)_create_users\. rb/ ) [ 1 ]
110+
111+ app_file 'test/models/user_test.rb' , <<-RUBY
112+ require 'test_helper'
113+
114+ class UserTest < ActiveSupport::TestCase
115+ test "user" do
116+ User.create! name: "Jon"
117+ end
118+ end
119+ RUBY
120+
121+ app_file 'db/structure.sql' , ''
122+ app_file 'config/initializers/enable_sql_schema_format.rb' , <<-RUBY
123+ Rails.application.config.active_record.schema_format = :sql
124+ RUBY
125+
126+ assert_unsuccessful_run "models/user_test.rb" , "Migrations are pending"
127+
128+ app_file 'db/structure.sql' , <<-SQL
129+ CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
130+ CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
131+ CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255));
132+ INSERT INTO schema_migrations (version) VALUES ('#{ version } ');
133+ SQL
134+
135+ app_file 'config/initializers/disable_maintain_test_schema.rb' , <<-RUBY
136+ Rails.application.config.active_record.maintain_test_schema = false
137+ RUBY
138+
139+ assert_unsuccessful_run "models/user_test.rb" , "Could not find table 'users'"
140+
141+ File . delete "#{ app_path } /config/initializers/disable_maintain_test_schema.rb"
142+
143+ assert_successful_test_run ( 'models/user_test.rb' )
144+ end
145+
146+ test "sql structure migrations when adding column to existing table" do
147+ output_1 = script ( 'generate model user name:string' )
148+ version_1 = output_1 . match ( /(\d +)_create_users\. rb/ ) [ 1 ]
149+
150+ app_file 'test/models/user_test.rb' , <<-RUBY
151+ require 'test_helper'
152+ class UserTest < ActiveSupport::TestCase
153+ test "user" do
154+ User.create! name: "Jon"
155+ end
156+ end
157+ RUBY
158+
159+ app_file 'config/initializers/enable_sql_schema_format.rb' , <<-RUBY
160+ Rails.application.config.active_record.schema_format = :sql
161+ RUBY
162+
163+ app_file 'db/structure.sql' , <<-SQL
164+ CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
165+ CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
166+ CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255));
167+ INSERT INTO schema_migrations (version) VALUES ('#{ version_1 } ');
168+ SQL
169+
170+ assert_successful_test_run ( 'models/user_test.rb' )
171+
172+ output_2 = script ( 'generate migration add_email_to_users' )
173+ version_2 = output_2 . match ( /(\d +)_add_email_to_users\. rb/ ) [ 1 ]
174+
175+ app_file 'test/models/user_test.rb' , <<-RUBY
176+ require 'test_helper'
177+
178+ class UserTest < ActiveSupport::TestCase
179+ test "user" do
180+ User.create! name: "Jon", email: "jon@doe.com"
181+ end
182+ end
183+ RUBY
184+
185+ app_file 'db/structure.sql' , <<-SQL
186+ CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
187+ CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
188+ CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "email" varchar(255));
189+ INSERT INTO schema_migrations (version) VALUES ('#{ version_1 } ');
190+ INSERT INTO schema_migrations (version) VALUES ('#{ version_2 } ');
191+ SQL
192+
193+ assert_successful_test_run ( 'models/user_test.rb' )
194+ end
195+
107196 private
108197 def assert_unsuccessful_run ( name , message )
109198 result = run_test_file ( name )
0 commit comments