Merge pull request #3401 from consul/backport-remove_obsolete_rake_tasks
Remove obsolete rake tasks
This commit is contained in:
@@ -13,22 +13,4 @@ namespace :budgets do
|
||||
|
||||
end
|
||||
|
||||
namespace :phases do
|
||||
desc "Generates Phases for existing Budgets without them & migrates description_* attributes"
|
||||
task generate_missing: :environment do
|
||||
Budget.where.not(id: Budget::Phase.all.pluck(:budget_id).uniq.compact).each do |budget|
|
||||
Budget::Phase::PHASE_KINDS.each do |phase|
|
||||
Budget::Phase.create(
|
||||
budget: budget,
|
||||
kind: phase,
|
||||
description: budget.send("description_#{phase}"),
|
||||
prev_phase: budget.phases&.last,
|
||||
starts_at: budget.phases&.last&.ends_at || Date.current,
|
||||
ends_at: (budget.phases&.last&.ends_at || Date.current) + 1.month
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
namespace :communities do
|
||||
|
||||
desc "Associate community to proposals and budget investments"
|
||||
task associate_community: :environment do
|
||||
|
||||
Proposal.all.each do |proposal|
|
||||
if proposal.community.blank?
|
||||
community = Community.create
|
||||
proposal.update(community_id: community.id)
|
||||
end
|
||||
end
|
||||
|
||||
Budget::Investment.all.each do |investment|
|
||||
if investment.community.blank?
|
||||
community = Community.create
|
||||
investment.update(community_id: community.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,89 +0,0 @@
|
||||
namespace :globalize do
|
||||
def translatable_classes
|
||||
[
|
||||
AdminNotification,
|
||||
Banner,
|
||||
Milestone,
|
||||
I18nContent,
|
||||
Legislation::DraftVersion,
|
||||
Legislation::Process,
|
||||
Legislation::Question,
|
||||
Legislation::QuestionOption,
|
||||
Poll,
|
||||
Poll::Question,
|
||||
Poll::Question::Answer,
|
||||
SiteCustomization::Page,
|
||||
Widget::Card
|
||||
]
|
||||
end
|
||||
|
||||
def migrate_data
|
||||
@errored = false
|
||||
|
||||
translatable_classes.each do |model_class|
|
||||
logger.info "Migrating #{model_class} data"
|
||||
|
||||
fields = model_class.translated_attribute_names
|
||||
|
||||
model_class.find_each do |record|
|
||||
fields.each do |field|
|
||||
locale = if model_class == SiteCustomization::Page && record.locale.present?
|
||||
record.locale
|
||||
else
|
||||
I18n.locale
|
||||
end
|
||||
|
||||
translated_field = record.localized_attr_name_for(field, locale)
|
||||
|
||||
if record.send(translated_field).blank?
|
||||
record.send(:"#{translated_field}=", record.untranslated_attributes[field.to_s])
|
||||
end
|
||||
end
|
||||
|
||||
begin
|
||||
record.save!
|
||||
rescue ActiveRecord::RecordInvalid
|
||||
logger.warn "Failed to save #{model_class} with id #{record.id}"
|
||||
@errored = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def logger
|
||||
@logger ||= Logger.new(STDOUT).tap do |logger|
|
||||
logger.formatter = proc { |severity, _datetime, _progname, msg| "#{severity} #{msg}\n" }
|
||||
end
|
||||
end
|
||||
|
||||
def errored?
|
||||
@errored
|
||||
end
|
||||
|
||||
desc "Simulates migrating existing data to translation tables"
|
||||
task simulate_migrate_data: :environment do
|
||||
logger.info "Starting migrate data simulation"
|
||||
|
||||
ActiveRecord::Base.transaction do
|
||||
migrate_data
|
||||
raise ActiveRecord::Rollback
|
||||
end
|
||||
|
||||
if errored?
|
||||
logger.warn "Some database records will not be migrated"
|
||||
else
|
||||
logger.info "Migrate data simulation ended successfully"
|
||||
end
|
||||
end
|
||||
|
||||
desc "Migrates existing data to translation tables"
|
||||
task migrate_data: :environment do
|
||||
logger.info "Starting data migration"
|
||||
migrate_data
|
||||
logger.info "Finished data migration"
|
||||
|
||||
if errored?
|
||||
logger.warn "Some database records couldn't be migrated; please check the log messages"
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,13 +0,0 @@
|
||||
namespace :homepage do
|
||||
|
||||
desc "Initialize feeds available in homepage"
|
||||
task create_feeds: :environment do
|
||||
%w(proposals debates processes).each do |kind|
|
||||
Widget::Feed.create(kind: kind)
|
||||
|
||||
Setting["feature.homepage.widgets.feeds.proposals"] = true
|
||||
Setting["feature.homepage.widgets.feeds.debates"] = true
|
||||
Setting["feature.homepage.widgets.feeds.processes"] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,22 +0,0 @@
|
||||
namespace :locales do
|
||||
desc "Migrate all localization files to new structure for a given locale name as argument"
|
||||
task :migrate_structure, [:locale] => [:environment] do |_t, args|
|
||||
locale = args[:locale]
|
||||
puts "Moving files for locale: #{locale}"
|
||||
|
||||
# This creates ./config/locales/en/ directory
|
||||
system "mkdir ./config/locales/#{locale}"
|
||||
|
||||
# This moves from ./config/locales/en.yml to ./config/locales/en/general.yml
|
||||
system "mv ./config/locales/#{locale}.yml ./config/locales/#{locale}/general.yml"
|
||||
|
||||
# This moves from ./config/locales/admin.en.yml to ./config/locales/en/admin.en.yml
|
||||
system "mv ./config/locales/*.#{locale}.yml ./config/locales/#{locale}/"
|
||||
|
||||
# This moves from ./config/locales/en/admin.en.yml to ./config/locales/en/admin.yml
|
||||
system "find ./config/locales/ -name \"*.#{locale}.yml\" -exec sh -c 'mv \"$1\" \"${1%.#{locale}.yml}.yml\"' _ {} \\;"
|
||||
|
||||
puts "Moved!"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
namespace :map_locations do
|
||||
desc "Destroy all empty MapLocation instances found in the database"
|
||||
task destroy: :environment do
|
||||
MapLocation.where(longitude: nil, latitude: nil, zoom: nil).each do |map_location|
|
||||
map_location.destroy
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,106 +0,0 @@
|
||||
namespace :milestones do
|
||||
|
||||
def generate_table_migration_sql(new_table:, old_table:, columns:)
|
||||
from_cols = ["id", *columns.keys]
|
||||
to_cols = ["id", *columns.values]
|
||||
<<~SQL
|
||||
INSERT INTO #{new_table} (#{to_cols.join(", ")})
|
||||
SELECT #{from_cols.join(", ")} FROM #{old_table};
|
||||
SQL
|
||||
end
|
||||
|
||||
def migrate_table!(new_table:, old_table:, columns:)
|
||||
puts "Migrating data from '#{old_table}' to '#{new_table}'..."
|
||||
result = ActiveRecord::Base.connection.execute(
|
||||
generate_table_migration_sql(old_table: old_table,
|
||||
new_table: new_table,
|
||||
columns: columns)
|
||||
|
||||
)
|
||||
puts "#{result.cmd_tuples} rows affected"
|
||||
end
|
||||
|
||||
def populate_column!(table:, column:, value:)
|
||||
puts "Populating column '#{column}' from table '#{table}' with '#{value}'..."
|
||||
result = ActiveRecord::Base.connection.execute(
|
||||
"UPDATE #{table} SET #{column} = '#{value}';"
|
||||
)
|
||||
puts "#{result.cmd_tuples} rows affected"
|
||||
end
|
||||
|
||||
def count_rows(table)
|
||||
ActiveRecord::Base.connection.query("SELECT COUNT(*) FROM #{table};")[0][0].to_i
|
||||
end
|
||||
|
||||
desc "Migrate milestones and milestone status data after making the model polymorphic"
|
||||
task migrate: :environment do
|
||||
# This script copies all milestone-related data from the old tables to
|
||||
# the new ones (preserving all primary keys). All 3 of the new tables
|
||||
# must be empty.
|
||||
#
|
||||
# To clear the new tables to test this script:
|
||||
#
|
||||
# DELETE FROM milestone_statuses;
|
||||
# DELETE FROM milestones;
|
||||
# DELETE FROM milestone_translations;
|
||||
#
|
||||
|
||||
start = Time.now
|
||||
|
||||
ActiveRecord::Base.transaction do
|
||||
migrate_table! old_table: "budget_investment_statuses",
|
||||
new_table: "milestone_statuses",
|
||||
columns: {"name" => "name",
|
||||
"description" => "description",
|
||||
"hidden_at" => "hidden_at",
|
||||
"created_at" => "created_at",
|
||||
"updated_at" => "updated_at"}
|
||||
|
||||
migrate_table! old_table: "budget_investment_milestones",
|
||||
new_table: "milestones",
|
||||
columns: {"investment_id" => "milestoneable_id",
|
||||
"title" => "title",
|
||||
"description" => "description",
|
||||
"created_at" => "created_at",
|
||||
"updated_at" => "updated_at",
|
||||
"publication_date" => "publication_date",
|
||||
"status_id" => "status_id"}
|
||||
|
||||
populate_column! table: "milestones",
|
||||
column: "milestoneable_type",
|
||||
value: "Budget::Investment"
|
||||
|
||||
migrate_table! old_table: "budget_investment_milestone_translations",
|
||||
new_table: "milestone_translations",
|
||||
columns: {"budget_investment_milestone_id" => "milestone_id",
|
||||
"locale" => "locale",
|
||||
"created_at" => "created_at",
|
||||
"updated_at" => "updated_at",
|
||||
"title" => "title",
|
||||
"description" => "description"}
|
||||
|
||||
Image.where(imageable_type: "Budget::Investment::Milestone").
|
||||
update_all(imageable_type: "Milestone")
|
||||
Document.where(documentable_type: "Budget::Investment::Milestone").
|
||||
update_all(documentable_type: "Milestone")
|
||||
|
||||
puts "Verifying that all rows were copied..."
|
||||
|
||||
{
|
||||
"budget_investment_milestones" => "milestones",
|
||||
"budget_investment_statuses" => "milestone_statuses",
|
||||
"budget_investment_milestone_translations" => "milestone_translations"
|
||||
}.each do |original_table, migrated_table|
|
||||
ActiveRecord::Base.connection.execute(
|
||||
"select setval('#{migrated_table}_id_seq', (select max(id) from #{migrated_table}));"
|
||||
)
|
||||
|
||||
unless count_rows(original_table) == count_rows(migrated_table)
|
||||
raise "Number of rows of old and new tables do not match! Rolling back transaction..."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
puts "Finished in %.3f seconds" % (Time.now - start)
|
||||
end
|
||||
end
|
||||
@@ -1,6 +0,0 @@
|
||||
namespace :polls do
|
||||
desc "Adds created_at and updated_at values to existing polls"
|
||||
task initialize_timestamps: :environment do
|
||||
Poll.update_all(created_at: Time.current, updated_at: Time.current)
|
||||
end
|
||||
end
|
||||
@@ -1,42 +1,5 @@
|
||||
namespace :settings do
|
||||
|
||||
desc "Changes Setting key per_page_code for per_page_code_head"
|
||||
task per_page_code_migration: :environment do
|
||||
per_page_code = Setting.where(key: "per_page_code").first
|
||||
per_page_code_head = Setting.where(key: "per_page_code_head").first
|
||||
|
||||
Setting["per_page_code_head"] = per_page_code&.value.to_s if per_page_code_head.blank?
|
||||
per_page_code.destroy if per_page_code.present?
|
||||
end
|
||||
|
||||
desc "Create new Attached Documents feature setting"
|
||||
task create_attached_documents_setting: :environment do
|
||||
Setting["feature.allow_attached_documents"] = true
|
||||
end
|
||||
|
||||
desc "Enable recommendations settings"
|
||||
task enable_recommendations: :environment do
|
||||
Setting["feature.user.recommendations"] = true
|
||||
Setting["feature.user.recommendations_on_debates"] = true
|
||||
Setting["feature.user.recommendations_on_proposals"] = true
|
||||
end
|
||||
|
||||
desc "Enable Help page"
|
||||
task enable_help_page: :environment do
|
||||
Setting["feature.help_page"] = true
|
||||
end
|
||||
|
||||
desc "Enable Featured proposals"
|
||||
task enable_featured_proposals: :environment do
|
||||
Setting["feature.featured_proposals"] = true
|
||||
Setting["featured_proposals_number"] = 3
|
||||
end
|
||||
|
||||
desc "Create new period to calculate hot_score"
|
||||
task create_hot_score_period_setting: :environment do
|
||||
Setting["hot_score_period_in_days"] = 31
|
||||
end
|
||||
|
||||
desc "Remove deprecated settings"
|
||||
task remove_deprecated_settings: :environment do
|
||||
deprecated_keys = [
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
namespace :slugs do
|
||||
desc "Generate slug attribute for objects from classes that use Sluggable concern"
|
||||
task generate: :environment do
|
||||
%w(Budget Budget::Heading Budget::Group).each do |class_name|
|
||||
class_name.constantize.find_each(&:generate_slug)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,10 +0,0 @@
|
||||
namespace :users do
|
||||
|
||||
desc "Enable recommendations for existing users"
|
||||
task enable_recommendations: :environment do
|
||||
User.find_each do |user|
|
||||
user.update(recommended_debates: true, recommended_proposals: true)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,10 +0,0 @@
|
||||
namespace :web_sections do
|
||||
desc "Generate web sections for banners"
|
||||
task generate: :environment do
|
||||
WebSection.create(name: "homepage")
|
||||
WebSection.create(name: "debates")
|
||||
WebSection.create(name: "proposals")
|
||||
WebSection.create(name: "budgets")
|
||||
WebSection.create(name: "help_page")
|
||||
end
|
||||
end
|
||||
@@ -1,43 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe "Communities Rake" do
|
||||
|
||||
describe "#associate_community" do
|
||||
|
||||
let :run_rake_task do
|
||||
Rake::Task["communities:associate_community"].reenable
|
||||
Rake.application.invoke_task "communities:associate_community"
|
||||
end
|
||||
|
||||
context "Associate community to Proposal" do
|
||||
|
||||
it "When proposal has not community_id" do
|
||||
proposal = create(:proposal)
|
||||
proposal.update(community_id: nil)
|
||||
expect(proposal.community).to be_nil
|
||||
|
||||
run_rake_task
|
||||
proposal.reload
|
||||
|
||||
expect(proposal.community).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
context "Associate community to Budget Investment" do
|
||||
|
||||
it "When budget investment has not community_id" do
|
||||
investment = create(:budget_investment)
|
||||
investment.update(community_id: nil)
|
||||
expect(investment.community).to be_nil
|
||||
|
||||
run_rake_task
|
||||
investment.reload
|
||||
|
||||
expect(investment.community).to be_present
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,162 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe "Globalize tasks" do
|
||||
|
||||
describe "#migrate_data" do
|
||||
|
||||
let :run_rake_task do
|
||||
Rake::Task["globalize:migrate_data"].reenable
|
||||
Rake.application.invoke_task "globalize:migrate_data"
|
||||
end
|
||||
|
||||
context "Original data with no translated data" do
|
||||
let(:poll) do
|
||||
create(:poll).tap do |poll|
|
||||
poll.translations.delete_all
|
||||
poll.update_column(:name, "Original")
|
||||
poll.reload
|
||||
end
|
||||
end
|
||||
|
||||
it "copies the original data" do
|
||||
expect(poll.send(:"name_#{I18n.locale}")).to be nil
|
||||
expect(poll.name).to eq("Original")
|
||||
|
||||
run_rake_task
|
||||
poll.reload
|
||||
|
||||
expect(poll.name).to eq("Original")
|
||||
expect(poll.send(:"name_#{I18n.locale}")).to eq("Original")
|
||||
end
|
||||
end
|
||||
|
||||
context "Original data with blank translated data" do
|
||||
let(:banner) do
|
||||
create(:banner).tap do |banner|
|
||||
banner.update_column(:title, "Original")
|
||||
banner.translations.first.update_column(:title, "")
|
||||
end
|
||||
end
|
||||
|
||||
it "copies the original data" do
|
||||
expect(banner.title).to eq("")
|
||||
|
||||
run_rake_task
|
||||
banner.reload
|
||||
|
||||
expect(banner.title).to eq("Original")
|
||||
expect(banner.send(:"title_#{I18n.locale}")).to eq("Original")
|
||||
end
|
||||
end
|
||||
|
||||
context "Original data with translated data" do
|
||||
let(:notification) do
|
||||
create(:admin_notification, title: "Translated").tap do |notification|
|
||||
notification.update_column(:title, "Original")
|
||||
end
|
||||
end
|
||||
|
||||
it "maintains the translated data" do
|
||||
expect(notification.title).to eq("Translated")
|
||||
|
||||
run_rake_task
|
||||
notification.reload
|
||||
|
||||
expect(notification.title).to eq("Translated")
|
||||
expect(notification.send(:"title_#{I18n.locale}")).to eq("Translated")
|
||||
end
|
||||
end
|
||||
|
||||
context "Custom page with a different locale and no translations" do
|
||||
let(:page) do
|
||||
create(:site_customization_page, locale: :fr).tap do |page|
|
||||
page.translations.delete_all
|
||||
page.update_column(:title, "en Français")
|
||||
page.reload
|
||||
end
|
||||
end
|
||||
|
||||
it "copies the original data to both the page's locale" do
|
||||
expect(page.title).to eq("en Français")
|
||||
expect(page.title_fr).to be nil
|
||||
expect(page.send(:"title_#{I18n.locale}")).to be nil
|
||||
|
||||
run_rake_task
|
||||
page.reload
|
||||
|
||||
expect(page.title).to eq("en Français")
|
||||
expect(page.title_fr).to eq("en Français")
|
||||
expect(page.send(:"title_#{I18n.locale}")).to be nil
|
||||
end
|
||||
end
|
||||
|
||||
context "Custom page with a different locale and existing translations" do
|
||||
let(:page) do
|
||||
create(:site_customization_page, title: "In English", locale: :fr).tap do |page|
|
||||
page.update_column(:title, "en Français")
|
||||
end
|
||||
end
|
||||
|
||||
it "copies the original data to the page's locale" do
|
||||
expect(page.title_fr).to be nil
|
||||
expect(page.title).to eq("In English")
|
||||
|
||||
run_rake_task
|
||||
page.reload
|
||||
|
||||
expect(page.title).to eq("In English")
|
||||
expect(page.title_fr).to eq("en Français")
|
||||
expect(page.send(:"title_#{I18n.locale}")).to eq("In English")
|
||||
end
|
||||
end
|
||||
|
||||
context "Invalid data" do
|
||||
let!(:valid_process) do
|
||||
create(:legislation_process).tap do |process|
|
||||
process.translations.delete_all
|
||||
process.update_column(:title, "Title")
|
||||
process.reload
|
||||
end
|
||||
end
|
||||
|
||||
let!(:invalid_process) do
|
||||
create(:legislation_process).tap do |process|
|
||||
process.translations.delete_all
|
||||
process.update_column(:title, "")
|
||||
process.reload
|
||||
end
|
||||
end
|
||||
|
||||
it "ignores invalid data and migrates valid data" do
|
||||
expect(valid_process).to be_valid
|
||||
expect(invalid_process).not_to be_valid
|
||||
|
||||
run_rake_task
|
||||
|
||||
expect(valid_process.translations.count).to eq 1
|
||||
expect(valid_process.reload.title).to eq "Title"
|
||||
|
||||
expect(invalid_process.translations.count).to eq 0
|
||||
expect(invalid_process.reload.title).to eq ""
|
||||
end
|
||||
end
|
||||
|
||||
context "locale with non-underscored name" do
|
||||
before { I18n.locale = :"pt-BR" }
|
||||
|
||||
let!(:milestone) do
|
||||
create(:milestone).tap do |milestone|
|
||||
milestone.translations.delete_all
|
||||
milestone.update_column(:title, "Português")
|
||||
milestone.reload
|
||||
end
|
||||
end
|
||||
|
||||
it "runs the migration successfully" do
|
||||
run_rake_task
|
||||
|
||||
expect(milestone.reload.title).to eq "Português"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,20 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe "rake map_locations:destroy" do
|
||||
before do
|
||||
create(:map_location, :proposal_map_location)
|
||||
empty_location = create(:map_location, :proposal_map_location)
|
||||
empty_location.attributes = { longitude: nil, latitude: nil, zoom: nil }
|
||||
empty_location.save(validate: false)
|
||||
end
|
||||
|
||||
let :run_rake_task do
|
||||
Rake.application.invoke_task("map_locations:destroy")
|
||||
end
|
||||
|
||||
it "destroys empty locations" do
|
||||
expect(MapLocation.all.size).to eq(2)
|
||||
run_rake_task
|
||||
expect(MapLocation.all.size).to eq(1)
|
||||
end
|
||||
end
|
||||
@@ -1,147 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe "Milestones tasks" do
|
||||
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.current
|
||||
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.current
|
||||
end
|
||||
|
||||
it "Updates the primary key sequence correctly" do
|
||||
run_rake_task
|
||||
expect { create(:milestone) }.not_to raise_exception
|
||||
end
|
||||
|
||||
context "Milestone has images and documents" do
|
||||
let(:milestone_id) do
|
||||
ActiveRecord::Base.connection.execute(
|
||||
"SELECT MAX(id) FROM budget_investment_milestones;"
|
||||
).to_a.first["max"]
|
||||
end
|
||||
|
||||
let!(:image) do
|
||||
create(:image, imageable_id: milestone_id).tap do |image|
|
||||
image.update_column(:imageable_type, "Budget::Investment::Milestone")
|
||||
end
|
||||
end
|
||||
|
||||
let!(:document) do
|
||||
create(:document, documentable_id: milestone_id).tap do |document|
|
||||
document.update_column(:documentable_type, "Budget::Investment::Milestone")
|
||||
end
|
||||
end
|
||||
|
||||
it "migrates images and documents" do
|
||||
run_rake_task
|
||||
|
||||
expect(Milestone.last.image).to eq image
|
||||
expect(Milestone.last.documents).to eq [document]
|
||||
end
|
||||
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
|
||||
@@ -35,72 +35,6 @@ describe Setting do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#per_page_code_migration" do
|
||||
|
||||
let :run_rake_task do
|
||||
Rake::Task["settings:per_page_code_migration"].reenable
|
||||
Rake.application.invoke_task "settings:per_page_code_migration"
|
||||
end
|
||||
|
||||
context "Neither per_page_code_head or per_page_code Settings exist" do
|
||||
before do
|
||||
Setting.where(key: "per_page_code").first&.destroy
|
||||
Setting.where(key: "per_page_code_head").first&.destroy
|
||||
run_rake_task
|
||||
end
|
||||
|
||||
it "has per_page_code_head setting present and no per_page_code" do
|
||||
expect(Setting.where(key: "per_page_code_head").count).to eq(1)
|
||||
expect(Setting["per_page_code_head"]).to eq(nil)
|
||||
expect(Setting.where(key: "per_page_code").count).to eq(0)
|
||||
end
|
||||
end
|
||||
|
||||
context "Both per_page_code_head or per_page_code Settings exist" do
|
||||
before do
|
||||
Setting["per_page_code"] = "per_page_code"
|
||||
Setting["per_page_code_head"] = "per_page_code_head"
|
||||
run_rake_task
|
||||
end
|
||||
|
||||
it "has per_page_code_head setting present and no per_page_code" do
|
||||
expect(Setting.where(key: "per_page_code_head").count).to eq(1)
|
||||
expect(Setting["per_page_code_head"]).to eq("per_page_code_head")
|
||||
expect(Setting.where(key: "per_page_code").count).to eq(0)
|
||||
end
|
||||
end
|
||||
|
||||
context "per_page_code_head exists, but per_page_code does not" do
|
||||
before do
|
||||
Setting.where(key: "per_page_code").first&.destroy
|
||||
Setting["per_page_code_head"] = "per_page_code_head"
|
||||
run_rake_task
|
||||
end
|
||||
|
||||
it "has per_page_code_head setting present and no per_page_code" do
|
||||
expect(Setting.where(key: "per_page_code_head").count).to eq(1)
|
||||
expect(Setting["per_page_code_head"]).to eq("per_page_code_head")
|
||||
expect(Setting.where(key: "per_page_code").count).to eq(0)
|
||||
end
|
||||
end
|
||||
|
||||
context "per_page_code_head does not exist, but per_page_code does" do
|
||||
before do
|
||||
Setting["per_page_code"] = "per_page_code"
|
||||
Setting.where(key: "per_page_code_head").first&.destroy
|
||||
run_rake_task
|
||||
end
|
||||
|
||||
it "has per_page_code_head setting present and no per_page_code" do
|
||||
expect(Setting.where(key: "per_page_code_head").count).to eq(1)
|
||||
expect(Setting["per_page_code_head"]).to eq("per_page_code")
|
||||
expect(Setting.where(key: "per_page_code").count).to eq(0)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
describe "#rename_setting_keys" do
|
||||
|
||||
let :run_rake_task do
|
||||
|
||||
Reference in New Issue
Block a user