@@ -112,6 +112,83 @@ def db_migrate_and_schema_dump_and_load(format)
112
112
end
113
113
end
114
114
115
+ def db_migrate_and_schema_dump_and_load_one_database ( format , database )
116
+ Dir . chdir ( app_path ) do
117
+ generate_models_for_animals
118
+ rails "db:migrate:#{ database } " , "db:#{ format } :dump:#{ database } "
119
+
120
+ if format == "schema"
121
+ if database == "primary"
122
+ schema_dump = File . read ( "db/#{ format } .rb" )
123
+ assert_not ( File . exist? ( "db/animals_#{ format } .rb" ) )
124
+ assert_match ( /create_table \" books\" / , schema_dump )
125
+ else
126
+ assert_not ( File . exist? ( "db/#{ format } .rb" ) )
127
+ schema_dump_animals = File . read ( "db/animals_#{ format } .rb" )
128
+ assert_match ( /create_table \" dogs\" / , schema_dump_animals )
129
+ end
130
+ else
131
+ if database == "primary"
132
+ schema_dump = File . read ( "db/#{ format } .sql" )
133
+ assert_not ( File . exist? ( "db/animals_#{ format } .sql" ) )
134
+ assert_match ( /CREATE TABLE (?:IF NOT EXISTS )?\" books\" / , schema_dump )
135
+ else
136
+ assert_not ( File . exist? ( "db/#{ format } .sql" ) )
137
+ schema_dump_animals = File . read ( "db/animals_#{ format } .sql" )
138
+ assert_match ( /CREATE TABLE (?:IF NOT EXISTS )?\" dogs\" / , schema_dump_animals )
139
+ end
140
+ end
141
+
142
+ rails "db:#{ format } :load:#{ database } "
143
+
144
+ ar_tables = lambda { rails ( "runner" , "p ActiveRecord::Base.connection.tables" ) . strip }
145
+ animals_tables = lambda { rails ( "runner" , "p AnimalsBase.connection.tables" ) . strip }
146
+
147
+ if database == "primary"
148
+ assert_equal '["schema_migrations", "ar_internal_metadata", "books"]' , ar_tables [ ]
149
+ assert_equal "[]" , animals_tables [ ]
150
+ else
151
+ assert_equal "[]" , ar_tables [ ]
152
+ assert_equal '["schema_migrations", "ar_internal_metadata", "dogs"]' , animals_tables [ ]
153
+ end
154
+ end
155
+ end
156
+
157
+ def db_test_prepare_spec_name ( spec_name , schema_format )
158
+ add_to_config "config.active_record.schema_format = :#{ schema_format } "
159
+ require "#{ app_path } /config/environment"
160
+
161
+ Dir . chdir ( app_path ) do
162
+ generate_models_for_animals
163
+
164
+ if schema_format == "ruby"
165
+ dump_command = "db:schema:dump:#{ spec_name } "
166
+ else
167
+ dump_command = "db:structure:dump:#{ spec_name } "
168
+ end
169
+
170
+ rails ( "db:migrate:#{ spec_name } " , dump_command )
171
+
172
+ output = rails ( "db:test:prepare:#{ spec_name } " , "--trace" )
173
+ if schema_format == "ruby"
174
+ assert_match ( /Execute db:test:load_schema:#{ spec_name } / , output )
175
+ else
176
+ assert_match ( /Execute db:test:load_structure:#{ spec_name } / , output )
177
+ end
178
+
179
+ ar_tables = lambda { rails ( "runner" , "-e" , "test" , "p ActiveRecord::Base.connection.tables" ) . strip }
180
+ animals_tables = lambda { rails ( "runner" , "-e" , "test" , "p AnimalsBase.connection.tables" ) . strip }
181
+
182
+ if spec_name == "primary"
183
+ assert_equal [ "schema_migrations" , "ar_internal_metadata" , "books" ] . sort , JSON . parse ( ar_tables [ ] ) . sort
184
+ assert_equal "[]" , animals_tables [ ]
185
+ else
186
+ assert_equal "[]" , ar_tables [ ]
187
+ assert_equal [ "schema_migrations" , "ar_internal_metadata" , "dogs" ] . sort , JSON . parse ( animals_tables [ ] ) . sort
188
+ end
189
+ end
190
+ end
191
+
115
192
def db_migrate_namespaced ( namespace )
116
193
Dir . chdir ( app_path ) do
117
194
generate_models_for_animals
@@ -258,6 +335,42 @@ def generate_models_for_animals
258
335
db_migrate_and_schema_dump_and_load "structure"
259
336
end
260
337
338
+ test "db:migrate:spec_name and db:schema:dump:spec_name and db:schema:load:spec_name works for the primary database" do
339
+ require "#{ app_path } /config/environment"
340
+ db_migrate_and_schema_dump_and_load_one_database ( "schema" , "primary" )
341
+ end
342
+
343
+ test "db:migrate:spec_name and db:schema:dump:spec_name and db:schema:load:spec_name works for the animals database" do
344
+ require "#{ app_path } /config/environment"
345
+ db_migrate_and_schema_dump_and_load_one_database ( "schema" , "animals" )
346
+ end
347
+
348
+ test "db:migrate:spec_name and db:structure:dump:spec_name and db:structure:load:spec_name works for the primary database" do
349
+ require "#{ app_path } /config/environment"
350
+ db_migrate_and_schema_dump_and_load_one_database ( "structure" , "primary" )
351
+ end
352
+
353
+ test "db:migrate:spec_name and db:structure:dump:spec_name and db:structure:load:spec_name works for the animals database" do
354
+ require "#{ app_path } /config/environment"
355
+ db_migrate_and_schema_dump_and_load_one_database ( "structure" , "animals" )
356
+ end
357
+
358
+ test "db:test:prepare:spec_name works for the primary database with a ruby schema" do
359
+ db_test_prepare_spec_name ( "primary" , "ruby" )
360
+ end
361
+
362
+ test "db:test:prepare:spec_name works for the animals database with a ruby schema" do
363
+ db_test_prepare_spec_name ( "animals" , "ruby" )
364
+ end
365
+
366
+ test "db:test:prepare:spec_name works for the primary database with a sql schema" do
367
+ db_test_prepare_spec_name ( "primary" , "sql" )
368
+ end
369
+
370
+ test "db:test:prepare:spec_name works for the animals database with a sql schema" do
371
+ db_test_prepare_spec_name ( "animals" , "sql" )
372
+ end
373
+
261
374
test "db:migrate:namespace works" do
262
375
require "#{ app_path } /config/environment"
263
376
ActiveRecord ::Base . configurations . configs_for ( env_name : Rails . env ) . each do |db_config |
0 commit comments