diff --git a/app/assets/javascripts/budget_edit_associations.js b/app/assets/javascripts/budget_edit_associations.js
index e37c6e27a..83c7ae3a6 100644
--- a/app/assets/javascripts/budget_edit_associations.js
+++ b/app/assets/javascripts/budget_edit_associations.js
@@ -2,13 +2,13 @@
"use strict";
App.BudgetEditAssociations = {
initialize: function() {
- $(".js-budget-list-checkbox-user").on({
- click: function() {
+ $(".js-budget-users-list [type='checkbox']").on({
+ change: function() {
var admin_count, tracker_count, valuator_count;
- admin_count = $(".js-budget-list-checkbox-administrators:checkbox:checked").length;
- valuator_count = $(".js-budget-list-checkbox-valuators:checkbox:checked").length;
- tracker_count = $(".js-budget-list-checkbox-trackers:checkbox:checked").length;
+ admin_count = $("#administrators_list :checked").length;
+ valuator_count = $("#valuators_list :checked").length;
+ tracker_count = $("#trackers_list :checked").length;
App.I18n.set_pluralize($(".js-budget-show-administrators-list"), admin_count);
App.I18n.set_pluralize($(".js-budget-show-valuators-list"), valuator_count);
diff --git a/app/controllers/admin/budget_investments_controller.rb b/app/controllers/admin/budget_investments_controller.rb
index aab41bbcf..bb71ef946 100644
--- a/app/controllers/admin/budget_investments_controller.rb
+++ b/app/controllers/admin/budget_investments_controller.rb
@@ -36,10 +36,8 @@ class Admin::BudgetInvestmentsController < Admin::BaseController
end
def edit
- load_admins
- load_valuators
+ load_staff
load_valuator_groups
- load_trackers
load_tags
end
@@ -51,10 +49,8 @@ class Admin::BudgetInvestmentsController < Admin::BaseController
Budget::Investment.filter_params(params).to_h),
notice: t("flash.actions.update.budget_investment")
else
- load_admins
- load_valuators
+ load_staff
load_valuator_groups
- load_trackers
load_tags
render :edit
end
@@ -103,18 +99,10 @@ class Admin::BudgetInvestmentsController < Admin::BaseController
@investment = @budget.investments.find(params[:id])
end
- def load_admins
- @admins = @budget.administrators.includes(:user).all
- end
-
- def load_trackers
- @trackers = @budget.trackers.includes(:user).all.order(description: :asc)
- .order("users.email ASC")
- end
-
- def load_valuators
- @valuators = @budget.valuators.includes(:user).all.order(description: :asc)
- .order("users.email ASC")
+ def load_staff
+ @admins = @budget.administrators.includes(:user)
+ @trackers = @budget.trackers.includes(:user).order(description: :asc).order("users.email ASC")
+ @valuators = @budget.valuators.includes(:user).order(description: :asc).order("users.email ASC")
end
def load_valuator_groups
@@ -122,7 +110,7 @@ class Admin::BudgetInvestmentsController < Admin::BaseController
end
def load_tags
- @tags = Budget::Investment.tags_on(:valuation).order(:name).distinct
+ @tags = Budget::Investment.tags_on(:valuation_tags).order(:name).distinct
end
def load_ballot
diff --git a/app/controllers/admin/budgets_controller.rb b/app/controllers/admin/budgets_controller.rb
index 40bb1727f..30395face 100644
--- a/app/controllers/admin/budgets_controller.rb
+++ b/app/controllers/admin/budgets_controller.rb
@@ -17,15 +17,11 @@ class Admin::BudgetsController < Admin::BaseController
end
def new
- load_admins
- load_valuators
- load_trackers
+ load_staff
end
def edit
- load_admins
- load_valuators
- load_trackers
+ load_staff
end
def calculate_winners
@@ -42,9 +38,7 @@ class Admin::BudgetsController < Admin::BaseController
if @budget.update(budget_params)
redirect_to admin_budgets_path, notice: t("admin.budgets.update.notice")
else
- load_admins
- load_valuators
- load_trackers
+ load_staff
render :edit
end
end
@@ -54,9 +48,7 @@ class Admin::BudgetsController < Admin::BaseController
if @budget.save
redirect_to admin_budget_path(@budget), notice: t("admin.budgets.create.notice")
else
- load_admins
- load_valuators
- load_trackers
+ load_staff
render :new
end
end
@@ -78,9 +70,6 @@ class Admin::BudgetsController < Admin::BaseController
descriptions = Budget::Phase::PHASE_KINDS.map { |p| "description_#{p}" }.map(&:to_sym)
valid_attributes = [:phase,
:currency_symbol,
- :help_link,
- :budget_milestone_tags,
- :budget_valuation_tags,
administrator_ids: [],
valuator_ids: [],
tracker_ids: []
@@ -92,15 +81,9 @@ class Admin::BudgetsController < Admin::BaseController
@budget = Budget.find_by_slug_or_id! params[:id]
end
- def load_admins
- @admins = Administrator.includes(:user).all
- end
-
- def load_trackers
- @trackers = Tracker.includes(:user).all.order(description: :asc).order("users.email ASC")
- end
-
- def load_valuators
- @valuators = Valuator.includes(:user).all.order(description: :asc).order("users.email ASC")
+ def load_staff
+ @admins = Administrator.includes(:user)
+ @trackers = Tracker.includes(:user).order(description: :asc).order("users.email ASC")
+ @valuators = Valuator.includes(:user).order(description: :asc).order("users.email ASC")
end
end
diff --git a/app/helpers/budget_executions_helper.rb b/app/helpers/budget_executions_helper.rb
index 8b2123ccc..182fd3fe4 100644
--- a/app/helpers/budget_executions_helper.rb
+++ b/app/helpers/budget_executions_helper.rb
@@ -4,7 +4,7 @@ module BudgetExecutionsHelper
end
def options_for_milestone_tags
- @budget.milestone_tags.map do |tag|
+ @budget.investments_milestone_tags.map do |tag|
["#{tag} (#{@budget.investments.winners.tagged_with(tag).count})", tag]
end
end
diff --git a/app/helpers/budgets_helper.rb b/app/helpers/budgets_helper.rb
index 7915b10a3..ddbc1c093 100644
--- a/app/helpers/budgets_helper.rb
+++ b/app/helpers/budgets_helper.rb
@@ -53,16 +53,8 @@ module BudgetsHelper
Budget::Ballot.where(user: current_user, budget: @budget).first
end
- def investment_tags_select_options(budget)
- tags = Budget::Investment.by_budget(budget).tags_on(:valuation).order(:name).pluck(:name)
- tags = tags.concat budget.budget_valuation_tags.split(",") if budget.budget_valuation_tags.present?
- tags.uniq
- end
-
- def investment_milestone_tags_select_options(budget)
- tags = Budget::Investment.by_budget(budget).tags_on(:milestone).order(:name).pluck(:name)
- tags = tags.concat budget.budget_milestone_tags.split(",") if budget.budget_milestone_tags.present?
- tags.uniq
+ def investment_tags_select_options(budget, context)
+ budget.investments.tags_on(context).order(:name).pluck(:name)
end
def unfeasible_or_unselected_filter
diff --git a/app/helpers/translatable_form_helper.rb b/app/helpers/translatable_form_helper.rb
index efe0e2b48..aeafcc6ea 100644
--- a/app/helpers/translatable_form_helper.rb
+++ b/app/helpers/translatable_form_helper.rb
@@ -1,7 +1,6 @@
module TranslatableFormHelper
def translatable_form_for(record, options = {})
- options_full = options.merge(builder: TranslatableFormBuilder)
- form_for(record, options_full) do |f|
+ form_for(record, options.merge(builder: TranslatableFormBuilder)) do |f|
yield(f)
end
end
diff --git a/app/models/budget.rb b/app/models/budget.rb
index 1f528b102..41a6c0869 100644
--- a/app/models/budget.rb
+++ b/app/models/budget.rb
@@ -197,7 +197,7 @@ class Budget < ApplicationRecord
investments.winners.any?
end
- def milestone_tags
+ def investments_milestone_tags
investments.winners.map(&:milestone_tag_list).flatten.uniq.sort
end
diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb
index 2ee462a0f..c0beb4b68 100644
--- a/app/models/budget/investment.rb
+++ b/app/models/budget/investment.rb
@@ -16,6 +16,7 @@ class Budget
include Mappable
include Documentable
+ acts_as_taggable_on :valuation_tags
acts_as_votable
acts_as_paranoid column: :hidden_at
include ActsAsParanoidAliases
@@ -383,14 +384,6 @@ class Budget
self.valuator_groups.map(&:name).compact.join(", ").presence
end
- def valuation_tag_list
- tag_list_on(:valuation)
- end
-
- def valuation_tag_list=(tags)
- set_tag_list_on(:valuation, tags)
- end
-
def self.with_milestone_status_id(status_id)
includes(milestones: :translations).select do |investment|
investment.milestone_status_id == status_id.to_i
diff --git a/app/models/budget_rol_assignment.rb b/app/models/budget_rol_assignment.rb
deleted file mode 100644
index 5242ae5c9..000000000
--- a/app/models/budget_rol_assignment.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-class BudgetRolAssignment < ApplicationRecord
- belongs_to :budget
- belongs_to :user
-end
diff --git a/app/models/tagging.rb b/app/models/tagging.rb
new file mode 100644
index 000000000..50e0fa9ad
--- /dev/null
+++ b/app/models/tagging.rb
@@ -0,0 +1,2 @@
+class Tagging < ActsAsTaggableOn::Tagging
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index 6533aaded..a2afcf858 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -45,7 +45,6 @@ class User < ApplicationRecord
inverse_of: :receiver
has_many :legislation_answers, class_name: "Legislation::Answer", dependent: :destroy, inverse_of: :user
has_many :follows
- has_many :budget_rol_assignments
has_many :legislation_annotations,
class_name: "Legislation::Annotation",
foreign_key: :author_id,
@@ -80,7 +79,6 @@ class User < ApplicationRecord
foreign_key: :author_id,
inverse_of: :author
has_many :topics, foreign_key: :author_id, inverse_of: :author
- has_many :budgets, through: :budget_rol_assignments
belongs_to :geozone
validates :username, presence: true, if: :username_required?
diff --git a/app/views/admin/budget_investments/_search_form.html.erb b/app/views/admin/budget_investments/_search_form.html.erb
index b6c24b1a1..890700340 100644
--- a/app/views/admin/budget_investments/_search_form.html.erb
+++ b/app/views/admin/budget_investments/_search_form.html.erb
@@ -49,13 +49,13 @@
<%= select_tag :tag_name,
- options_for_select(investment_tags_select_options(@budget), params[:tag_name]),
+ options_for_select(investment_tags_select_options(@budget, "valuation_tags"), params[:tag_name]),
{ prompt: t("admin.budget_investments.index.tags_filter_all") } %>
<%= select_tag :milestone_tag_name,
- options_for_select(investment_milestone_tags_select_options(@budget), params[:milestone_tag_name]),
+ options_for_select(investment_tags_select_options(@budget, "milestone_tags"), params[:milestone_tag_name]),
{ prompt: t("admin.budget_investments.index.milestone_tags_filter_all") } %>
diff --git a/app/views/admin/budget_investments/show.html.erb b/app/views/admin/budget_investments/show.html.erb
index f9fa144e9..b2584c35a 100644
--- a/app/views/admin/budget_investments/show.html.erb
+++ b/app/views/admin/budget_investments/show.html.erb
@@ -29,7 +29,7 @@
<%= t("admin.budget_investments.show.tags") %>:
- <%= @investment.tags_on(:valuation).pluck(:name).sort.join(", ") %>
+ <%= @investment.valuation_tags.pluck(:name).sort.join(", ") %>
diff --git a/app/views/admin/budgets/_association.html.erb b/app/views/admin/budgets/_association.html.erb
index 72b852ac2..026a47ca6 100644
--- a/app/views/admin/budgets/_association.html.erb
+++ b/app/views/admin/budgets/_association.html.erb
@@ -3,23 +3,9 @@
<%= t("admin.budgets.edit.empty_#{assignable_type}") %>
<% else %>
<%= t("admin.budgets.edit.#{assignable_type}", count: 0) %>
-
+ <% field = "#{assignable_type.chomp("s")}_ids" %>
+ <%= form.collection_check_boxes field, assignables, :id, :name do |box| %>
+ <%= box.label { box.check_box + box.text } %>
+ <% end %>
<% end %>
diff --git a/app/views/admin/budgets/_form.html.erb b/app/views/admin/budgets/_form.html.erb
index ea8624a2a..fbd7686b8 100644
--- a/app/views/admin/budgets/_form.html.erb
+++ b/app/views/admin/budgets/_form.html.erb
@@ -33,21 +33,9 @@
- <%= render "/admin/budgets/association", assignable_type: "administrators", assignables: @admins, budget: @budget %>
- <%= render "/admin/budgets/association", assignable_type: "valuators", assignables: @valuators, budget: @budget %>
- <%= render "/admin/budgets/association", assignable_type: "trackers", assignables: @trackers, budget: @budget %>
-
-
-
-
- <%= f.text_field :budget_milestone_tags, placeholder: t("admin.budget_investments.edit.tags_placeholder") %>
-
-
- <%= f.text_field :budget_valuation_tags, placeholder: t("admin.budget_investments.edit.tags_placeholder") %>
-
-
- <%= f.text_field :help_link %>
-
+ <%= render "/admin/budgets/association", assignable_type: "administrators", assignables: @admins, form: f %>
+ <%= render "/admin/budgets/association", assignable_type: "valuators", assignables: @valuators, form: f %>
+ <%= render "/admin/budgets/association", assignable_type: "trackers", assignables: @trackers, form: f %>
<% if @budget.phases.present? %>
diff --git a/config/locales/en/activerecord.yml b/config/locales/en/activerecord.yml
index 7d2651fac..82091f0f4 100644
--- a/config/locales/en/activerecord.yml
+++ b/config/locales/en/activerecord.yml
@@ -141,9 +141,6 @@ en:
description_finished: "Description when the budget is finished"
phase: "Phase"
currency_symbol: "Currency"
- budget_milestone_tags: "Milestone tags"
- budget_valuation_tags: "Valuation tags"
- help_link: "Help link"
budget/translation:
name: "Name"
budget/investment:
diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml
index 3f6c1d9c9..b0492af8d 100644
--- a/config/locales/en/admin.yml
+++ b/config/locales/en/admin.yml
@@ -109,10 +109,6 @@ en:
empty_administrators: "There are no administrators"
empty_valuators: "There are no valuators"
empty_trackers: "There are no trackers"
- name: "Name"
- selected: "Selected"
- cancel: "Cancel"
- save: "Save"
destroy:
success_notice: Budget deleted successfully
unable_notice: You cannot delete a budget that has associated investments
diff --git a/config/locales/es/activerecord.yml b/config/locales/es/activerecord.yml
index 84ea180d6..5fe4b0d77 100644
--- a/config/locales/es/activerecord.yml
+++ b/config/locales/es/activerecord.yml
@@ -143,9 +143,6 @@ es:
description_finished: "Descripción cuando el presupuesto ha finalizado / Resultados"
phase: "Fase"
currency_symbol: "Divisa"
- budget_milestone_tags: "Etiquetas de seguimiento"
- budget_valuation_tags: "Etiquetas de evaluación"
- help_link: "Enlace de ayuda"
budget/translation:
name: "Nombre"
budget/investment:
diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml
index f121f2169..6c33aed7b 100644
--- a/config/locales/es/admin.yml
+++ b/config/locales/es/admin.yml
@@ -109,10 +109,6 @@ es:
empty_administrators: "No hay administradores"
empty_valuators: "No hay evaluadores"
empty_trackers: "No hay gestores de seguimiento"
- name: "Nombre"
- selected: "Seleccionado"
- cancel: "Cancelar"
- save: "Guardar"
destroy:
success_notice: Presupuesto eliminado correctamente
unable_notice: No se puede eliminar un presupuesto con proyectos asociados
diff --git a/db/migrate/20191031172132_drop_budget_rol_assignments.rb b/db/migrate/20191031172132_drop_budget_rol_assignments.rb
new file mode 100644
index 000000000..b97c61ddc
--- /dev/null
+++ b/db/migrate/20191031172132_drop_budget_rol_assignments.rb
@@ -0,0 +1,9 @@
+class DropBudgetRolAssignments < ActiveRecord::Migration[5.0]
+ def up
+ drop_table :budget_rol_assignments
+ end
+
+ def down
+ fail ActiveRecord::IrreversibleMigration
+ end
+end
diff --git a/db/migrate/20191031173943_use_acts_as_taggable_in_budgets.rb b/db/migrate/20191031173943_use_acts_as_taggable_in_budgets.rb
new file mode 100644
index 000000000..9fc7eacb9
--- /dev/null
+++ b/db/migrate/20191031173943_use_acts_as_taggable_in_budgets.rb
@@ -0,0 +1,9 @@
+class UseActsAsTaggableInBudgets < ActiveRecord::Migration[5.0]
+ def change
+ remove_column :budgets, :budget_milestone_tags, :string
+ remove_column :budgets, :budget_valuation_tags, :string
+
+ add_column :tags, :budgets_count, :integer, default: 0
+ add_index :tags, :budgets_count
+ end
+end
diff --git a/db/migrate/20191031210734_remove_help_link_from_budgets.rb b/db/migrate/20191031210734_remove_help_link_from_budgets.rb
new file mode 100644
index 000000000..7d8590097
--- /dev/null
+++ b/db/migrate/20191031210734_remove_help_link_from_budgets.rb
@@ -0,0 +1,6 @@
+class RemoveHelpLinkFromBudgets < ActiveRecord::Migration[5.0]
+ def change
+ remove_column :budgets, :help_link, :string
+ remove_column :tags, :budgets_count, :integer, default: 0
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 7400cc80f..79d28c3fc 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20191030160347) do
+ActiveRecord::Schema.define(version: 20191031210734) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -340,16 +340,6 @@ ActiveRecord::Schema.define(version: 20191030160347) do
t.datetime "updated_at", null: false
end
- create_table "budget_rol_assignments", force: :cascade do |t|
- t.integer "budget_id"
- t.integer "user_id"
- t.string "rol"
- t.datetime "created_at", null: false
- t.datetime "updated_at", null: false
- t.index ["budget_id"], name: "index_budget_rol_assignments_on_budget_id", using: :btree
- t.index ["user_id"], name: "index_budget_rol_assignments_on_user_id", using: :btree
- end
-
create_table "budget_tracker_assignments", force: :cascade do |t|
t.integer "tracker_id"
t.integer "investment_id"
@@ -417,9 +407,6 @@ ActiveRecord::Schema.define(version: 20191030160347) do
t.text "description_drafting"
t.text "description_publishing_prices"
t.text "description_informing"
- t.string "help_link"
- t.string "budget_milestone_tags"
- t.string "budget_valuation_tags"
end
create_table "campaigns", force: :cascade do |t|
@@ -1713,8 +1700,6 @@ ActiveRecord::Schema.define(version: 20191030160347) do
add_foreign_key "budget_administrators", "administrators"
add_foreign_key "budget_administrators", "budgets"
add_foreign_key "budget_investments", "communities"
- add_foreign_key "budget_rol_assignments", "budgets"
- add_foreign_key "budget_rol_assignments", "users"
add_foreign_key "budget_tracker_assignments", "trackers"
add_foreign_key "budget_trackers", "budgets"
add_foreign_key "budget_trackers", "trackers"
diff --git a/lib/tasks/consul.rake b/lib/tasks/consul.rake
index 1763575e5..fea722ae5 100644
--- a/lib/tasks/consul.rake
+++ b/lib/tasks/consul.rake
@@ -4,6 +4,8 @@ namespace :consul do
desc "Runs tasks needed to upgrade from 1.0.0 to 1.1.0"
task "execute_release_1.1.0_tasks": [
- "budgets:set_original_heading_id"
+ "budgets:set_original_heading_id",
+ "migrations:valuation_taggings",
+ "migrations:budget_admins_and_valuators"
]
end
diff --git a/lib/tasks/migrations.rake b/lib/tasks/migrations.rake
new file mode 100644
index 000000000..f545b620e
--- /dev/null
+++ b/lib/tasks/migrations.rake
@@ -0,0 +1,20 @@
+namespace :migrations do
+ desc "Migrates context of valuation taggings"
+ task valuation_taggings: :environment do
+ ApplicationLogger.new.info "Updating valuation taggings context"
+ Tagging.where(context: "valuation").update_all(context: "valuation_tags")
+ end
+
+ desc "Migrates budget staff"
+ task budget_admins_and_valuators: :environment do
+ ApplicationLogger.new.info "Updating budget administrators and valuators"
+ Budget.find_each do |budget|
+ investments = budget.investments.with_hidden
+
+ budget.update!(
+ administrator_ids: investments.where.not(administrator: nil).distinct.pluck(:administrator_id),
+ valuator_ids: Budget::ValuatorAssignment.where(investment: investments).distinct.pluck(:valuator_id)
+ )
+ end
+ end
+end
diff --git a/spec/factories/classifications.rb b/spec/factories/classifications.rb
index d75d90d3e..d1f107814 100644
--- a/spec/factories/classifications.rb
+++ b/spec/factories/classifications.rb
@@ -19,7 +19,7 @@ FactoryBot.define do
end
end
- factory :tagging, class: "ActsAsTaggableOn::Tagging" do
+ factory :tagging do
context { "tags" }
association :taggable, factory: :proposal
tag
diff --git a/spec/features/admin/budget_investments_spec.rb b/spec/features/admin/budget_investments_spec.rb
index 3bb12abdb..a2f2ad1ef 100644
--- a/spec/features/admin/budget_investments_spec.rb
+++ b/spec/features/admin/budget_investments_spec.rb
@@ -510,8 +510,8 @@ describe "Admin budget investments" do
investment1 = create(:budget_investment, budget: budget, tag_list: "Education")
investment2 = create(:budget_investment, budget: budget, tag_list: "Health")
- investment1.set_tag_list_on(:valuation, "Teachers")
- investment2.set_tag_list_on(:valuation, "Hospitals")
+ investment1.set_tag_list_on(:valuation_tags, "Teachers")
+ investment2.set_tag_list_on(:valuation_tags, "Hospitals")
investment1.save!
investment2.save!
@@ -526,8 +526,8 @@ describe "Admin budget investments" do
investment1 = create(:budget_investment, budget: budget, tag_list: "Roads")
investment2 = create(:budget_investment, budget: new_budget, tag_list: "Accessibility")
- investment1.set_tag_list_on(:valuation, "Roads")
- investment2.set_tag_list_on(:valuation, "Accessibility")
+ investment1.set_tag_list_on(:valuation_tags, "Roads")
+ investment2.set_tag_list_on(:valuation_tags, "Accessibility")
investment1.save!
investment2.save!
@@ -1086,14 +1086,15 @@ describe "Admin budget investments" do
expect(page).not_to have_content "Mark as incompatible"
end
- scenario "Add administrator" do
+ scenario "Add administrator", :js do
budget_investment = create(:budget_investment)
user = create(:user, username: "Marta", email: "marta@admins.org")
create(:administrator, user: user, description: "Marta desc")
visit edit_admin_budget_path(budget_investment.budget)
- check "administrator_#{user.id}"
+ click_link "Select administrators"
+ check "Marta"
click_button "Update Budget"
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
@@ -1119,8 +1120,8 @@ describe "Admin budget investments" do
visit edit_admin_budget_path(budget_investment.budget)
- check "valuator_#{user1.id}"
- check "valuator_#{user3.id}"
+ check "Valentina"
+ check "Val"
click_button "Update Budget"
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
@@ -1191,7 +1192,7 @@ describe "Admin budget investments" do
scenario "Adds existing valuation tags", :js do
budget_investment1 = create(:budget_investment)
- budget_investment1.set_tag_list_on(:valuation, "Education, Health")
+ budget_investment1.set_tag_list_on(:valuation_tags, "Education, Health")
budget_investment1.save!
budget_investment2 = create(:budget_investment)
@@ -1229,7 +1230,7 @@ describe "Admin budget investments" do
scenario "Changes valuation and user generated tags" do
budget_investment = create(:budget_investment, tag_list: "Park")
- budget_investment.set_tag_list_on(:valuation, "Education")
+ budget_investment.set_tag_list_on(:valuation_tags, "Education")
budget_investment.save!
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
@@ -1670,7 +1671,7 @@ describe "Admin budget investments" do
end
scenario "Keeps the valuation tags", :js do
- investment1.set_tag_list_on(:valuation, %w[Possimpible Truthiness])
+ investment1.set_tag_list_on(:valuation_tags, %w[Possimpible Truthiness])
investment1.save!
visit admin_budget_budget_investments_path(budget)
diff --git a/spec/features/admin/budgets_spec.rb b/spec/features/admin/budgets_spec.rb
index f9da1414a..fa1f747a4 100644
--- a/spec/features/admin/budgets_spec.rb
+++ b/spec/features/admin/budgets_spec.rb
@@ -232,13 +232,8 @@ describe "Admin budgets" do
end
context "Update" do
- before do
- create(:budget)
- end
-
scenario "Update budget" do
- visit admin_budgets_path
- click_link "Edit budget"
+ visit edit_admin_budget_path(create(:budget))
fill_in "Name", with: "More trees on the streets"
click_button "Update Budget"
@@ -246,6 +241,37 @@ describe "Admin budgets" do
expect(page).to have_content("More trees on the streets")
expect(page).to have_current_path(admin_budgets_path)
end
+
+ scenario "Deselect all selected staff", :js do
+ admin = Administrator.first
+ valuator = create(:valuator)
+ tracker = create(:tracker)
+
+ budget = create(:budget, administrators: [admin], valuators: [valuator], trackers: [tracker])
+
+ visit edit_admin_budget_path(budget)
+ click_link "1 administrator selected"
+ uncheck admin.name
+
+ expect(page).to have_link "Select administrators"
+
+ click_link "1 valuator selected"
+ uncheck valuator.name
+
+ expect(page).to have_link "Select valuators"
+
+ click_link "1 tracker selected"
+ uncheck tracker.name
+
+ expect(page).to have_link "Select trackers"
+
+ click_button "Update Budget"
+ visit edit_admin_budget_path(budget)
+
+ expect(page).to have_link "Select administrators"
+ expect(page).to have_link "Select valuators"
+ expect(page).to have_link "Select trackers"
+ end
end
context "Calculate Budget's Winner Investments" do
diff --git a/spec/features/tags/budget_investments_spec.rb b/spec/features/tags/budget_investments_spec.rb
index d880e2e70..4e165e8b8 100644
--- a/spec/features/tags/budget_investments_spec.rb
+++ b/spec/features/tags/budget_investments_spec.rb
@@ -334,7 +334,7 @@ describe "Tags" do
scenario "Valuators do not see user tags" do
investment = create(:budget_investment, heading: heading, tag_list: "Park")
- investment.set_tag_list_on(:valuation, "Education")
+ investment.set_tag_list_on(:valuation_tags, "Education")
investment.save!
login_as(admin)
diff --git a/spec/lib/tasks/migrations_spec.rb b/spec/lib/tasks/migrations_spec.rb
new file mode 100644
index 000000000..6e375e50e
--- /dev/null
+++ b/spec/lib/tasks/migrations_spec.rb
@@ -0,0 +1,68 @@
+require "rails_helper"
+
+describe "Migration tasks" do
+ describe "valuation_taggins" do
+ let(:run_rake_task) do
+ Rake::Task["migrations:valuation_taggings"].reenable
+ Rake.application.invoke_task("migrations:valuation_taggings")
+ end
+
+ it "updates taggings" do
+ valuation_tagging = create(:tagging, context: "valuation")
+ another_valuation_tagging = create(:tagging, context: "valuation")
+ valuation_tags_tagging = create(:tagging, context: "valuation_tags")
+ tags_tagging = create(:tagging)
+
+ run_rake_task
+
+ expect(valuation_tagging.reload.context).to eq "valuation_tags"
+ expect(another_valuation_tagging.reload.context).to eq "valuation_tags"
+ expect(valuation_tags_tagging.reload.context).to eq "valuation_tags"
+ expect(tags_tagging.reload.context).to eq "tags"
+ end
+ end
+
+ describe "budget_admins_and_valuators" do
+ let(:run_rake_task) do
+ Rake::Task["migrations:budget_admins_and_valuators"].reenable
+ Rake.application.invoke_task("migrations:budget_admins_and_valuators")
+ end
+
+ let(:old_budget) { create(:budget) }
+ let(:current_budget) { create(:budget) }
+
+ it "assigns administrators from existing investments" do
+ harold = create(:administrator)
+ john = create(:administrator)
+ root = create(:administrator)
+
+ create(:budget_investment, budget: old_budget, administrator: john)
+ create(:budget_investment, budget: old_budget, administrator: harold)
+ create(:budget_investment, budget: old_budget, administrator: nil)
+
+ create(:budget_investment, budget: current_budget, administrator: root)
+
+ run_rake_task
+
+ expect(old_budget.administrators).to match_array [john, harold]
+ expect(current_budget.administrators).to match_array [root]
+ end
+
+ it "assigns valuators from existing investments" do
+ tyrion = create(:valuator)
+ cersei = create(:valuator)
+ jaime = create(:valuator)
+
+ create(:budget_investment, budget: old_budget, valuators: [cersei])
+ create(:budget_investment, budget: old_budget, valuators: [jaime, cersei])
+ create(:budget_investment, budget: old_budget, valuators: [])
+
+ create(:budget_investment, budget: current_budget, valuators: [tyrion, jaime])
+
+ run_rake_task
+
+ expect(old_budget.valuators).to match_array [cersei, jaime]
+ expect(current_budget.valuators).to match_array [tyrion, jaime]
+ end
+ end
+end
diff --git a/spec/models/budget_spec.rb b/spec/models/budget_spec.rb
index 7c3eea4f1..08fb0cea2 100644
--- a/spec/models/budget_spec.rb
+++ b/spec/models/budget_spec.rb
@@ -296,7 +296,7 @@ describe Budget do
end
end
- describe "#milestone_tags" do
+ describe "#investments_milestone_tags" do
let(:investment1) { build(:budget_investment, :winner) }
let(:investment2) { build(:budget_investment, :winner) }
let(:investment3) { build(:budget_investment) }
@@ -304,7 +304,7 @@ describe Budget do
it "returns an empty array if not investments milestone_tags" do
budget.investments << investment1
- expect(budget.milestone_tags).to eq([])
+ expect(budget.investments_milestone_tags).to eq([])
end
it "returns array of investments milestone_tags" do
@@ -312,7 +312,7 @@ describe Budget do
investment1.save!
budget.investments << investment1
- expect(budget.milestone_tags).to eq(["tag1"])
+ expect(budget.investments_milestone_tags).to eq(["tag1"])
end
it "returns uniq list of investments milestone_tags" do
@@ -323,7 +323,7 @@ describe Budget do
budget.investments << investment1
budget.investments << investment2
- expect(budget.milestone_tags).to eq(["tag1"])
+ expect(budget.investments_milestone_tags).to eq(["tag1"])
end
it "returns tags only for winner investments" do
@@ -334,7 +334,7 @@ describe Budget do
budget.investments << investment1
budget.investments << investment3
- expect(budget.milestone_tags).to eq(["tag1"])
+ expect(budget.investments_milestone_tags).to eq(["tag1"])
end
end
end