fourthbase 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.travis.yml +24 -0
  4. data/.yardopts +1 -0
  5. data/Appraisals +19 -0
  6. data/CHANGELOG.md +37 -0
  7. data/Gemfile +2 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +191 -0
  10. data/Rakefile +24 -0
  11. data/VERSION +1 -0
  12. data/fourthbase.gemspec +25 -0
  13. data/gemfiles/rails40.gemfile +8 -0
  14. data/gemfiles/rails41.gemfile +8 -0
  15. data/gemfiles/rails42.gemfile +8 -0
  16. data/gemfiles/rails50.gemfile +8 -0
  17. data/lib/fourth_base.rb +20 -0
  18. data/lib/fourth_base/base.rb +8 -0
  19. data/lib/fourth_base/databases.rake +121 -0
  20. data/lib/fourth_base/databases_rails_five.rake +22 -0
  21. data/lib/fourth_base/databases_rails_four.rake +22 -0
  22. data/lib/fourth_base/forced.rb +21 -0
  23. data/lib/fourth_base/on_base.rb +36 -0
  24. data/lib/fourth_base/railtie.rb +52 -0
  25. data/lib/fourth_base/test_help.rb +11 -0
  26. data/lib/fourth_base/version.rb +3 -0
  27. data/lib/fourthbase.rb +1 -0
  28. data/lib/rails/fourth_base/generators/migration_generator.rb +25 -0
  29. data/test/cases/dbtask_test.rb +248 -0
  30. data/test/cases/forced_test.rb +49 -0
  31. data/test/cases/generator_test.rb +64 -0
  32. data/test/cases/on_base_test.rb +35 -0
  33. data/test/cases/railtie_test.rb +31 -0
  34. data/test/cases/rake_test.rb +0 -0
  35. data/test/dummy_apps/rails_five/Rakefile +2 -0
  36. data/test/dummy_apps/rails_five/app/controllers/application_controller.rb +7 -0
  37. data/test/dummy_apps/rails_five/app/helpers/application_helper.rb +3 -0
  38. data/test/dummy_apps/rails_five/app/models/application_record.rb +3 -0
  39. data/test/dummy_apps/rails_five/app/models/comment.rb +6 -0
  40. data/test/dummy_apps/rails_five/app/models/comment_forced.rb +6 -0
  41. data/test/dummy_apps/rails_five/app/models/post.rb +7 -0
  42. data/test/dummy_apps/rails_five/app/models/user.rb +6 -0
  43. data/test/dummy_apps/rails_five/bin/rails +5 -0
  44. data/test/dummy_apps/rails_five/config/database.yml +13 -0
  45. data/test/dummy_apps/rails_five/config/routes.rb +3 -0
  46. data/test/dummy_apps/rails_five/db/migrate/20141209165002_create_users.rb +11 -0
  47. data/test/dummy_apps/rails_five/db/migrate/20141214142700_create_posts.rb +12 -0
  48. data/test/dummy_apps/rails_five/db/secondbase/migrate/20151202075826_create_comments.rb +11 -0
  49. data/test/dummy_apps/rails_five/init.rb +42 -0
  50. data/test/dummy_apps/rails_five/log/.keep +0 -0
  51. data/test/dummy_apps/rails_five/tmp/.keep +0 -0
  52. data/test/dummy_apps/rails_four/Rakefile +2 -0
  53. data/test/dummy_apps/rails_four/app/controllers/application_controller.rb +7 -0
  54. data/test/dummy_apps/rails_four/app/helpers/application_helper.rb +3 -0
  55. data/test/dummy_apps/rails_four/app/models/comment.rb +6 -0
  56. data/test/dummy_apps/rails_four/app/models/comment_forced.rb +6 -0
  57. data/test/dummy_apps/rails_four/app/models/post.rb +7 -0
  58. data/test/dummy_apps/rails_four/app/models/user.rb +6 -0
  59. data/test/dummy_apps/rails_four/bin/rails +5 -0
  60. data/test/dummy_apps/rails_four/config/database.yml +14 -0
  61. data/test/dummy_apps/rails_four/config/routes.rb +3 -0
  62. data/test/dummy_apps/rails_four/db/migrate/20141209165002_create_users.rb +11 -0
  63. data/test/dummy_apps/rails_four/db/migrate/20141214142700_create_posts.rb +12 -0
  64. data/test/dummy_apps/rails_four/db/secondbase/migrate/20151202075826_create_comments.rb +11 -0
  65. data/test/dummy_apps/rails_four/init.rb +42 -0
  66. data/test/dummy_apps/rails_four/log/.keep +0 -0
  67. data/test/dummy_apps/rails_four/tmp/.keep +0 -0
  68. data/test/test_helper.rb +46 -0
  69. data/test/test_helpers/dummy_app_helpers.rb +94 -0
  70. data/test/test_helpers/rails_version_helpers.rb +29 -0
  71. data/test/test_helpers/stream_helpers.rb +40 -0
  72. data/thirdbase-2.1.1.gem +0 -0
  73. data/thirdbase-2.1.2.gem +0 -0
  74. metadata +206 -0
