thirdbase 2.1.1
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.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.travis.yml +24 -0
- data/.yardopts +1 -0
- data/Appraisals +19 -0
- data/CHANGELOG.md +37 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +21 -0
- data/README.md +191 -0
- data/Rakefile +24 -0
- data/VERSION +1 -0
- data/gemfiles/rails40.gemfile +8 -0
- data/gemfiles/rails41.gemfile +8 -0
- data/gemfiles/rails42.gemfile +8 -0
- data/gemfiles/rails50.gemfile +8 -0
- data/lib/rails/second_base/generators/migration_generator.rb +25 -0
- data/lib/third_base.rb +20 -0
- data/lib/third_base/base.rb +8 -0
- data/lib/third_base/databases.rake +121 -0
- data/lib/third_base/databases_rails_five.rake +22 -0
- data/lib/third_base/databases_rails_four.rake +22 -0
- data/lib/third_base/forced.rb +21 -0
- data/lib/third_base/on_base.rb +36 -0
- data/lib/third_base/railtie.rb +52 -0
- data/lib/third_base/test_help.rb +11 -0
- data/lib/third_base/version.rb +3 -0
- data/lib/thirdbase.rb +1 -0
- data/test/cases/dbtask_test.rb +248 -0
- data/test/cases/forced_test.rb +49 -0
- data/test/cases/generator_test.rb +64 -0
- data/test/cases/on_base_test.rb +35 -0
- data/test/cases/railtie_test.rb +31 -0
- data/test/cases/rake_test.rb +0 -0
- data/test/dummy_apps/rails_five/Rakefile +2 -0
- data/test/dummy_apps/rails_five/app/controllers/application_controller.rb +7 -0
- data/test/dummy_apps/rails_five/app/helpers/application_helper.rb +3 -0
- data/test/dummy_apps/rails_five/app/models/application_record.rb +3 -0
- data/test/dummy_apps/rails_five/app/models/comment.rb +6 -0
- data/test/dummy_apps/rails_five/app/models/comment_forced.rb +6 -0
- data/test/dummy_apps/rails_five/app/models/post.rb +7 -0
- data/test/dummy_apps/rails_five/app/models/user.rb +6 -0
- data/test/dummy_apps/rails_five/bin/rails +5 -0
- data/test/dummy_apps/rails_five/config/database.yml +13 -0
- data/test/dummy_apps/rails_five/config/routes.rb +3 -0
- data/test/dummy_apps/rails_five/db/migrate/20141209165002_create_users.rb +11 -0
- data/test/dummy_apps/rails_five/db/migrate/20141214142700_create_posts.rb +12 -0
- data/test/dummy_apps/rails_five/db/secondbase/migrate/20151202075826_create_comments.rb +11 -0
- data/test/dummy_apps/rails_five/init.rb +42 -0
- data/test/dummy_apps/rails_five/log/.keep +0 -0
- data/test/dummy_apps/rails_five/tmp/.keep +0 -0
- data/test/dummy_apps/rails_four/Rakefile +2 -0
- data/test/dummy_apps/rails_four/app/controllers/application_controller.rb +7 -0
- data/test/dummy_apps/rails_four/app/helpers/application_helper.rb +3 -0
- data/test/dummy_apps/rails_four/app/models/comment.rb +6 -0
- data/test/dummy_apps/rails_four/app/models/comment_forced.rb +6 -0
- data/test/dummy_apps/rails_four/app/models/post.rb +7 -0
- data/test/dummy_apps/rails_four/app/models/user.rb +6 -0
- data/test/dummy_apps/rails_four/bin/rails +5 -0
- data/test/dummy_apps/rails_four/config/database.yml +14 -0
- data/test/dummy_apps/rails_four/config/routes.rb +3 -0
- data/test/dummy_apps/rails_four/db/migrate/20141209165002_create_users.rb +11 -0
- data/test/dummy_apps/rails_four/db/migrate/20141214142700_create_posts.rb +12 -0
- data/test/dummy_apps/rails_four/db/secondbase/migrate/20151202075826_create_comments.rb +11 -0
- data/test/dummy_apps/rails_four/init.rb +42 -0
- data/test/dummy_apps/rails_four/log/.keep +0 -0
- data/test/dummy_apps/rails_four/tmp/.keep +0 -0
- data/test/test_helper.rb +46 -0
- data/test/test_helpers/dummy_app_helpers.rb +94 -0
- data/test/test_helpers/rails_version_helpers.rb +29 -0
- data/test/test_helpers/stream_helpers.rb +40 -0
- data/thirdbase.gemspec +25 -0
- metadata +247 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :third_base do
|
3
|
+
|
4
|
+
namespace :create do
|
5
|
+
task :all do
|
6
|
+
ThirdBase.on_base { Rake::Task['db:create:all'].execute }
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
task :create do
|
11
|
+
ThirdBase.on_base { Rake::Task['db:create'].execute }
|
12
|
+
end
|
13
|
+
|
14
|
+
namespace :drop do
|
15
|
+
task :all do
|
16
|
+
ThirdBase.on_base { Rake::Task['db:drop:all'].execute }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
namespace :purge do
|
21
|
+
task :all do
|
22
|
+
ThirdBase.on_base { Rake::Task['db:purge:all'].execute }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
task :purge do
|
27
|
+
ThirdBase.on_base { Rake::Task['db:purge'].execute }
|
28
|
+
end
|
29
|
+
|
30
|
+
task :migrate do
|
31
|
+
ThirdBase.on_base { Rake::Task['db:migrate'].execute }
|
32
|
+
end
|
33
|
+
|
34
|
+
namespace :migrate do
|
35
|
+
|
36
|
+
task :redo => ['db:load_config'] do
|
37
|
+
ThirdBase.on_base { Rake::Task['db:migrate:redo'].execute }
|
38
|
+
end
|
39
|
+
|
40
|
+
task :up => ['db:load_config'] do
|
41
|
+
ThirdBase.on_base { Rake::Task['db:migrate:up'].execute }
|
42
|
+
end
|
43
|
+
|
44
|
+
task :down => ['db:load_config'] do
|
45
|
+
ThirdBase.on_base { Rake::Task['db:migrate:down'].execute }
|
46
|
+
end
|
47
|
+
|
48
|
+
task :status => ['db:load_config'] do
|
49
|
+
ThirdBase.on_base { Rake::Task['db:migrate:status'].execute }
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
task :rollback => ['db:load_config'] do
|
55
|
+
ThirdBase.on_base { Rake::Task['db:rollback'].execute }
|
56
|
+
end
|
57
|
+
|
58
|
+
task :forward => ['db:load_config'] do
|
59
|
+
ThirdBase.on_base { Rake::Task['db:forward'].execute }
|
60
|
+
end
|
61
|
+
|
62
|
+
task :abort_if_pending_migrations do
|
63
|
+
ThirdBase.on_base { Rake::Task['db:abort_if_pending_migrations'].execute }
|
64
|
+
end
|
65
|
+
|
66
|
+
task :version => ['db:load_config'] do
|
67
|
+
ThirdBase.on_base { Rake::Task['db:version'].execute }
|
68
|
+
end
|
69
|
+
|
70
|
+
namespace :schema do
|
71
|
+
|
72
|
+
task :load do
|
73
|
+
ThirdBase.on_base { Rake::Task['db:schema:load'].execute }
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
namespace :structure do
|
79
|
+
|
80
|
+
task :load do
|
81
|
+
ThirdBase.on_base { Rake::Task['db:structure:load'].execute }
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
namespace :test do
|
87
|
+
|
88
|
+
task :purge do
|
89
|
+
ThirdBase.on_base { Rake::Task['db:test:purge'].execute }
|
90
|
+
end
|
91
|
+
|
92
|
+
task :load_schema do
|
93
|
+
ThirdBase.on_base { Rake::Task['db:test:load_schema'].execute }
|
94
|
+
end
|
95
|
+
|
96
|
+
task :load_structure do
|
97
|
+
ThirdBase.on_base { Rake::Task['db:test:load_structure'].execute }
|
98
|
+
end
|
99
|
+
|
100
|
+
task :prepare do
|
101
|
+
ThirdBase.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 && ThirdBase::Railtie.run_with_db_tasks?
|
117
|
+
task.enhance do
|
118
|
+
Rake::Task["db:load_config"].invoke
|
119
|
+
Rake::Task["db:third_base:#{name}"].invoke
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :third_base do
|
3
|
+
task "drop:_unsafe" do
|
4
|
+
ThirdBase.on_base { Rake::Task['db:drop:_unsafe'].execute }
|
5
|
+
end
|
6
|
+
|
7
|
+
namespace :migrate do
|
8
|
+
task :reset => ['db:third_base:drop:_unsafe', 'db:third_base:create', 'db:third_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 && ThirdBase::Railtie.run_with_db_tasks?
|
18
|
+
task.enhance do
|
19
|
+
Rake::Task["db:load_config"].invoke
|
20
|
+
Rake::Task["db:third_base:#{name}"].invoke
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :third_base do
|
3
|
+
task :drop do
|
4
|
+
ThirdBase.on_base { Rake::Task['db:drop'].execute }
|
5
|
+
end
|
6
|
+
|
7
|
+
namespace :migrate do
|
8
|
+
task :reset => ['db:third_base:drop', 'db:third_base:create', 'db:third_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 && ThirdBase::Railtie.run_with_db_tasks?
|
18
|
+
task.enhance do
|
19
|
+
Rake::Task["db:load_config"].invoke
|
20
|
+
Rake::Task["db:third_base:#{name}"].invoke
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module ThirdBase
|
2
|
+
module Forced
|
3
|
+
|
4
|
+
def connection_pool
|
5
|
+
ThirdBase::Base.connection_pool
|
6
|
+
end
|
7
|
+
|
8
|
+
def retrieve_connection
|
9
|
+
ThirdBase::Base.retrieve_connection
|
10
|
+
end
|
11
|
+
|
12
|
+
def connected?
|
13
|
+
ThirdBase::Base.connected?
|
14
|
+
end
|
15
|
+
|
16
|
+
def remove_connection(klass = self)
|
17
|
+
ThirdBase::Base.remove_connection
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module ThirdBase
|
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 = [ThirdBase::Railtie.fullpath('migrate')]
|
20
|
+
ActiveRecord::Tasks::DatabaseTasks.db_dir = ThirdBase::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 ThirdBase
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
|
4
|
+
config.third_base = ActiveSupport::OrderedOptions.new
|
5
|
+
config.third_base.path = 'db/thirdbase'
|
6
|
+
config.third_base.config_key = 'thirdbase'
|
7
|
+
config.third_base.run_with_db_tasks = true
|
8
|
+
|
9
|
+
config.after_initialize do |app|
|
10
|
+
thirdbase_dir = app.root.join(config.third_base.path)
|
11
|
+
FileUtils.mkdir(thirdbase_dir) unless File.directory?(thirdbase_dir)
|
12
|
+
end
|
13
|
+
|
14
|
+
rake_tasks do
|
15
|
+
load 'third_base/databases.rake'
|
16
|
+
|
17
|
+
if Rails.version.to_i == 4
|
18
|
+
load 'third_base/databases_rails_four.rake'
|
19
|
+
else
|
20
|
+
load 'third_base/databases_rails_five.rake'
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
generators do
|
26
|
+
require 'rails/third_base/generators/migration_generator'
|
27
|
+
end
|
28
|
+
|
29
|
+
initializer 'third_base.add_watchable_files' do |app|
|
30
|
+
thirdbase_dir = app.root.join(config.third_base.path)
|
31
|
+
config.watchable_files.concat ["#{thirdbase_dir}/schema.rb", "#{thirdbase_dir}/structure.sql"]
|
32
|
+
end
|
33
|
+
|
34
|
+
def config_path
|
35
|
+
config.third_base.path
|
36
|
+
end
|
37
|
+
|
38
|
+
def config_key
|
39
|
+
config.third_base.config_key
|
40
|
+
end
|
41
|
+
|
42
|
+
def run_with_db_tasks?
|
43
|
+
config.third_base.run_with_db_tasks
|
44
|
+
end
|
45
|
+
|
46
|
+
def fullpath(extra=nil)
|
47
|
+
path = Rails.root.join(config.third_base.path)
|
48
|
+
(extra ? path.join(path, extra) : path).to_s
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
data/lib/thirdbase.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'third_base'
|
@@ -0,0 +1,248 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class DbTaskTest < ThirdBase::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
|
+
# Second database and schema.
|
70
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
71
|
+
assert_match %r{version: 20151202075826}, thirdbase_schema
|
72
|
+
refute_match %r{create_table "users"}, thirdbase_schema
|
73
|
+
refute_match %r{create_table "posts"}, thirdbase_schema
|
74
|
+
assert_match %r{create_table "comments"}, thirdbase_schema
|
75
|
+
assert_connection_tables ThirdBase::Base, ['comments']
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_thirdbase_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_thirdbase 'migrate:down VERSION=20151202075826'
|
83
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
84
|
+
refute_match %r{version: 20151202075826}, thirdbase_schema
|
85
|
+
refute_match %r{create_table "comments"}, thirdbase_schema
|
86
|
+
assert_match(/no migration.*20151202075826/i, run_db('migrate:up VERSION=20151202075826', :stderr))
|
87
|
+
run_thirdbase 'migrate:up VERSION=20151202075826'
|
88
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
89
|
+
assert_match %r{version: 20151202075826}, thirdbase_schema
|
90
|
+
assert_match %r{create_table "comments"}, thirdbase_schema
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_thirdbase_migrate_reset
|
94
|
+
run_db :create
|
95
|
+
run_db :migrate
|
96
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
97
|
+
assert_match %r{version: 20151202075826}, thirdbase_schema
|
98
|
+
assert_match %r{create_table "comments"}, thirdbase_schema
|
99
|
+
FileUtils.rm_rf dummy_thirdbase_schema
|
100
|
+
run_thirdbase 'migrate:reset'
|
101
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
102
|
+
assert_match %r{version: 20151202075826}, thirdbase_schema
|
103
|
+
assert_match %r{create_table "comments"}, thirdbase_schema
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_thirdbase_migrate_redo
|
107
|
+
run_db :create
|
108
|
+
run_db :migrate
|
109
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
110
|
+
assert_match %r{version: 20151202075826}, thirdbase_schema
|
111
|
+
assert_match %r{create_table "comments"}, thirdbase_schema
|
112
|
+
FileUtils.rm_rf dummy_thirdbase_schema
|
113
|
+
run_thirdbase 'migrate:redo'
|
114
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
115
|
+
assert_match %r{version: 20151202075826}, thirdbase_schema
|
116
|
+
assert_match %r{create_table "comments"}, thirdbase_schema
|
117
|
+
# Can redo latest ThirdBase migration using previous VERSION env.
|
118
|
+
version = dummy_migration[:version]
|
119
|
+
run_db :migrate
|
120
|
+
assert_match %r{version: #{version}}, File.read(dummy_thirdbase_schema)
|
121
|
+
establish_connection
|
122
|
+
Comment.create! body: 'test', user_id: 420
|
123
|
+
run_thirdbase 'migrate:redo VERSION=20151202075826'
|
124
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
125
|
+
assert_match %r{version: #{version}}, thirdbase_schema
|
126
|
+
assert_match %r{create_table "comments"}, thirdbase_schema
|
127
|
+
establish_connection
|
128
|
+
assert_nil Comment.first
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_thirdbase_migrate_status
|
132
|
+
run_db :create
|
133
|
+
stream = rails_42_up? ? :stderr : :stdout
|
134
|
+
assert_match %r{migrations table does not exist}, run_thirdbase('migrate:status', stream)
|
135
|
+
run_db :migrate
|
136
|
+
assert_match %r{up.*20151202075826}, run_thirdbase('migrate:status')
|
137
|
+
version = dummy_migration[:version]
|
138
|
+
status = run_thirdbase('migrate:status')
|
139
|
+
assert_match %r{up.*20151202075826}, status
|
140
|
+
assert_match %r{down.*#{version}}, status
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_thirdbase_forward_and_rollback
|
144
|
+
run_db :create
|
145
|
+
run_db :migrate
|
146
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
147
|
+
assert_match %r{version: 20151202075826}, thirdbase_schema
|
148
|
+
refute_match %r{create_table "foos"}, thirdbase_schema
|
149
|
+
version = dummy_migration[:version] # ActiveRecord does not support start index 0.
|
150
|
+
run_thirdbase :forward
|
151
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
152
|
+
assert_match %r{version: #{version}}, thirdbase_schema
|
153
|
+
assert_match %r{create_table "foos"}, thirdbase_schema
|
154
|
+
run_thirdbase :rollback
|
155
|
+
thirdbase_schema = File.read(dummy_thirdbase_schema)
|
156
|
+
assert_match %r{version: 20151202075826}, thirdbase_schema
|
157
|
+
refute_match %r{create_table "foos"}, thirdbase_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 ThirdBase::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 ThirdBase::Base, ['comments']
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_thirdbase_version
|
203
|
+
run_db :create
|
204
|
+
assert_match(/version: 0/, run_thirdbase(:version))
|
205
|
+
run_db :migrate
|
206
|
+
assert_match(/version: 20141214142700/, run_db(:version))
|
207
|
+
assert_match(/version: 20151202075826/, run_thirdbase(:version))
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_thirdbase_db_tasks_disabled
|
211
|
+
refute_dummy_databases
|
212
|
+
run_db :create, :stdout, false
|
213
|
+
assert_dummy_created_but_not_thirdbase
|
214
|
+
end
|
215
|
+
|
216
|
+
private
|
217
|
+
|
218
|
+
def assert_dummy_created_but_not_thirdbase
|
219
|
+
assert_equal 'base.sqlite3', dummy_database_sqlite
|
220
|
+
refute_match(/thirdbase_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 [], ThirdBase::Base.connection.data_sources
|
227
|
+
else
|
228
|
+
assert_equal [], ActiveRecord::Base.connection.tables
|
229
|
+
assert_equal [], ThirdBase::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
|