data_migrate 11.1.0 → 11.3.0
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 +4 -4
- data/Changelog.md +11 -0
- data/README.md +13 -18
- data/lib/data_migrate/config.rb +2 -1
- data/lib/data_migrate/data_migrator.rb +0 -1
- data/lib/data_migrate/data_schema_migration.rb +2 -2
- data/lib/data_migrate/database_tasks.rb +14 -4
- data/lib/data_migrate/rails_helper.rb +1 -0
- data/lib/data_migrate/version.rb +1 -1
- metadata +5 -54
- data/.github/workflows/build.yml +0 -39
- data/.github/workflows/gempush.yml +0 -28
- data/.gitignore +0 -12
- data/.hound.yml +0 -4
- data/.overcommit.yml +0 -21
- data/.rbenv-gemsets +0 -2
- data/.rspec +0 -3
- data/.rubocop.yml +0 -2
- data/.ruby-style.yml +0 -1061
- data/Appraisals +0 -19
- data/Gemfile +0 -3
- data/Gemfile.lock +0 -192
- data/Rakefile +0 -2
- data/data_migrate.gemspec +0 -41
- data/gemfiles/rails_6.1.gemfile +0 -7
- data/gemfiles/rails_6.1.gemfile.lock +0 -237
- data/gemfiles/rails_7.0.gemfile +0 -7
- data/gemfiles/rails_7.0.gemfile.lock +0 -238
- data/gemfiles/rails_7.1.gemfile +0 -7
- data/gemfiles/rails_7.1.gemfile.lock +0 -277
- data/gemfiles/rails_7.2.gemfile +0 -7
- data/gemfiles/rails_7.2.gemfile.lock +0 -274
- data/gemfiles/rails_8.0.gemfile +0 -7
- data/gemfiles/rails_8.0.gemfile.lock +0 -268
- data/screenshot.png +0 -0
- data/spec/data_migrate/config_spec.rb +0 -69
- data/spec/data_migrate/data_migrator_spec.rb +0 -84
- data/spec/data_migrate/data_schema_migration_spec.rb +0 -33
- data/spec/data_migrate/data_spec.rb +0 -74
- data/spec/data_migrate/database_tasks_spec.rb +0 -214
- data/spec/data_migrate/migration.rb +0 -17
- data/spec/data_migrate/migration_context_spec.rb +0 -117
- data/spec/data_migrate/schema_dumper_spec.rb +0 -36
- data/spec/data_migrate/schema_migration_spec.rb +0 -104
- data/spec/data_migrate/status_service_spec.rb +0 -76
- data/spec/data_migrate/tasks/data_migrate_tasks_spec.rb +0 -129
- data/spec/db/data/20091231235959_some_name.rb +0 -9
- data/spec/db/data/20171231235959_super_update.rb +0 -9
- data/spec/db/data/20181128000207_excluded_file.rb.other_ext +0 -1
- data/spec/db/data/partial_schema/data_schema.rb +0 -1
- data/spec/db/data/partial_schema/test_data_schema.rb +0 -1
- data/spec/db/data/schema/data_schema.rb +0 -1
- data/spec/db/data/schema/test_data_schema.rb +0 -1
- data/spec/db/data_two/20241231235959_data_two_update.rb +0 -9
- data/spec/db/migrate/20131111111111_late_migration.rb +0 -9
- data/spec/db/migrate/20202020202011_db_migration.rb +0 -9
- data/spec/generators/data_migration/data_migration_generator_spec.rb +0 -101
- data/spec/spec_helper.rb +0 -28
- data/tasks/.gitkeep +0 -0
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe DataMigrate::DataSchemaMigration do
|
4
|
-
if DataMigrate::RailsHelper.rails_version_equal_to_or_higher_than_7_1
|
5
|
-
let(:connection) { double(:connection) }
|
6
|
-
let(:subject) { DataMigrate::DataSchemaMigration.new(connection) }
|
7
|
-
|
8
|
-
describe :table_name do
|
9
|
-
it "returns correct table name" do
|
10
|
-
expect(subject.table_name).to eq("data_migrations")
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe :index_name do
|
15
|
-
it "returns correct primary key name" do
|
16
|
-
expect(subject.primary_key).to eq("version")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
else
|
20
|
-
let(:subject) { DataMigrate::DataSchemaMigration }
|
21
|
-
describe :table_name do
|
22
|
-
it "returns correct table name" do
|
23
|
-
expect(subject.table_name).to eq("data_migrations")
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe :index_name do
|
28
|
-
it "returns correct primary key name" do
|
29
|
-
expect(subject.primary_key).to eq("version")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe DataMigrate::Data do
|
6
|
-
let(:subject) { DataMigrate::Data }
|
7
|
-
let(:fixture_file_timestamps) do
|
8
|
-
%w[20091231235959 20101231235959 20111231235959]
|
9
|
-
end
|
10
|
-
|
11
|
-
around do |example|
|
12
|
-
Dir.mktmpdir do |temp_dir|
|
13
|
-
@temp_dir = temp_dir
|
14
|
-
|
15
|
-
# create the fake data migration files
|
16
|
-
fixture_file_timestamps.each do |timestamp|
|
17
|
-
FileUtils.touch File.join(temp_dir, "#{timestamp}_data_migration.rb")
|
18
|
-
end
|
19
|
-
|
20
|
-
example.run
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe :define do
|
25
|
-
after do
|
26
|
-
ActiveRecord::Migration.drop_table("data_migrations")
|
27
|
-
end
|
28
|
-
|
29
|
-
context "when no version is supplied" do
|
30
|
-
it "returns nil" do
|
31
|
-
expect(subject.define(version: nil)).to be_nil
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "when a version is supplied" do
|
36
|
-
before do
|
37
|
-
allow(DataMigrate::DataMigrator).
|
38
|
-
to receive(:full_migrations_path).and_return(@temp_dir)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "sets the current version to the supplied version" do
|
42
|
-
version = fixture_file_timestamps[1]
|
43
|
-
|
44
|
-
expect(DataMigrate::DataMigrator.current_version).not_to eq version.to_i
|
45
|
-
subject.define(version: version)
|
46
|
-
expect(DataMigrate::DataMigrator.current_version).to eq version.to_i
|
47
|
-
end
|
48
|
-
|
49
|
-
it "creates entries for migration versions that come " \
|
50
|
-
"before the supplied version" do
|
51
|
-
|
52
|
-
version = fixture_file_timestamps[1]
|
53
|
-
|
54
|
-
subject.define(version: version)
|
55
|
-
|
56
|
-
sql_select = <<-SQL
|
57
|
-
SELECT version
|
58
|
-
FROM #{DataMigrate::RailsHelper.data_schema_migration.table_name}
|
59
|
-
SQL
|
60
|
-
|
61
|
-
db_list_data = ActiveRecord::Base.connection.
|
62
|
-
select_values(sql_select).map(&:to_i)
|
63
|
-
expect(db_list_data).to match_array(
|
64
|
-
[fixture_file_timestamps[0], fixture_file_timestamps[1]].map(&:to_i)
|
65
|
-
)
|
66
|
-
|
67
|
-
# The last remaining migration (fixture_file_timestamps[2]) was
|
68
|
-
# not included as part of the supplied version and so should not
|
69
|
-
# appear in the data_migrations table.
|
70
|
-
expect(db_list_data).not_to include(fixture_file_timestamps[2])
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,214 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe DataMigrate::DatabaseTasks do
|
6
|
-
let(:subject) { DataMigrate::DatabaseTasks }
|
7
|
-
let(:migration_path) { "spec/db/migrate" }
|
8
|
-
let(:data_migrations_path) { DataMigrate.config.data_migrations_path }
|
9
|
-
|
10
|
-
before do
|
11
|
-
# In a normal Rails installation, db_dir would defer to
|
12
|
-
# Rails.application.config.paths["db"].first
|
13
|
-
# @see https://github.com/rails/rails/blob/a7d49ef78c36df2d1ca876451f30915ada1079a5/activerecord/lib/active_record/tasks/database_tasks.rb#L54
|
14
|
-
allow(subject).to receive(:db_dir).and_return("db")
|
15
|
-
allow(ActiveRecord::Tasks::DatabaseTasks).to receive(:db_dir).and_return("db")
|
16
|
-
end
|
17
|
-
|
18
|
-
before do
|
19
|
-
allow(DataMigrate::Tasks::DataMigrateTasks).to receive(:migrations_paths) do
|
20
|
-
data_migrations_path
|
21
|
-
end
|
22
|
-
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: "spec/db/test.db")
|
23
|
-
hash_config = ActiveRecord::DatabaseConfigurations::HashConfig.new(
|
24
|
-
'test', 'test', adapter: "sqlite3", database: "spec/db/test.db"
|
25
|
-
)
|
26
|
-
config_obj = ActiveRecord::DatabaseConfigurations.new([hash_config])
|
27
|
-
allow(ActiveRecord::Base).to receive(:configurations).and_return(config_obj)
|
28
|
-
end
|
29
|
-
|
30
|
-
context "migrations" do
|
31
|
-
after do
|
32
|
-
ActiveRecord::Migration.drop_table("data_migrations") rescue nil
|
33
|
-
ActiveRecord::Migration.drop_table("schema_migrations") rescue nil
|
34
|
-
end
|
35
|
-
|
36
|
-
before do
|
37
|
-
DataMigrate::RailsHelper.schema_migration.create_table
|
38
|
-
|
39
|
-
allow(DataMigrate::SchemaMigration).to receive(:migrations_paths) { migration_path }
|
40
|
-
allow(DataMigrate::DatabaseTasks).to receive(:data_migrations_path) do
|
41
|
-
data_migrations_path
|
42
|
-
end.at_least(:once)
|
43
|
-
end
|
44
|
-
|
45
|
-
describe :past_migrations do
|
46
|
-
it "returns past migration records" do
|
47
|
-
subject.forward
|
48
|
-
migrations = subject.past_migrations
|
49
|
-
expect(migrations.count).to eq 1
|
50
|
-
expect(migrations.first[:version]).to eq 20091231235959
|
51
|
-
end
|
52
|
-
|
53
|
-
it "shows nothing without any migrations" do
|
54
|
-
migrations = subject.past_migrations
|
55
|
-
expect(migrations.count).to eq 0
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe :forward do
|
60
|
-
it "run forward default amount of times" do
|
61
|
-
subject.forward
|
62
|
-
versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
|
63
|
-
expect(versions.count).to eq(1)
|
64
|
-
end
|
65
|
-
|
66
|
-
it "run forward defined number of times" do
|
67
|
-
subject.forward(2)
|
68
|
-
versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
|
69
|
-
expect(versions.count).to eq(1)
|
70
|
-
expect(versions.first).to eq "20091231235959"
|
71
|
-
versions = DataMigrate::RailsHelper.schema_migration.normalized_versions
|
72
|
-
expect(versions.count).to eq(1)
|
73
|
-
expect(versions.first).to eq "20131111111111"
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
if DataMigrate::RailsHelper.rails_version_equal_to_or_higher_than_7_0
|
78
|
-
describe :schema_dump_path do
|
79
|
-
before do
|
80
|
-
allow(ActiveRecord::Base).to receive(:configurations)
|
81
|
-
.and_return(ActiveRecord::DatabaseConfigurations.new([db_config]))
|
82
|
-
end
|
83
|
-
|
84
|
-
context "for primary database" do
|
85
|
-
let(:db_config) do
|
86
|
-
ActiveRecord::DatabaseConfigurations::HashConfig.new("development", "primary", {})
|
87
|
-
end
|
88
|
-
|
89
|
-
context "for :ruby db format" do
|
90
|
-
it 'returns the data schema path' do
|
91
|
-
allow(ActiveRecord).to receive(:schema_format).and_return(:ruby)
|
92
|
-
expect(subject.schema_dump_path(db_config)).to eq("db/data_schema.rb")
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
context "for :sql db format" do
|
97
|
-
it 'returns the data schema path' do
|
98
|
-
allow(ActiveRecord).to receive(:schema_format).and_return(:sql)
|
99
|
-
expect(subject.schema_dump_path(db_config, :sql)).to eq("db/data_schema.rb")
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
describe :prepare_all_with_data do
|
107
|
-
let(:db_config) do
|
108
|
-
ActiveRecord::DatabaseConfigurations::HashConfig.new(
|
109
|
-
'test',
|
110
|
-
'primary',
|
111
|
-
adapter: "sqlite3",
|
112
|
-
database: "spec/db/test.db"
|
113
|
-
)
|
114
|
-
end
|
115
|
-
|
116
|
-
let(:pool) { double("ConnectionPool") }
|
117
|
-
let(:connection) { double("Connection") }
|
118
|
-
|
119
|
-
before do
|
120
|
-
allow(subject).to receive(:each_current_configuration).and_yield(db_config)
|
121
|
-
allow(subject).to receive(:with_temporary_pool).with(db_config).and_yield(pool)
|
122
|
-
allow(pool).to receive(:connection).and_return(connection)
|
123
|
-
allow(subject).to receive(:schema_dump_path).and_return("db/data_schema.rb")
|
124
|
-
allow(File).to receive(:exist?).and_return(true)
|
125
|
-
allow(subject).to receive(:load_schema)
|
126
|
-
allow(subject).to receive(:load_schema_current)
|
127
|
-
allow(subject).to receive(:migrate_with_data)
|
128
|
-
allow(subject).to receive(:dump_schema)
|
129
|
-
allow(DataMigrate::Tasks::DataMigrateTasks).to receive(:dump)
|
130
|
-
allow(subject).to receive(:load_seed)
|
131
|
-
|
132
|
-
configurations = ActiveRecord::DatabaseConfigurations.new([db_config])
|
133
|
-
allow(ActiveRecord::Base).to receive(:configurations).and_return(configurations)
|
134
|
-
end
|
135
|
-
|
136
|
-
context "when the database does not exist" do
|
137
|
-
before do
|
138
|
-
allow(subject).to receive(:database_exists?).with(connection).and_return(false)
|
139
|
-
allow_any_instance_of(ActiveRecord::Tasks::DatabaseTasks).to receive(:create)
|
140
|
-
.and_return(true)
|
141
|
-
end
|
142
|
-
|
143
|
-
it "creates the database" do
|
144
|
-
expect_any_instance_of(ActiveRecord::Tasks::DatabaseTasks).to receive(:create)
|
145
|
-
.with(db_config)
|
146
|
-
subject.prepare_all_with_data
|
147
|
-
end
|
148
|
-
|
149
|
-
it "loads the schema" do
|
150
|
-
expect(subject).to receive(:load_schema).with(
|
151
|
-
db_config,
|
152
|
-
subject.send(:schema_format),
|
153
|
-
nil
|
154
|
-
)
|
155
|
-
subject.prepare_all_with_data
|
156
|
-
end
|
157
|
-
|
158
|
-
it "loads the current data schema" do
|
159
|
-
expect(subject).to receive(:load_schema_current).with(:ruby, ENV["DATA_SCHEMA"])
|
160
|
-
subject.prepare_all_with_data
|
161
|
-
end
|
162
|
-
|
163
|
-
it "runs migrations with data" do
|
164
|
-
expect(subject).to receive(:migrate_with_data)
|
165
|
-
subject.prepare_all_with_data
|
166
|
-
end
|
167
|
-
|
168
|
-
it "dumps the schema after migration" do
|
169
|
-
expect(subject).to receive(:dump_schema).with(db_config)
|
170
|
-
expect(DataMigrate::Tasks::DataMigrateTasks).to receive(:dump)
|
171
|
-
subject.prepare_all_with_data
|
172
|
-
end
|
173
|
-
|
174
|
-
it "loads seed data" do
|
175
|
-
expect(subject).to receive(:load_seed)
|
176
|
-
subject.prepare_all_with_data
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
context "when the database exists" do
|
181
|
-
before do
|
182
|
-
allow(subject).to receive(:database_exists?).with(connection).and_return(true)
|
183
|
-
end
|
184
|
-
|
185
|
-
it "does not create the database" do
|
186
|
-
expect(ActiveRecord::Tasks::DatabaseTasks).not_to receive(:create)
|
187
|
-
subject.prepare_all_with_data
|
188
|
-
end
|
189
|
-
|
190
|
-
it "does not load the schema" do
|
191
|
-
expect(subject).not_to receive(:load_schema)
|
192
|
-
expect(subject).not_to receive(:load_schema_current)
|
193
|
-
subject.prepare_all_with_data
|
194
|
-
end
|
195
|
-
|
196
|
-
it "runs migrations with data" do
|
197
|
-
expect(subject).to receive(:migrate_with_data)
|
198
|
-
subject.prepare_all_with_data
|
199
|
-
end
|
200
|
-
|
201
|
-
it "dumps the schema after migration" do
|
202
|
-
expect(subject).to receive(:dump_schema).with(db_config)
|
203
|
-
expect(DataMigrate::Tasks::DataMigrateTasks).to receive(:dump)
|
204
|
-
subject.prepare_all_with_data
|
205
|
-
end
|
206
|
-
|
207
|
-
it "does not load seed data" do
|
208
|
-
expect(subject).not_to receive(:load_seed)
|
209
|
-
subject.prepare_all_with_data
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe DataMigrate::Migration do
|
6
|
-
describe ".table_name" do
|
7
|
-
it "returns correct table name" do
|
8
|
-
expect(subject.table_name).to eq("data_migrations")
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe ".index_name" do
|
13
|
-
it "returns correct primary key name" do
|
14
|
-
expect(subject.primary_key).to eq("version")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,117 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe DataMigrate::DataMigrator do
|
6
|
-
let(:context) { DataMigrate::MigrationContext.new("spec/db/data") }
|
7
|
-
let(:schema_context) { ActiveRecord::MigrationContext.new("spec/db/migrate", ar_schema_migration) }
|
8
|
-
let(:db_config) do
|
9
|
-
{
|
10
|
-
adapter: "sqlite3",
|
11
|
-
database: "spec/db/test.db"
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
before do
|
16
|
-
ActiveRecord::Base.establish_connection(db_config)
|
17
|
-
DataMigrate::RailsHelper.schema_migration.create_table
|
18
|
-
DataMigrate::RailsHelper.data_schema_migration.create_table
|
19
|
-
end
|
20
|
-
|
21
|
-
after do
|
22
|
-
ActiveRecord::Migration.drop_table("data_migrations") rescue nil
|
23
|
-
ActiveRecord::Migration.drop_table("schema_migrations") rescue nil
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "migrate" do
|
27
|
-
it "migrates existing file" do
|
28
|
-
context.migrate(nil)
|
29
|
-
context.migrations_status
|
30
|
-
versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
|
31
|
-
expect(versions.count).to eq(2)
|
32
|
-
expect(versions).to include("20091231235959")
|
33
|
-
expect(versions).to include("20171231235959")
|
34
|
-
end
|
35
|
-
|
36
|
-
it "undo migration" do
|
37
|
-
context.migrate(nil)
|
38
|
-
context.run(:down, 20171231235959)
|
39
|
-
versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
|
40
|
-
expect(versions.count).to eq(1)
|
41
|
-
expect(versions).to include("20091231235959")
|
42
|
-
end
|
43
|
-
|
44
|
-
it "does not do anything if migration is undone twice" do
|
45
|
-
context.migrate(nil)
|
46
|
-
expect {
|
47
|
-
context.run(:down, 20171231235959)
|
48
|
-
}.to output(/Undoing SuperUpdate/).to_stdout
|
49
|
-
expect {
|
50
|
-
context.run(:down, 20171231235959)
|
51
|
-
}.not_to output(/Undoing SuperUpdate/).to_stdout
|
52
|
-
end
|
53
|
-
|
54
|
-
it "runs a specific migration" do
|
55
|
-
context.run(:up, 20171231235959)
|
56
|
-
versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
|
57
|
-
expect(versions.count).to eq(1)
|
58
|
-
expect(versions).to include("20171231235959")
|
59
|
-
end
|
60
|
-
|
61
|
-
it "does not do anything if migration is ran twice" do
|
62
|
-
expect {
|
63
|
-
context.run(:up, 20171231235959)
|
64
|
-
}.to output(/Doing SuperUpdate/).to_stdout
|
65
|
-
expect {
|
66
|
-
context.run(:down, 20171231235959)
|
67
|
-
}.not_to output(/Doing SuperUpdate/).to_stdout
|
68
|
-
end
|
69
|
-
|
70
|
-
it "alerts for an invalid specific migration" do
|
71
|
-
expect {
|
72
|
-
context.run(:up, 201712312)
|
73
|
-
}.to raise_error(
|
74
|
-
ActiveRecord::UnknownMigrationVersionError,
|
75
|
-
/No migration with version number 201712312/
|
76
|
-
)
|
77
|
-
end
|
78
|
-
|
79
|
-
it "rolls back latest migration" do
|
80
|
-
context.migrate(nil)
|
81
|
-
expect {
|
82
|
-
context.rollback
|
83
|
-
}.to output(/Undoing SuperUpdate/).to_stdout
|
84
|
-
versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
|
85
|
-
expect(versions.count).to eq(1)
|
86
|
-
expect(versions).to include("20091231235959")
|
87
|
-
end
|
88
|
-
|
89
|
-
it "rolls back 2 migrations" do
|
90
|
-
context.migrate(nil)
|
91
|
-
schema_context.migrate(nil)
|
92
|
-
expect {
|
93
|
-
context.rollback(2)
|
94
|
-
}.to output(/Undoing SomeName/).to_stdout
|
95
|
-
versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
|
96
|
-
expect(versions.count).to eq(0)
|
97
|
-
end
|
98
|
-
|
99
|
-
it "rolls back 2 migrations" do
|
100
|
-
context.migrate(nil)
|
101
|
-
expect {
|
102
|
-
context.rollback(2)
|
103
|
-
}.to output(/Undoing SomeName/).to_stdout
|
104
|
-
versions = DataMigrate::RailsHelper.data_schema_migration.normalized_versions
|
105
|
-
expect(versions.count).to eq(0)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
# schema migration changed in Rails 7.2, from the connection to the pool object.
|
110
|
-
def ar_schema_migration
|
111
|
-
if ActiveRecord::Base.connection_pool.respond_to?(:schema_migration)
|
112
|
-
ActiveRecord::Base.connection_pool.schema_migration
|
113
|
-
else
|
114
|
-
ActiveRecord::Base.connection.schema_migration
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe DataMigrate::SchemaDumper do
|
6
|
-
let(:subject) { DataMigrate::SchemaDumper }
|
7
|
-
let(:fixture_file_timestamps) do
|
8
|
-
%w[20091231235959 20101231235959 20111231235959]
|
9
|
-
end
|
10
|
-
|
11
|
-
before do
|
12
|
-
DataMigrate::RailsHelper.schema_migration.create_table
|
13
|
-
DataMigrate::RailsHelper.data_schema_migration.create_table
|
14
|
-
|
15
|
-
fixture_file_timestamps.map do |t|
|
16
|
-
DataMigrate::RailsHelper.data_schema_migration.create_version(t)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
after do
|
21
|
-
ActiveRecord::Migration.drop_table("data_migrations") rescue nil
|
22
|
-
ActiveRecord::Migration.drop_table("schema_migrations") rescue nil
|
23
|
-
end
|
24
|
-
|
25
|
-
describe ".dump" do
|
26
|
-
it "writes the define method with the version key to the stream" do
|
27
|
-
stream = StringIO.new
|
28
|
-
DataMigrate::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
29
|
-
stream.rewind
|
30
|
-
|
31
|
-
last_version = fixture_file_timestamps.last
|
32
|
-
expected = "DataMigrate::Data.define(version: #{last_version})"
|
33
|
-
expect(stream.read).to include expected
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,104 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe DataMigrate::SchemaMigration do
|
6
|
-
let(:subject) { DataMigrate::SchemaMigration }
|
7
|
-
let(:migration_path) { "spec/db/migrate" }
|
8
|
-
let(:fixture_file_timestamps) do
|
9
|
-
%w[20091231235959 20101231235959 20111231235959]
|
10
|
-
end
|
11
|
-
let(:db_config) do
|
12
|
-
{
|
13
|
-
adapter: "sqlite3",
|
14
|
-
database: "spec/db/test.db"
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
|
-
before do
|
19
|
-
ActiveRecord::Base.establish_connection(db_config)
|
20
|
-
DataMigrate::RailsHelper.schema_migration.create_table
|
21
|
-
DataMigrate::RailsHelper.data_schema_migration.create_table
|
22
|
-
end
|
23
|
-
|
24
|
-
after do
|
25
|
-
ActiveRecord::Migration.drop_table("data_migrations") rescue nil
|
26
|
-
ActiveRecord::Migration.drop_table("schema_migrations") rescue nil
|
27
|
-
end
|
28
|
-
|
29
|
-
describe :pending_schema_migrations do
|
30
|
-
it "list sorted schema migrations" do
|
31
|
-
expect(subject).to receive(:migrations_paths) {
|
32
|
-
migration_path
|
33
|
-
}
|
34
|
-
|
35
|
-
migrations = subject.pending_schema_migrations
|
36
|
-
|
37
|
-
expect(migrations.count).to eq 2
|
38
|
-
expect(migrations[0][:version]).to eq(20131111111111)
|
39
|
-
expect(migrations[1][:version]).to eq(20202020202011)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe :run do
|
44
|
-
it "can run up task" do
|
45
|
-
expect {
|
46
|
-
subject.run(:up, migration_path, 20202020202011)
|
47
|
-
}.to output(/20202020202011 DbMigration: migrating/).to_stdout
|
48
|
-
versions = DataMigrate::RailsHelper.schema_migration.normalized_versions
|
49
|
-
expect(versions.first).to eq("20202020202011")
|
50
|
-
end
|
51
|
-
|
52
|
-
it "can run down task" do
|
53
|
-
subject.run(:up, migration_path, 20202020202011)
|
54
|
-
|
55
|
-
expect {
|
56
|
-
subject.run(:down, migration_path, 20202020202011)
|
57
|
-
}.to output(/Undoing DbMigration/).to_stdout
|
58
|
-
|
59
|
-
versions = DataMigrate::RailsHelper.schema_migration.normalized_versions
|
60
|
-
|
61
|
-
expect(versions.count).to eq(0)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe :migrations_paths do
|
66
|
-
context 'when a db_name is configured' do
|
67
|
-
let(:config) { double(:config) }
|
68
|
-
let(:paths) { ['spec/db/migrate', 'spec/db/migrate/other'] }
|
69
|
-
let(:specification_name) { "primary" }
|
70
|
-
let(:config_options) do
|
71
|
-
if Gem::Dependency.new("railties", "~> 6.1").match?("railties", Gem.loaded_specs["railties"].version)
|
72
|
-
{ env_name: Rails.env, spec_name: specification_name }
|
73
|
-
else
|
74
|
-
{ env_name: Rails.env, name: specification_name }
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
before do
|
79
|
-
@original_config_spec_name = DataMigrate.config.spec_name
|
80
|
-
|
81
|
-
DataMigrate.configure do |config|
|
82
|
-
config.spec_name = specification_name
|
83
|
-
end
|
84
|
-
|
85
|
-
allow(ActiveRecord::Base.configurations)
|
86
|
-
.to receive(:configs_for)
|
87
|
-
.with(config_options)
|
88
|
-
.and_return(config)
|
89
|
-
allow(config).to receive(:migrations_paths).and_return(paths)
|
90
|
-
end
|
91
|
-
|
92
|
-
after do
|
93
|
-
DataMigrate.configure do |config|
|
94
|
-
config.spec_name = @original_config_spec_name
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'lists schema migration paths' do
|
99
|
-
expect(subject.migrations_paths.size).to eq(paths.count)
|
100
|
-
expect(subject.migrations_paths).to eq(paths)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe DataMigrate::StatusService do
|
6
|
-
let(:subject) { DataMigrate::StatusService }
|
7
|
-
let(:stream) { StringIO.new }
|
8
|
-
let(:stream_data) { stream.read }
|
9
|
-
let(:connection_db_config) do
|
10
|
-
if Gem::Dependency.new("railties", ">= 6.1").match?("railties", Gem.loaded_specs["railties"].version)
|
11
|
-
ActiveRecord::Base.connection_db_config
|
12
|
-
else
|
13
|
-
ActiveRecord::Base.configurations.configs_for.first
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "table does not exists" do
|
18
|
-
before do
|
19
|
-
allow_any_instance_of(subject).to receive(:table_name) { "bogus"}
|
20
|
-
|
21
|
-
subject.dump(connection_db_config, stream)
|
22
|
-
stream.rewind
|
23
|
-
end
|
24
|
-
|
25
|
-
it "show error message" do
|
26
|
-
expect(stream_data).to include("Data migrations table does not exist")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "table exists" do
|
31
|
-
let(:fixture_file_timestamps) do
|
32
|
-
%w[20091231235959 20101231235959 20111231235959]
|
33
|
-
end
|
34
|
-
|
35
|
-
before do
|
36
|
-
DataMigrate::RailsHelper.schema_migration.create_table
|
37
|
-
DataMigrate::RailsHelper.data_schema_migration.create_table
|
38
|
-
|
39
|
-
fixture_file_timestamps.map do |t|
|
40
|
-
DataMigrate::RailsHelper.data_schema_migration.create_version(t)
|
41
|
-
end
|
42
|
-
|
43
|
-
subject.dump(connection_db_config, stream)
|
44
|
-
stream.rewind
|
45
|
-
end
|
46
|
-
|
47
|
-
after do
|
48
|
-
ActiveRecord::Migration.drop_table("data_migrations") rescue nil
|
49
|
-
ActiveRecord::Migration.drop_table("schema_migrations") rescue nil
|
50
|
-
end
|
51
|
-
|
52
|
-
it "shows successfully executed migration" do
|
53
|
-
expected = " up 20091231235959 Some name"
|
54
|
-
expect(stream_data).to include expected
|
55
|
-
end
|
56
|
-
|
57
|
-
it "excludes files without .rb extension" do
|
58
|
-
expected = "20181128000207 Excluded file"
|
59
|
-
expect(stream_data).to_not include expected
|
60
|
-
end
|
61
|
-
|
62
|
-
it "shows missing file migration" do
|
63
|
-
expected = " up 20101231235959 ********** NO FILE **********"
|
64
|
-
expect(stream_data).to include expected
|
65
|
-
end
|
66
|
-
|
67
|
-
it "shows migration that has not run yet" do
|
68
|
-
expected = " down 20171231235959 Super update"
|
69
|
-
expect(stream_data).to include expected
|
70
|
-
end
|
71
|
-
|
72
|
-
it "outputs migrations in chronological order" do
|
73
|
-
expect(stream_data.index("20091231235959")).to be < stream_data.index("20111231235959")
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|