From ac1dd79f9546b2d0287f696994d9c7c9dd63e420 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Thu, 31 Oct 2019 16:11:27 +0100 Subject: [PATCH] Fix unselecting all staff for a budget We need to add a hidden field for each group of check boxes, so if we don't check anything, the hidden field is sent to the server, indicating nothing was selected. Without the hidden field, the server will not know anything has been done to the check boxes. The easiest way to do it is using `collection_check_boxes`, which also adds labels to every check box. --- .../javascripts/budget_edit_associations.js | 10 ++--- app/views/admin/budgets/_association.html.erb | 22 ++--------- app/views/admin/budgets/_form.html.erb | 6 +-- config/locales/en/admin.yml | 2 - config/locales/es/admin.yml | 2 - .../features/admin/budget_investments_spec.rb | 9 +++-- spec/features/admin/budgets_spec.rb | 38 ++++++++++++++++--- 7 files changed, 49 insertions(+), 40 deletions(-) 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/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..c1d81fc09 100644 --- a/app/views/admin/budgets/_form.html.erb +++ b/app/views/admin/budgets/_form.html.erb @@ -33,9 +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 %> + <%= 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 %>
diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index b684b81d9..b0492af8d 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -109,8 +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" destroy: success_notice: Budget deleted successfully unable_notice: You cannot delete a budget that has associated investments diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 502d5aa34..6c33aed7b 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -109,8 +109,6 @@ es: empty_administrators: "No hay administradores" empty_valuators: "No hay evaluadores" empty_trackers: "No hay gestores de seguimiento" - name: "Nombre" - selected: "Seleccionado" destroy: success_notice: Presupuesto eliminado correctamente unable_notice: No se puede eliminar un presupuesto con proyectos asociados diff --git a/spec/features/admin/budget_investments_spec.rb b/spec/features/admin/budget_investments_spec.rb index 3bb12abdb..9345919a5 100644 --- a/spec/features/admin/budget_investments_spec.rb +++ b/spec/features/admin/budget_investments_spec.rb @@ -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) 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