@@ -0,0 +1,8 @@
1
+ module FourthBase
2
+ class Base < ActiveRecord::Base
3
+
4
+ self.abstract_class = true
5
+ establish_connection FourthBase.config
6
+
7
+ end
8
+ end
@@ -0,0 +1,121 @@
1
+ namespace :db do
2
+ namespace :fourth_base do
3
+
4
+ namespace :create do
5
+ task :all do
6
+ FourthBase.on_base { Rake::Task['db:create:all'].execute }
7
+ end
8
+ end
9
+
10
+ task :create do
11
+ FourthBase.on_base { Rake::Task['db:create'].execute }
12
+ end
13
+
14
+ namespace :drop do
15
+ task :all do
16
+ FourthBase.on_base { Rake::Task['db:drop:all'].execute }
17
+ end
18
+ end
19
+
20
+ namespace :purge do
21
+ task :all do
22
+ FourthBase.on_base { Rake::Task['db:purge:all'].execute }
23
+ end
24
+ end
25
+
26
+ task :purge do
27
+ FourthBase.on_base { Rake::Task['db:purge'].execute }
28
+ end
29
+
30
+ task :migrate do
31
+ FourthBase.on_base { Rake::Task['db:migrate'].execute }
32
+ end
33
+
34
+ namespace :migrate do
35
+
36
+ task :redo => ['db:load_config'] do
37
+ FourthBase.on_base { Rake::Task['db:migrate:redo'].execute }
38
+ end
39
+
40
+ task :up => ['db:load_config'] do
41
+ FourthBase.on_base { Rake::Task['db:migrate:up'].execute }
42
+ end
43
+
44
+ task :down => ['db:load_config'] do
45
+ FourthBase.on_base { Rake::Task['db:migrate:down'].execute }
46
+ end
47
+
48
+ task :status => ['db:load_config'] do
49
+ FourthBase.on_base { Rake::Task['db:migrate:status'].execute }
50
+ end
51
+
52
+ end
53
+
54
+ task :rollback => ['db:load_config'] do
55
+ FourthBase.on_base { Rake::Task['db:rollback'].execute }
56
+ end
57
+
58
+ task :forward => ['db:load_config'] do
59
+ FourthBase.on_base { Rake::Task['db:forward'].execute }
60
+ end
61
+
62
+ task :abort_if_pending_migrations do
63
+ FourthBase.on_base { Rake::Task['db:abort_if_pending_migrations'].execute }
64
+ end
65
+
66
+ task :version => ['db:load_config'] do
67
+ FourthBase.on_base { Rake::Task['db:version'].execute }
68
+ end
69
+
70
+ namespace :schema do
71
+
72
+ task :load do
73
+ FourthBase.on_base { Rake::Task['db:schema:load'].execute }
74
+ end
75
+
76
+ end
77
+
78
+ namespace :structure do
79
+
80
+ task :load do
81
+ FourthBase.on_base { Rake::Task['db:structure:load'].execute }
82
+ end
83
+
84
+ end
85
+
86
+ namespace :test do
87
+
88
+ task :purge do
89
+ FourthBase.on_base { Rake::Task['db:test:purge'].execute }
90
+ end
91
+
92
+ task :load_schema do
93
+ FourthBase.on_base { Rake::Task['db:test:load_schema'].execute }
94
+ end
95
+
96
+ task :load_structure do
97
+ FourthBase.on_base { Rake::Task['db:test:load_structure'].execute }
98
+ end
99
+
100
+ task :prepare do
101
+ FourthBase.on_base { Rake::Task['db:test:prepare'].execute }
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+ end
108
+
109
+ %w{
110
+ create:all create drop:all purge:all purge
111
+ migrate migrate:status abort_if_pending_migrations
112
+ schema:load structure:load
113
+ test:purge test:load_schema test:load_structure test:prepare
114
+ }.each do |name|
115
+ task = Rake::Task["db:#{name}"] rescue nil
116
+ next unless task && FourthBase::Railtie.run_with_db_tasks?
117
+ task.enhance do
118
+ Rake::Task["db:load_config"].invoke
119
+ Rake::Task["db:fourth_base:#{name}"].invoke
120
+ end
121
+ end
@@ -0,0 +1,22 @@
1
+ namespace :db do
2
+ namespace :fourth_base do
3
+ task "drop:_unsafe" do
4
+ FourthBase.on_base { Rake::Task['db:drop:_unsafe'].execute }
5
+ end
6
+
7
+ namespace :migrate do
8
+ task :reset => ['db:fourth_base:drop:_unsafe', 'db:fourth_base:create', 'db:fourth_base:migrate']
9
+ end
10
+ end
11
+ end
12
+
13
+ %w{
14
+ drop:_unsafe
15
+ }.each do |name|
16
+ task = Rake::Task["db:#{name}"] rescue nil
17
+ next unless task && FourthBase::Railtie.run_with_db_tasks?
18
+ task.enhance do
19
+ Rake::Task["db:load_config"].invoke
20
+ Rake::Task["db:fourth_base:#{name}"].invoke
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ namespace :db do
2
+ namespace :fourth_base do
3
+ task :drop do
4
+ FourthBase.on_base { Rake::Task['db:drop'].execute }
5
+ end
6
+
7
+ namespace :migrate do
8
+ task :reset => ['db:fourth_base:drop', 'db:fourth_base:create', 'db:fourth_base:migrate']
9
+ end
10
+ end
11
+ end
12
+
13
+ %w{
14
+ drop
15
+ }.each do |name|
16
+ task = Rake::Task["db:#{name}"] rescue nil
17
+ next unless task && FourthBase::Railtie.run_with_db_tasks?
18
+ task.enhance do
19
+ Rake::Task["db:load_config"].invoke
20
+ Rake::Task["db:fourth_base:#{name}"].invoke
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ module FourthBase
2
+ module Forced
3
+
4
+ def connection_pool
5
+ FourthBase::Base.connection_pool
6
+ end
7
+
8
+ def retrieve_connection
9
+ FourthBase::Base.retrieve_connection
10
+ end
11
+
12
+ def connected?
13
+ FourthBase::Base.connected?
14
+ end
15
+
16
+ def remove_connection(klass = self)
17
+ FourthBase::Base.remove_connection
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ module FourthBase
2
+
3
+ mattr_accessor :is_on_base, instance_accessor: false
4
+ self.is_on_base = false
5
+
6
+ def self.on_base
7
+ already_on_base = is_on_base
8
+ if already_on_base
9
+ yield
10
+ return
11
+ end
12
+ original_config = ActiveRecord::Tasks::DatabaseTasks.current_config
13
+ original_configurations = ActiveRecord::Base.configurations
14
+ original_migrations_path = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
15
+ original_db_dir = ActiveRecord::Tasks::DatabaseTasks.db_dir
16
+ ActiveRecord::Tasks::DatabaseTasks.current_config = config
17
+ ActiveRecord::Base.configurations = original_configurations[Railtie.config_key]
18
+ ActiveRecord::Base.establish_connection(config)
19
+ ActiveRecord::Tasks::DatabaseTasks.migrations_paths = [FourthBase::Railtie.fullpath('migrate')]
20
+ ActiveRecord::Tasks::DatabaseTasks.db_dir = FourthBase::Railtie.fullpath
21
+ ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
22
+ self.is_on_base = true
23
+ yield
24
+ ensure
25
+ unless already_on_base
26
+ ActiveRecord::Base.configurations = original_configurations
27
+ ActiveRecord::Tasks::DatabaseTasks.migrations_paths = original_migrations_path
28
+ ActiveRecord::Tasks::DatabaseTasks.db_dir = original_db_dir
29
+ ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
30
+ ActiveRecord::Tasks::DatabaseTasks.current_config = original_config
31
+ ActiveRecord::Base.establish_connection(original_config)
32
+ self.is_on_base = false
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,52 @@
1
+ module FourthBase
2
+ class Railtie < Rails::Railtie
3
+
4
+ config.fourth_base = ActiveSupport::OrderedOptions.new
5
+ config.fourth_base.path = 'db/fourthbase'
6
+ config.fourth_base.config_key = 'fourthbase'
7
+ config.fourth_base.run_with_db_tasks = true
8
+
9
+ config.after_initialize do |app|
10
+ fourthbase_dir = app.root.join(config.fourth_base.path)
11
+ FileUtils.mkdir(fourthbase_dir) unless File.directory?(fourthbase_dir)
12
+ end
13
+
14
+ rake_tasks do
15
+ load 'fourth_base/databases.rake'
16
+
17
+ if Rails.version.to_i == 4
18
+ load 'fourth_base/databases_rails_four.rake'
19
+ else
20
+ load 'fourth_base/databases_rails_five.rake'
21
+ end
22
+
23
+ end
24
+
25
+ generators do
26
+ require 'rails/fourth_base/generators/migration_generator'
27
+ end
28
+
29
+ initializer 'fourth_base.add_watchable_files' do |app|
30
+ fourthbase_dir = app.root.join(config.fourth_base.path)
31
+ config.watchable_files.concat ["#{fourthbase_dir}/schema.rb", "#{fourthbase_dir}/structure.sql"]
32
+ end
33
+
34
+ def config_path
35
+ config.fourth_base.path
36
+ end
37
+
38
+ def config_key
39
+ config.fourth_base.config_key
40
+ end
41
+
42
+ def run_with_db_tasks?
43
+ config.fourth_base.run_with_db_tasks
44
+ end
45
+
46
+ def fullpath(extra=nil)
47
+ path = Rails.root.join(config.fourth_base.path)
48
+ (extra ? path.join(path, extra) : path).to_s
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,11 @@
1
+ if defined?(ActiveRecord::Base)
2
+
3
+ # Support test schema sync for Rails 4.2.x and up.
4
+ if ActiveRecord::Migration.respond_to? :maintain_test_schema!
5
+ FourthBase.on_base do
6
+ ActiveRecord::Migration.maintain_test_schema!
7
+ end
8
+ end
9
+
10
+
11
+ end
@@ -0,0 +1,3 @@
1
+ module FourthBase
2
+ VERSION = File.read(File.expand_path("../../../VERSION", __FILE__)).chomp
3
+ end
data/lib/fourthbase.rb ADDED
@@ -0,0 +1 @@
1
+ require 'fourth_base'
@@ -0,0 +1,25 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/active_record'
3
+ require 'rails/generators/active_record/migration/migration_generator'
4
+
5
+ module FourthBase
6
+ class MigrationGenerator < ActiveRecord::Generators::MigrationGenerator
7
+
8
+ source_root ActiveRecord::Generators::MigrationGenerator.source_root
9
+
10
+ def self.desc
11
+ require 'rails/generators/rails/migration/migration_generator'
12
+ Rails::Generators::MigrationGenerator.desc
13
+ end
14
+
15
+ include(Module.new{
16
+
17
+ def migration_template(*args)
18
+ args[1].sub! 'db/migrate', "#{Railtie.config_path}/migrate" if args[1]
19
+ super(*args)
20
+ end
21
+
22
+ })
23
+
24
+ end
25
+ end
@@ -0,0 +1,248 @@
1
+ require 'test_helper'
2
+
3
+ class DbTaskTest < FourthBase::TestCase
4
+
5
+ def test_db_create
6
+ refute_dummy_databases
7
+ run_db :create
8
+ assert_dummy_databases
9
+ end
10
+
11
+ def test_db_create_all
12
+ refute_dummy_databases
13
+ run_db 'create:all'
14
+ assert_dummy_databases
15
+ end
16
+
17
+ def test_db_setup
18
+ run_db :create
19
+ run_db :migrate
20
+ assert_dummy_databases
21
+ run_db :drop
22
+ refute_dummy_databases
23
+ run_db :setup
24
+ assert_dummy_databases
25
+ end
26
+
27
+ def test_db_drop
28
+ run_db :create
29
+ run_db :drop
30
+ refute_dummy_databases
31
+ end
32
+
33
+ def test_db_drop_all
34
+ run_db :create
35
+ run_db 'drop:all'
36
+ refute_dummy_databases
37
+ end
38
+
39
+ def test_db_purge_all
40
+ skip 'Rails 4.2 & Up' unless rails_42_up?
41
+ run_db :create
42
+ run_db :migrate
43
+ assert_dummy_databases
44
+ run_db 'purge:all'
45
+ establish_connection
46
+ assert_no_tables
47
+ end
48
+
49
+ def test_db_purge
50
+ skip 'Rails 4.2 & Up' unless rails_42_up?
51
+ run_db :create
52
+ run_db :migrate
53
+ assert_dummy_databases
54
+ run_db :purge
55
+ establish_connection
56
+ assert_no_tables
57
+ end
58
+
59
+ def test_db_migrate
60
+ run_db :create
61
+ run_db :migrate
62
+ # First database and schema.
63
+ schema = File.read(dummy_schema)
64
+ assert_match %r{version: 20141214142700}, schema
65
+ assert_match %r{create_table "users"}, schema
66
+ assert_match %r{create_table "posts"}, schema
67
+ refute_match %r{create_table "comments"}, schema
68
+ assert_connection_tables ActiveRecord::Base, ['users', 'posts']
69
+ # Fourth database and schema.
70
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
71
+ assert_match %r{version: 20151202075826}, fourthbase_schema
72
+ refute_match %r{create_table "users"}, fourthbase_schema
73
+ refute_match %r{create_table "posts"}, fourthbase_schema
74
+ assert_match %r{create_table "comments"}, fourthbase_schema
75
+ assert_connection_tables FourthBase::Base, ['comments']
76
+ end
77
+
78
+ def test_fourthbase_migrate_updown
79
+ run_db :create
80
+ run_db :migrate
81
+ assert_match(/no migration.*20151202075826/i, run_db('migrate:down VERSION=20151202075826', :stderr))
82
+ run_fourthbase 'migrate:down VERSION=20151202075826'
83
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
84
+ refute_match %r{version: 20151202075826}, fourthbase_schema
85
+ refute_match %r{create_table "comments"}, fourthbase_schema
86
+ assert_match(/no migration.*20151202075826/i, run_db('migrate:up VERSION=20151202075826', :stderr))
87
+ run_fourthbase 'migrate:up VERSION=20151202075826'
88
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
89
+ assert_match %r{version: 20151202075826}, fourthbase_schema
90
+ assert_match %r{create_table "comments"}, fourthbase_schema
91
+ end
92
+
93
+ def test_fourthbase_migrate_reset
94
+ run_db :create
95
+ run_db :migrate
96
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
97
+ assert_match %r{version: 20151202075826}, fourthbase_schema
98
+ assert_match %r{create_table "comments"}, fourthbase_schema
99
+ FileUtils.rm_rf dummy_fourthbase_schema
100
+ run_fourthbase 'migrate:reset'
101
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
102
+ assert_match %r{version: 20151202075826}, fourthbase_schema
103
+ assert_match %r{create_table "comments"}, fourthbase_schema
104
+ end
105
+
106
+ def test_fourthbase_migrate_redo
107
+ run_db :create
108
+ run_db :migrate
109
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
110
+ assert_match %r{version: 20151202075826}, fourthbase_schema
111
+ assert_match %r{create_table "comments"}, fourthbase_schema
112
+ FileUtils.rm_rf dummy_fourthbase_schema
113
+ run_fourthbase 'migrate:redo'
114
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
115
+ assert_match %r{version: 20151202075826}, fourthbase_schema
116
+ assert_match %r{create_table "comments"}, fourthbase_schema
117
+ # Can redo latest FourthBase migration using previous VERSION env.
118
+ version = dummy_migration[:version]
119
+ run_db :migrate
120
+ assert_match %r{version: #{version}}, File.read(dummy_fourthbase_schema)
121
+ establish_connection
122
+ Comment.create! body: 'test', user_id: 420
123
+ run_fourthbase 'migrate:redo VERSION=20151202075826'
124
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
125
+ assert_match %r{version: #{version}}, fourthbase_schema
126
+ assert_match %r{create_table "comments"}, fourthbase_schema
127
+ establish_connection
128
+ assert_nil Comment.first
129
+ end
130
+
131
+ def test_fourthbase_migrate_status
132
+ run_db :create
133
+ stream = rails_42_up? ? :stderr : :stdout
134
+ assert_match %r{migrations table does not exist}, run_fourthbase('migrate:status', stream)
135
+ run_db :migrate
136
+ assert_match %r{up.*20151202075826}, run_fourthbase('migrate:status')
137
+ version = dummy_migration[:version]
138
+ status = run_fourthbase('migrate:status')
139
+ assert_match %r{up.*20151202075826}, status
140
+ assert_match %r{down.*#{version}}, status
141
+ end
142
+
143
+ def test_fourthbase_forward_and_rollback
144
+ run_db :create
145
+ run_db :migrate
146
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
147
+ assert_match %r{version: 20151202075826}, fourthbase_schema
148
+ refute_match %r{create_table "foos"}, fourthbase_schema
149
+ version = dummy_migration[:version] # ActiveRecord does not support start index 0.
150
+ run_fourthbase :forward
151
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
152
+ assert_match %r{version: #{version}}, fourthbase_schema
153
+ assert_match %r{create_table "foos"}, fourthbase_schema
154
+ run_fourthbase :rollback
155
+ fourthbase_schema = File.read(dummy_fourthbase_schema)
156
+ assert_match %r{version: 20151202075826}, fourthbase_schema
157
+ refute_match %r{create_table "foos"}, fourthbase_schema
158
+ end
159
+
160
+ def test_db_test_purge
161
+ run_db :create
162
+ assert_dummy_databases
163
+ run_db 'test:purge'
164
+ establish_connection
165
+ assert_no_tables
166
+ end
167
+
168
+ def test_db_test_load_schema
169
+ run_db :create
170
+ assert_dummy_databases
171
+ run_db 'test:purge'
172
+ run_db :migrate
173
+ Dir.chdir(dummy_root) { `rake db:test:load_schema` }
174
+ establish_connection
175
+ assert_connection_tables ActiveRecord::Base, ['users', 'posts']
176
+ assert_connection_tables FourthBase::Base, ['comments']
177
+ end
178
+
179
+ def test_abort_if_pending
180
+ run_db :create
181
+ run_db :migrate
182
+ assert_equal "", run_db(:abort_if_pending_migrations, :stderr)
183
+ version = dummy_migration[:version]
184
+ capture(:stderr) do
185
+ stdout = run_db :abort_if_pending_migrations
186
+ assert_match(/1 pending migration/, stdout)
187
+ assert_match(/#{version}/, stdout)
188
+ end
189
+ end
190
+
191
+ def test_db_test_load_structure
192
+ run_db :create
193
+ assert_dummy_databases
194
+ run_db 'test:purge'
195
+ Dir.chdir(dummy_root) { `env SCHEMA_FORMAT=sql rake db:migrate` }
196
+ Dir.chdir(dummy_root) { `rake db:test:load_structure` }
197
+ establish_connection
198
+ assert_connection_tables ActiveRecord::Base, ['users', 'posts']
199
+ assert_connection_tables FourthBase::Base, ['comments']
200
+ end
201
+
202
+ def test_fourthbase_version
203
+ run_db :create
204
+ assert_match(/version: 0/, run_fourthbase(:version))
205
+ run_db :migrate
206
+ assert_match(/version: 20141214142700/, run_db(:version))
207
+ assert_match(/version: 20151202075826/, run_fourthbase(:version))
208
+ end
209
+
210
+ def test_fourthbase_db_tasks_disabled
211
+ refute_dummy_databases
212
+ run_db :create, :stdout, false
213
+ assert_dummy_created_but_not_fourthbase
214
+ end
215
+
216
+ private
217
+
218
+ def assert_dummy_created_but_not_fourthbase
219
+ assert_equal 'base.sqlite3', dummy_database_sqlite
220
+ refute_match(/fourthbase_test/, `mysql -uroot -e "SHOW DATABASES"`)
221
+ end
222
+
223
+ def assert_no_tables
224
+ if ActiveRecord::Base.connection.respond_to? :data_sources
225
+ assert_equal [], ActiveRecord::Base.connection.data_sources
226
+ assert_equal [], FourthBase::Base.connection.data_sources
227
+ else
228
+ assert_equal [], ActiveRecord::Base.connection.tables
229
+ assert_equal [], FourthBase::Base.connection.tables
230
+ end
231
+ end
232
+
233
+ def assert_connection_tables(model, expected_tables)
234
+ establish_connection
235
+
236
+ if ActiveRecord::Base.connection.respond_to? :data_sources
237
+ tables = model.connection.data_sources
238
+ else
239
+ tables = model.connection.tables
240
+ end
241
+
242
+ expected_tables.each do |table|
243
+ message = "Expected #{model.name} tables #{tables.inspect} to include #{table.inspect}"
244
+ assert tables.include?(table), message
245
+ end
246
+ end
247
+
248
+ end