From 748fd8becf2662887454fd6556030460938b8c8a Mon Sep 17 00:00:00 2001 From: kikito Date: Wed, 7 Dec 2016 19:16:37 +0100 Subject: [PATCH] Makes all tests pass in bi management --- .../budgets/investments_controller.rb | 26 ++++---------- app/helpers/budget_headings_helper.rb | 4 +-- app/models/budget/heading.rb | 6 ++++ .../shared/_budget_investment_search.html.erb | 17 +++++++++- .../budgets/investments/print.html.erb | 34 +++++++++++-------- config/locales/es.yml | 1 + .../management/budget_investments_spec.rb | 26 ++++++-------- 7 files changed, 63 insertions(+), 51 deletions(-) diff --git a/app/controllers/management/budgets/investments_controller.rb b/app/controllers/management/budgets/investments_controller.rb index bfa56df8b..e8c10ab50 100644 --- a/app/controllers/management/budgets/investments_controller.rb +++ b/app/controllers/management/budgets/investments_controller.rb @@ -1,7 +1,7 @@ class Management::Budgets::InvestmentsController < Management::BaseController - load_and_authorize_resource :budget - load_and_authorize_resource :investment, through: :budget, class: 'Budget::Investment' + load_resource :budget + load_resource :investment, through: :budget, class: 'Budget::Investment' before_action :only_verified_users, except: :print @@ -35,8 +35,8 @@ class Management::Budgets::InvestmentsController < Management::BaseController end def print - params[:geozone] ||= 'all' @investments = apply_filters_and_search(@investments).order(cached_votes_up: :desc).for_render.limit(15) + set_investment_votes(@investments) end private @@ -45,31 +45,19 @@ class Management::Budgets::InvestmentsController < Management::BaseController @investment_votes = managed_user ? managed_user.budget_investment_votes(investments) : {} end - def load_budget - @budget = Budget.find(params[:budget_id]) - end - def investment_params - params.require(:budget_investment).permit(:title, :description, :external_url, :geozone_id, :heading_id) + params.require(:budget_investment).permit(:title, :description, :external_url, :heading_id) end def only_verified_users check_verified_user t("management.budget_investments.alert.unverified_user") end - def set_geozone_name - if params[:geozone] == 'all' - @geozone_name = t('geozones.none') - else - @geozone_name = Geozone.find(params[:geozone]).name - end - end - def apply_filters_and_search(investments) investments = params[:unfeasible].present? ? investments.unfeasible : investments.not_unfeasible - if params[:geozone].present? - investments = investments.by_geozone(params[:geozone]) - set_geozone_name + if params[:heading_id].present? + investments = investments.by_heading(params[:heading_id]) + @heading = Budget::Heading.find(params[:heading_id]) end investments = investments.search(params[:search]) if params[:search].present? investments diff --git a/app/helpers/budget_headings_helper.rb b/app/helpers/budget_headings_helper.rb index e8d45ace1..3fa1eac89 100644 --- a/app/helpers/budget_headings_helper.rb +++ b/app/helpers/budget_headings_helper.rb @@ -1,8 +1,8 @@ module BudgetHeadingsHelper def budget_heading_select_options(budget) - budget.headings.includes(:group).order('budget_groups.name', 'budget_headings.name').map do |heading| - ["#{heading.group.name}: #{heading.name}", heading.id] + budget.headings.order_by_group_name.map do |heading| + [heading.name_scoped_by_group, heading.id] end end diff --git a/app/models/budget/heading.rb b/app/models/budget/heading.rb index c658c5d28..52da63c4f 100644 --- a/app/models/budget/heading.rb +++ b/app/models/budget/heading.rb @@ -9,6 +9,8 @@ class Budget validates :name, presence: true validates :price, presence: true + scope :order_by_group_name, -> { includes(:group).order('budget_groups.name', 'budget_headings.name') } + def budget group.budget end @@ -17,5 +19,9 @@ class Budget group.budget = resource end + def name_scoped_by_group + "#{group.name}: #{name}" + end + end end diff --git a/app/views/admin/shared/_budget_investment_search.html.erb b/app/views/admin/shared/_budget_investment_search.html.erb index 7ca19b50f..410044c10 100644 --- a/app/views/admin/shared/_budget_investment_search.html.erb +++ b/app/views/admin/shared/_budget_investment_search.html.erb @@ -1,8 +1,23 @@ <%= form_for(Budget::Investment.new, url: url, as: :budget_investment, method: :get) do |f| %>
- <%= text_field_tag :search, "", placeholder: t("admin.shared.budget_investment_search.placeholder") %> + <%= text_field_tag :search, "" %>
+
+ <%= select_tag :heading_id, + options_for_select(budget_heading_select_options(@budget), + params[:heading_id]), + include_blank: true + %> +
+
+
+
+ <%= check_box_tag :unfeasible, "1", params[:unfeasible].present? %> +
+
+ +
<%= f.submit t("shared.search"), class: "button" %>
diff --git a/app/views/management/budgets/investments/print.html.erb b/app/views/management/budgets/investments/print.html.erb index 9c78f93cd..d2390879b 100644 --- a/app/views/management/budgets/investments/print.html.erb +++ b/app/views/management/budgets/investments/print.html.erb @@ -1,29 +1,35 @@
-
+ + <%= render 'admin/shared/budget_investment_search', url: print_management_budget_investments_path(@budget) %> + + +
- <%= form_tag print_management_budget_investments_path, method: :get, enforce_utf8: false do %> -
- <%= select_tag :geozone, - options_for_select(geozone_select_options.unshift([t("geozones.none"), "all"]), params[:geozone]), - { label: false, - class: "js-submit-on-change" } %> -
- <% end %> - <%= t('management.budget_investments.print.print_button') %>
- <%= content_tag(:h2, t("management.budget_investments.filters.unfeasible"), class: "inline-block") if params[:unfeasible].present? %> - <%= content_tag(:h2, t("management.budget_investments.filters.by_geozone", geozone: @geozone_name), class: "inline-block") if @geozone_name.present? %> - <%= content_tag(:h2, t("management.budget_investments.search_results", count: @budget_investments.size, search_term: params[:search]), class: "inline-block") if params[:search].present? %> + <% if params[:unfeasible].present? %> +

