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) %>

- - - - - - - - - <% assignables.each do |assignable| %> - - - - - <% end %> - -
<%= t("admin.budgets.edit.name") %><%= t("admin.budgets.edit.selected") %>
<%= assignable.name %> - class="js-budget-list-checkbox-<%= assignable_type %> js-budget-list-checkbox-user"> -
+ <% 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