Adapts management::budget_investments to new budgets
This commit is contained in:
@@ -1,63 +1,49 @@
|
||||
class Management::Budgets::InvestmentsController < Management::BaseController
|
||||
|
||||
load_and_authorize_resource :budget
|
||||
load_and_authorize_resource :investment, through: :budget, class: 'Budget::Investment'
|
||||
|
||||
before_action :only_verified_users, except: :print
|
||||
before_action :set_budget_investment, only: [:vote, :show]
|
||||
before_action :load_accepting_headings, only: [:new, :create]
|
||||
|
||||
def index
|
||||
@investments = apply_filters_and_search(Budget::Investment).order(cached_votes_up: :desc).page(params[:page]).for_render
|
||||
@investments = apply_filters_and_search(@investments).order(cached_votes_up: :desc).page(params[:page]).for_render
|
||||
@investment_ids = @investments.pluck(:id)
|
||||
set_investment_ballots(@investments)
|
||||
set_budget_investment_votes(@investments)
|
||||
end
|
||||
|
||||
def new
|
||||
@investment = Budget::Investment.new
|
||||
end
|
||||
|
||||
def create
|
||||
@investment = Budget::Investment.new(budget_investment_params)
|
||||
@investment.terms_of_service = "1"
|
||||
@investment.author = managed_user
|
||||
|
||||
if @investment.save
|
||||
redirect_to management_budgets_investment_path(@investment), notice: t('flash.actions.create.notice', resource_name: Budget::Investment.model_name.human, count: 1)
|
||||
notice= t('flash.actions.create.notice', resource_name: Budget::Investment.model_name.human, count: 1)
|
||||
redirect_to management_budget_investment_path(@budget, @investment), notice: notice
|
||||
else
|
||||
render :new
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
set_investment_ballots(@investment)
|
||||
set_budget_investment_votes(@investment)
|
||||
end
|
||||
|
||||
def vote
|
||||
@investment.register_vote(managed_user, 'yes')
|
||||
set_investment_ballots(@investment)
|
||||
set_budget_investment_votes(@investment)
|
||||
end
|
||||
|
||||
def print
|
||||
params[:geozone] ||= 'all'
|
||||
@investments = apply_filters_and_search(Budget::Investment).order(cached_votes_up: :desc).for_render.limit(15)
|
||||
set_budget_investment_votes(@investments)
|
||||
@investments = apply_filters_and_search(@investments).order(cached_votes_up: :desc).for_render.limit(15)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_investment_ballots(investments)
|
||||
@investment_ballots = {}
|
||||
Budget.where(id: Array.wrap(investments).map(&:budget_id).uniq).each do |budget|
|
||||
@investment_ballots[budget] = Budget::Ballot.where(user: current_user, budget: budget).first_or_create
|
||||
end
|
||||
def load_budget
|
||||
@budget = Budget.find(params[:budget_id])
|
||||
end
|
||||
|
||||
def set_budget_investment
|
||||
@investment = Budget::Investment.find(params[:id])
|
||||
end
|
||||
|
||||
def budget_investment_params
|
||||
def investment_params
|
||||
params.require(:budget_investment).permit(:title, :description, :external_url, :geozone_id, :heading_id)
|
||||
end
|
||||
|
||||
@@ -65,11 +51,6 @@ class Management::Budgets::InvestmentsController < Management::BaseController
|
||||
check_verified_user t("management.budget_investments.alert.unverified_user")
|
||||
end
|
||||
|
||||
# This should not be necessary. Maybe we could create a specific show view for managers.
|
||||
def set_budget_investment_votes(budget_investments)
|
||||
@investment_votes = managed_user ? managed_user.budget_investment_votes(budget_investments) : {}
|
||||
end
|
||||
|
||||
def set_geozone_name
|
||||
if params[:geozone] == 'all'
|
||||
@geozone_name = t('geozones.none')
|
||||
@@ -78,20 +59,14 @@ class Management::Budgets::InvestmentsController < Management::BaseController
|
||||
end
|
||||
end
|
||||
|
||||
def apply_filters_and_search(target)
|
||||
target = params[:unfeasible].present? ? target.unfeasible : target.not_unfeasible
|
||||
def apply_filters_and_search(investments)
|
||||
investments = params[:unfeasible].present? ? investments.unfeasible : investments.not_unfeasible
|
||||
if params[:geozone].present?
|
||||
target = target.by_geozone(params[:geozone])
|
||||
investments = investments.by_geozone(params[:geozone])
|
||||
set_geozone_name
|
||||
end
|
||||
target = target.search(params[:search]) if params[:search].present?
|
||||
target
|
||||
end
|
||||
|
||||
def load_accepting_headings
|
||||
accepting_budget_ids = Budget.accepting.pluck(:id)
|
||||
accepting_budget_group_ids = Budget::Group.where(budget_id: accepting_budget_ids).pluck(:id)
|
||||
@headings = Budget::Heading.where(group_id: accepting_budget_group_ids).order(:group_id, :name).includes(:group => :budget)
|
||||
investments = investments.search(params[:search]) if params[:search].present?
|
||||
investments
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
<%= render 'shared/errors', resource: @investment %>
|
||||
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<%= f.label :heading_id, t("budget.investments.form.heading") %>
|
||||
<%= f.select :heading_id, budget_heading_select_options(@budget), {include_blank: t("budget.headings.none"), label: false} %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= f.label :title, t("budget.investments.form.title") %>
|
||||
<%= f.text_field :title, maxlength: SpendingProposal.title_max_length, placeholder: t("budget.investments.form.title"), label: false %>
|
||||
@@ -28,10 +33,7 @@
|
||||
<%= f.text_field :external_url, placeholder: t("budget.investments.form.external_url"), label: false %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= f.label :heading_id, t("budget.investments.form.heading") %>
|
||||
<%= f.select :heading_id, multiple_budgets_heading_select_options(@headings), {include_blank: t("budget.headings.none"), label: false} %>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= f.label :terms_of_service do %>
|
||||
|
||||
@@ -4,8 +4,8 @@ feature 'Budget Investments' do
|
||||
|
||||
background do
|
||||
login_as_manager
|
||||
budget = create(:budget, phase: 'accepting', name: "2016")
|
||||
group = create(:budget_group, budget: budget, name: 'Whole city')
|
||||
@budget = create(:budget, phase: 'accepting', name: "2016")
|
||||
group = create(:budget_group, budget: @budget, name: 'Whole city')
|
||||
@heading = create(:budget_heading, group: group, name: "Health")
|
||||
end
|
||||
|
||||
@@ -17,15 +17,16 @@ feature 'Budget Investments' do
|
||||
login_managed_user(user)
|
||||
|
||||
click_link "Create budget investment"
|
||||
click_link "Create New Investment"
|
||||
|
||||
within(".account-info") do
|
||||
expect(page).to have_content "Identified as"
|
||||
expect(page).to have_content "#{user.username}"
|
||||
expect(page).to have_content "#{user.email}"
|
||||
expect(page).to have_content "#{user.document_number}"
|
||||
expect(page).to have_content user.username
|
||||
expect(page).to have_content user.email
|
||||
expect(page).to have_content user.document_number
|
||||
end
|
||||
|
||||
select "2016 - Whole city - Health", from: 'budget_investment_heading_id'
|
||||
select "Whole city: Health", from: 'budget_investment_heading_id'
|
||||
fill_in 'budget_investment_title', with: 'Build a park in my neighborhood'
|
||||
fill_in 'budget_investment_description', with: 'There is no parks here...'
|
||||
fill_in 'budget_investment_external_url', with: 'http://moarparks.com'
|
||||
@@ -42,9 +43,7 @@ feature 'Budget Investments' do
|
||||
expect(page).to have_content 'There is no parks here...'
|
||||
expect(page).to have_content 'http://moarparks.com'
|
||||
expect(page).to have_content user.name
|
||||
expect(page).to have_content I18n.l(Budget::Investment.last.created_at.to_date)
|
||||
|
||||
expect(current_path).to eq(management_budgets_investment_path(Budget::Investment.last))
|
||||
expect(page).to have_content I18n.l(@budget.created_at.to_date)
|
||||
end
|
||||
|
||||
scenario "Should not allow unverified users to create budget investments" do
|
||||
@@ -70,14 +69,14 @@ feature 'Budget Investments' do
|
||||
fill_in "search", with: "what you got"
|
||||
click_button "Search"
|
||||
|
||||
expect(current_path).to eq(management_budgets_investments_path)
|
||||
expect(current_path).to eq(management_budget_investments_path)
|
||||
|
||||
within("#budget-investments") do
|
||||
expect(page).to have_css('.budget-investment', count: 1)
|
||||
expect(page).to have_content(budget_investment1.title)
|
||||
expect(page).to_not have_content(budget_investment2.title)
|
||||
expect(page).to have_css("a[href='#{management_budgets_investment_path(budget_investment1)}']", text: budget_investment1.title)
|
||||
expect(page).to have_css("a[href='#{management_budgets_investment_path(budget_investment1)}']", text: budget_investment1.description)
|
||||
expect(page).to have_css("a[href='#{management_budget_investment_path(budget_investment1)}']", text: budget_investment1.title)
|
||||
expect(page).to have_css("a[href='#{management_budget_investment_path(budget_investment1)}']", text: budget_investment1.description)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -93,14 +92,14 @@ feature 'Budget Investments' do
|
||||
fill_in "search", with: "Area 52"
|
||||
click_button "Search"
|
||||
|
||||
expect(current_path).to eq(management_budgets_investments_path)
|
||||
expect(current_path).to eq(management_budget_investments_path)
|
||||
|
||||
within("#budget-investments") do
|
||||
expect(page).to have_css('.budget-investment', count: 1)
|
||||
expect(page).to_not have_content(budget_investment1.title)
|
||||
expect(page).to have_content(budget_investment2.title)
|
||||
expect(page).to have_css("a[href='#{management_budgets_investment_path(budget_investment2)}']", text: budget_investment2.title)
|
||||
expect(page).to have_css("a[href='#{management_budgets_investment_path(budget_investment2)}']", text: budget_investment2.description)
|
||||
expect(page).to have_css("a[href='#{management_budget_investment_path(budget_investment2)}']", text: budget_investment2.title)
|
||||
expect(page).to have_css("a[href='#{management_budget_investment_path(budget_investment2)}']", text: budget_investment2.description)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -114,7 +113,7 @@ feature 'Budget Investments' do
|
||||
|
||||
click_link "Support Budget Investments"
|
||||
|
||||
expect(current_path).to eq(management_budgets_investments_path)
|
||||
expect(current_path).to eq(management_budget_investments_path)
|
||||
|
||||
within(".account-info") do
|
||||
expect(page).to have_content "Identified as"
|
||||
@@ -125,10 +124,10 @@ feature 'Budget Investments' do
|
||||
|
||||
within("#budget-investments") do
|
||||
expect(page).to have_css('.budget-investment', count: 2)
|
||||
expect(page).to have_css("a[href='#{management_budgets_investment_path(budget_investment1)}']", text: budget_investment1.title)
|
||||
expect(page).to have_css("a[href='#{management_budgets_investment_path(budget_investment1)}']", text: budget_investment1.description)
|
||||
expect(page).to have_css("a[href='#{management_budgets_investment_path(budget_investment2)}']", text: budget_investment2.title)
|
||||
expect(page).to have_css("a[href='#{management_budgets_investment_path(budget_investment2)}']", text: budget_investment2.description)
|
||||
expect(page).to have_css("a[href='#{management_budget_investment_path(budget_investment1)}']", text: budget_investment1.title)
|
||||
expect(page).to have_css("a[href='#{management_budget_investment_path(budget_investment1)}']", text: budget_investment1.description)
|
||||
expect(page).to have_css("a[href='#{management_budget_investment_path(budget_investment2)}']", text: budget_investment2.title)
|
||||
expect(page).to have_css("a[href='#{management_budget_investment_path(budget_investment2)}']", text: budget_investment2.description)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -148,7 +147,7 @@ feature 'Budget Investments' do
|
||||
expect(page).to have_content "1 support"
|
||||
expect(page).to have_content "You have already supported this. Share it!"
|
||||
end
|
||||
expect(current_path).to eq(management_budgets_investments_path)
|
||||
expect(current_path).to eq(management_budget_investments_path)
|
||||
end
|
||||
|
||||
scenario 'Voting budget investments on behalf of someone in show view', :js do
|
||||
@@ -166,7 +165,7 @@ feature 'Budget Investments' do
|
||||
find('.js-in-favor a').click
|
||||
expect(page).to have_content "1 support"
|
||||
expect(page).to have_content "You have already supported this. Share it!"
|
||||
expect(current_path).to eq(management_budgets_investment_path(budget_investment))
|
||||
expect(current_path).to eq(management_budget_investment_path(budget_investment))
|
||||
end
|
||||
|
||||
scenario "Should not allow unverified users to vote proposals" do
|
||||
|
||||
Reference in New Issue
Block a user