Add Rake task to migrate milestone data to new tables
This commit is contained in:
121
spec/lib/tasks/milestones_spec.rb
Normal file
121
spec/lib/tasks/milestones_spec.rb
Normal file
@@ -0,0 +1,121 @@
|
||||
require "rails_helper"
|
||||
require "rake"
|
||||
|
||||
describe "Milestones tasks" do
|
||||
before do
|
||||
Rake.application.rake_require "tasks/migrate_milestones_and_statuses"
|
||||
Rake::Task.define_task(:environment)
|
||||
end
|
||||
|
||||
describe "#migrate" do
|
||||
let :run_rake_task do
|
||||
Rake::Task["milestones:migrate"].reenable
|
||||
Rake.application.invoke_task "milestones:migrate"
|
||||
end
|
||||
|
||||
let!(:investment) { create(:budget_investment) }
|
||||
|
||||
before do
|
||||
ActiveRecord::Base.connection.execute(
|
||||
"INSERT INTO budget_investment_statuses " +
|
||||
"(name, description, hidden_at, created_at, updated_at) " +
|
||||
"VALUES ('open', 'Good', NULL, '#{Time.current - 1.day}', '#{Time.current}');"
|
||||
)
|
||||
|
||||
status_id = ActiveRecord::Base.connection.execute(
|
||||
"SELECT MAX(id) FROM budget_investment_statuses;"
|
||||
).to_a.first["max"]
|
||||
|
||||
milestone_attributes = {
|
||||
investment_id: investment.id,
|
||||
title: "First",
|
||||
description: "Interesting",
|
||||
publication_date: Date.yesterday,
|
||||
status_id: status_id,
|
||||
created_at: Time.current - 1.day,
|
||||
updated_at: Time.current
|
||||
}
|
||||
|
||||
ActiveRecord::Base.connection.execute(
|
||||
"INSERT INTO budget_investment_milestones " +
|
||||
"(#{milestone_attributes.keys.join(", ")}) " +
|
||||
"VALUES (#{milestone_attributes.values.map { |value| "'#{value}'"}.join(", ")})"
|
||||
)
|
||||
end
|
||||
|
||||
it "migrates statuses" do
|
||||
run_rake_task
|
||||
|
||||
expect(Milestone::Status.count).to be 1
|
||||
|
||||
status = Milestone::Status.first
|
||||
expect(status.name).to eq "open"
|
||||
expect(status.description).to eq "Good"
|
||||
expect(status.hidden_at).to be nil
|
||||
expect(status.created_at.to_date).to eq Date.yesterday
|
||||
expect(status.updated_at.to_date).to eq Date.today
|
||||
end
|
||||
|
||||
it "migrates milestones" do
|
||||
run_rake_task
|
||||
|
||||
expect(Milestone.count).to be 1
|
||||
|
||||
milestone = Milestone.first
|
||||
expect(milestone.milestoneable_id).to eq investment.id
|
||||
expect(milestone.milestoneable_type).to eq "Budget::Investment"
|
||||
expect(milestone.title).to eq "First"
|
||||
expect(milestone.description).to eq "Interesting"
|
||||
expect(milestone.publication_date).to eq Date.yesterday
|
||||
expect(milestone.status_id).to eq Milestone::Status.first.id
|
||||
expect(milestone.created_at.to_date).to eq Date.yesterday
|
||||
expect(milestone.updated_at.to_date).to eq Date.today
|
||||
end
|
||||
|
||||
context "Statuses had been deleted" do
|
||||
before do
|
||||
ActiveRecord::Base.connection.execute(
|
||||
"INSERT INTO budget_investment_statuses " +
|
||||
"(name, description, hidden_at, created_at, updated_at) " +
|
||||
"VALUES ('deleted', 'Del', NULL, '#{Time.current - 1.day}', '#{Time.current}');"
|
||||
)
|
||||
|
||||
ActiveRecord::Base.connection.execute(
|
||||
"DELETE FROM budget_investment_statuses WHERE name='deleted'"
|
||||
)
|
||||
|
||||
ActiveRecord::Base.connection.execute(
|
||||
"INSERT INTO budget_investment_statuses " +
|
||||
"(name, description, hidden_at, created_at, updated_at) " +
|
||||
"VALUES ('new', 'New', NULL, '#{Time.current - 1.day}', '#{Time.current}');"
|
||||
)
|
||||
|
||||
status_id = ActiveRecord::Base.connection.execute(
|
||||
"SELECT MAX(id) FROM budget_investment_statuses;"
|
||||
).to_a.first["max"]
|
||||
|
||||
milestone_attributes = {
|
||||
investment_id: investment.id,
|
||||
title: "Last",
|
||||
description: "Different",
|
||||
publication_date: Date.yesterday,
|
||||
status_id: status_id,
|
||||
created_at: Time.current - 1.day,
|
||||
updated_at: Time.current
|
||||
}
|
||||
|
||||
ActiveRecord::Base.connection.execute(
|
||||
"INSERT INTO budget_investment_milestones " +
|
||||
"(#{milestone_attributes.keys.join(", ")}) " +
|
||||
"VALUES (#{milestone_attributes.values.map { |value| "'#{value}'"}.join(", ")})"
|
||||
)
|
||||
end
|
||||
|
||||
it "migrates the status id correctly" do
|
||||
run_rake_task
|
||||
|
||||
expect(Milestone.last.status_id).to eq Milestone::Status.last.id
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user