<%= t("management.budget_investments.filters.unfeasible") %>

+ <% end %> + <% if @heading.present? %> +

<%= t("management.budget_investments.filters.heading", heading_name: @heading.name) %>

+ <% end %> +

<%= t("management.budget_investments.search_results", count: @investments.count, search_term: params[:search]) %>

- <%= render @budget_investments %> + <% @investments.each do |investment| %> + <%= render partial: '/budgets/investments/investment', locals: { + investment: investment, + investment_ids: @investment_ids, + investment_votes: @investment_votes, + investment_ballots: @investment_ballots + } %> + <% end %>

<%= t("management.print.budget_investments_info") %>
diff --git a/config/locales/es.yml b/config/locales/es.yml index 7848777ad..9dbd241d9 100755 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -435,6 +435,7 @@ es: flag: Denunciar como inapropiado print: print_button: Imprimir esta información + search: Buscar show: Mostrar suggest: debate: diff --git a/spec/features/management/budget_investments_spec.rb b/spec/features/management/budget_investments_spec.rb index 216af5d20..9f5d11c79 100644 --- a/spec/features/management/budget_investments_spec.rb +++ b/spec/features/management/budget_investments_spec.rb @@ -202,45 +202,41 @@ feature 'Budget Investments' do scenario 'Printing budget investments' do 16.times { create(:budget_investment, budget: @budget) } - click_link "Print budget investments" + click_link "Print Budget Investments" expect(page).to have_content(@budget.name) within "#budget_#{@budget.id}" do - click_link "Support Budget Investments" + click_link "Print Budget Investments" end expect(page).to have_css('.budget-investment', count: 15) expect(page).to have_css("a[href='javascript:window.print();']", text: 'Print') end - scenario "Filtering budget investments by geozone to be printed", :js do + scenario "Filtering budget investments by heading to be printed", :js do district_9 = create(:budget_heading, group: @group, name: "District Nine") create(:budget_investment, budget: @budget, title: 'Change district 9', heading: district_9, cached_votes_up: 10) create(:budget_investment, budget: @budget, title: 'Destroy district 9', heading: district_9, cached_votes_up: 100) create(:budget_investment, budget: @budget, title: 'Nuke district 9', heading: district_9, cached_votes_up: 1) - create(:budget_investment, budget: @budget, title: 'Add new districts to the city', heading: @heading) + create(:budget_investment, budget: @budget, title: 'Add new districts to the city') user = create(:user, :level_two) login_managed_user(user) - click_link "Print budget investments" + click_link "Print Budget Investments" expect(page).to have_content(@budget.name) within "#budget_#{@budget.id}" do - click_link "Support Budget Investments" + click_link "Print Budget Investments" end - expect(page).to have_content "Budget investments with scope: All city" - within '#budget-investments' do expect(page).to have_content('Add new districts to the city') - expect(page).to_not have_content('Change district 9') - expect(page).to_not have_content('Destroy district 9') - expect(page).to_not have_content('Nuke district 9') + expect(page).to have_content('Change district 9') + expect(page).to have_content('Destroy district 9') + expect(page).to have_content('Nuke district 9') end - select 'District Nine', from: 'geozone' - - expect(page).to have_content "Investment projects with scope: District Nine" - expect(current_url).to include("geozone=#{district_9.id}") + select 'Whole city: District Nine', from: 'heading_id' + click_button("Search") within '#budget-investments' do expect(page).to_not have_content('Add new districts to the city')