Merge pull request #4397 from consul/unify_budgets
Unify budget landing pages
This commit is contained in:
67
app/assets/stylesheets/budgets/groups_and_headings.scss
Normal file
67
app/assets/stylesheets/budgets/groups_and_headings.scss
Normal file
@@ -0,0 +1,67 @@
|
||||
.groups-and-headings {
|
||||
$spacing: $line-height / 2;
|
||||
|
||||
.headings-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
list-style: none;
|
||||
margin-left: -$spacing;
|
||||
}
|
||||
|
||||
.heading {
|
||||
border: 2px solid $border;
|
||||
border-radius: rem-calc(6);
|
||||
box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
|
||||
margin-bottom: $line-height / 2;
|
||||
margin-left: $spacing;
|
||||
margin-top: $line-height / 4;
|
||||
padding: $line-height / 2;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
|
||||
@include breakpoint(medium) {
|
||||
width: calc(100% / 3 - #{$spacing});
|
||||
}
|
||||
|
||||
@include breakpoint(large) {
|
||||
width: calc(100% / 6 - #{$spacing});
|
||||
}
|
||||
|
||||
&:focus-within {
|
||||
outline: $outline-focus;
|
||||
|
||||
a:focus {
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
font-weight: bold;
|
||||
|
||||
&::after,
|
||||
&::before {
|
||||
bottom: 0;
|
||||
content: "";
|
||||
left: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
&:hover::before {
|
||||
background: $highlight;
|
||||
z-index: -1;
|
||||
}
|
||||
}
|
||||
|
||||
span {
|
||||
display: block;
|
||||
font-size: $small-font-size;
|
||||
padding-top: $line-height / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1222,36 +1222,6 @@
|
||||
color: $brand;
|
||||
}
|
||||
|
||||
.groups-and-headings {
|
||||
|
||||
.heading {
|
||||
border: 1px solid $border;
|
||||
border-radius: rem-calc(3);
|
||||
display: inline-block;
|
||||
margin-bottom: $line-height / 2;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
padding: $line-height / 2;
|
||||
|
||||
&:hover {
|
||||
background: $highlight;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.heading-name {
|
||||
padding: $line-height / 2;
|
||||
}
|
||||
|
||||
span {
|
||||
color: $text;
|
||||
display: block;
|
||||
font-size: $small-font-size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.progress-votes {
|
||||
position: relative;
|
||||
|
||||
|
||||
32
app/components/budgets/budget_component.html.erb
Normal file
32
app/components/budgets/budget_component.html.erb
Normal file
@@ -0,0 +1,32 @@
|
||||
<div class="budget-header">
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<h1><%= budget.name %></h1>
|
||||
<div class="description">
|
||||
<%= auto_link_already_sanitized_html wysiwyg(budget.description) %>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<%= link_to t("budgets.index.section_header.help"), "#section_help" %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= render Budgets::SubheaderComponent.new(budget) %>
|
||||
<%= render Budgets::PhasesComponent.new(budget) %>
|
||||
|
||||
<div id="budget_info" class="budget-info">
|
||||
<div class="row margin-top">
|
||||
<div class="small-12 column">
|
||||
<%= render Budgets::GroupsAndHeadingsComponent.new(budget) %>
|
||||
|
||||
<% unless budget.informing? %>
|
||||
<div class="map inline">
|
||||
<h2><%= t("budgets.index.map") %></h2>
|
||||
<%= render_map(nil, "budgets", false, nil, coordinates) %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
22
app/components/budgets/budget_component.rb
Normal file
22
app/components/budgets/budget_component.rb
Normal file
@@ -0,0 +1,22 @@
|
||||
class Budgets::BudgetComponent < ApplicationComponent
|
||||
delegate :wysiwyg, :auto_link_already_sanitized_html, :render_map, to: :helpers
|
||||
attr_reader :budget
|
||||
|
||||
def initialize(budget)
|
||||
@budget = budget
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def coordinates
|
||||
return unless budget.present?
|
||||
|
||||
if budget.publishing_prices_or_later? && budget.investments.selected.any?
|
||||
investments = budget.investments.selected
|
||||
else
|
||||
investments = budget.investments
|
||||
end
|
||||
|
||||
MapLocation.where(investment_id: investments).map(&:json_data)
|
||||
end
|
||||
end
|
||||
10
app/components/budgets/footer_component.html.erb
Normal file
10
app/components/budgets/footer_component.html.erb
Normal file
@@ -0,0 +1,10 @@
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<div id="section_help" class="margin" data-magellan-target="section_help">
|
||||
<p class="lead">
|
||||
<strong><%= t("budgets.index.section_footer.title") %></strong>
|
||||
</p>
|
||||
<p><%= t("budgets.index.section_footer.description") %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
2
app/components/budgets/footer_component.rb
Normal file
2
app/components/budgets/footer_component.rb
Normal file
@@ -0,0 +1,2 @@
|
||||
class Budgets::FooterComponent < ApplicationComponent
|
||||
end
|
||||
@@ -0,0 +1,18 @@
|
||||
<div id="groups_and_headings" class="groups-and-headings">
|
||||
<% budget.groups.each do |group| %>
|
||||
<h2 id="<%= group.name.parameterize %>"><%= group.name %></h2>
|
||||
<ul class="headings-list">
|
||||
<% group.headings.sort_by_name.each do |heading| %>
|
||||
<li class="heading">
|
||||
<%= link_to_unless(
|
||||
(budget.informing? || budget.finished?),
|
||||
heading.name,
|
||||
budget_investments_path(budget.id, heading_id: heading.id)
|
||||
) %>
|
||||
|
||||
<%= price(heading) %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
</div>
|
||||
13
app/components/budgets/groups_and_headings_component.rb
Normal file
13
app/components/budgets/groups_and_headings_component.rb
Normal file
@@ -0,0 +1,13 @@
|
||||
class Budgets::GroupsAndHeadingsComponent < ApplicationComponent
|
||||
attr_reader :budget
|
||||
|
||||
def initialize(budget)
|
||||
@budget = budget
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def price(heading)
|
||||
tag.span(budget.formatted_heading_price(heading))
|
||||
end
|
||||
end
|
||||
24
app/components/budgets/investments/info_component.html.erb
Normal file
24
app/components/budgets/investments/info_component.html.erb
Normal file
@@ -0,0 +1,24 @@
|
||||
<p class="investment-project-info">
|
||||
<%= l investment.created_at.to_date %>
|
||||
|
||||
<% if investment.author.hidden? || investment.author.erased? %>
|
||||
<span class="bullet"> • </span>
|
||||
<span class="author">
|
||||
<%= t("budgets.investments.show.author_deleted") %>
|
||||
</span>
|
||||
<% else %>
|
||||
<span class="bullet"> • </span>
|
||||
<span class="author">
|
||||
<%= investment.author.name %>
|
||||
</span>
|
||||
<% if investment.author.official? %>
|
||||
<span class="bullet"> • </span>
|
||||
<span class="label round level-<%= investment.author.official_level %>">
|
||||
<%= investment.author.official_position %>
|
||||
</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<span class="bullet"> • </span>
|
||||
<%= investment.heading.name %>
|
||||
</p>
|
||||
7
app/components/budgets/investments/info_component.rb
Normal file
7
app/components/budgets/investments/info_component.rb
Normal file
@@ -0,0 +1,7 @@
|
||||
class Budgets::Investments::InfoComponent < ApplicationComponent
|
||||
attr_reader :investment
|
||||
|
||||
def initialize(investment)
|
||||
@investment = investment
|
||||
end
|
||||
end
|
||||
@@ -7,7 +7,6 @@ module Budgets
|
||||
before_action :load_tag_cloud
|
||||
before_action :load_categories
|
||||
before_action :load_investments
|
||||
before_action :load_ballot_referer
|
||||
|
||||
authorize_resource :budget
|
||||
authorize_resource :ballot
|
||||
@@ -67,10 +66,6 @@ module Budgets
|
||||
@categories = Tag.category.order(:name)
|
||||
end
|
||||
|
||||
def load_ballot_referer
|
||||
@ballot_referer = session[:ballot_referer]
|
||||
end
|
||||
|
||||
def load_map
|
||||
@investments ||= []
|
||||
@investments_map_coordinates = MapLocation.where(investment: @investments).map(&:json_data)
|
||||
|
||||
@@ -4,7 +4,6 @@ module Budgets
|
||||
before_action :load_budget
|
||||
authorize_resource :budget
|
||||
before_action :load_ballot
|
||||
after_action :store_referer, only: [:show]
|
||||
|
||||
def show
|
||||
authorize! :show, @ballot
|
||||
@@ -22,9 +21,5 @@ module Budgets
|
||||
query = Budget::Ballot.where(user: current_user, budget: @budget)
|
||||
@ballot = @budget.balloting? ? query.first_or_create! : query.first_or_initialize
|
||||
end
|
||||
|
||||
def store_referer
|
||||
session[:ballot_referer] = request.referer
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
class BudgetsController < ApplicationController
|
||||
include FeatureFlags
|
||||
include BudgetsHelper
|
||||
include InvestmentFilters
|
||||
feature_flag :budgets
|
||||
|
||||
before_action :load_budget, only: :show
|
||||
before_action :load_current_budget, only: :index
|
||||
load_and_authorize_resource
|
||||
before_action :set_default_investment_filter, only: :show
|
||||
has_filters investment_filters, only: :show
|
||||
|
||||
respond_to :html, :js
|
||||
|
||||
@@ -17,7 +15,6 @@ class BudgetsController < ApplicationController
|
||||
|
||||
def index
|
||||
@finished_budgets = @budgets.finished.order(created_at: :desc)
|
||||
@budgets_coordinates = current_budget_map_locations
|
||||
end
|
||||
|
||||
private
|
||||
@@ -25,4 +22,8 @@ class BudgetsController < ApplicationController
|
||||
def load_budget
|
||||
@budget = Budget.find_by_slug_or_id! params[:id]
|
||||
end
|
||||
|
||||
def load_current_budget
|
||||
@budget = current_budget
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,13 +5,6 @@ module BudgetsHelper
|
||||
end
|
||||
end
|
||||
|
||||
def heading_name_and_price_html(heading, budget)
|
||||
tag.div do
|
||||
concat(heading.name + " ")
|
||||
concat(tag.span(budget.formatted_heading_price(heading)))
|
||||
end
|
||||
end
|
||||
|
||||
def csv_params
|
||||
csv_params = params.clone.merge(format: :csv)
|
||||
csv_params = csv_params.to_unsafe_h.map { |k, v| [k.to_sym, v] }.to_h
|
||||
@@ -63,18 +56,6 @@ module BudgetsHelper
|
||||
budget.published? || current_user&.administrator?
|
||||
end
|
||||
|
||||
def current_budget_map_locations
|
||||
return unless current_budget.present?
|
||||
|
||||
if current_budget.publishing_prices_or_later? && current_budget.investments.selected.any?
|
||||
investments = current_budget.investments.selected
|
||||
else
|
||||
investments = current_budget.investments
|
||||
end
|
||||
|
||||
MapLocation.where(investment_id: investments).map(&:json_data)
|
||||
end
|
||||
|
||||
def display_calculate_winners_button?(budget)
|
||||
budget.balloting_or_later?
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="budget-header">
|
||||
<div class="row">
|
||||
<%= back_link_to @ballot_referer %>
|
||||
<%= back_link_to session[:ballot_referer] %>
|
||||
|
||||
<h1 class="text-center"><%= t("budgets.ballots.show.title") %></h1>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<div class="budget-header">
|
||||
<div class="row">
|
||||
<div class="small-12 medium-9 column">
|
||||
<%= back_link_to budgets_path %>
|
||||
<%= back_link_to budget_path(@budget) %>
|
||||
<h2><%= t("budgets.groups.show.title") %></h2>
|
||||
</div>
|
||||
</div>
|
||||
@@ -35,8 +35,7 @@
|
||||
class="<%= css_for_ballot_heading(heading) %>">
|
||||
<%= link_to heading.name,
|
||||
budget_investments_path(heading_id: heading.id,
|
||||
filter: @current_filter),
|
||||
data: { turbolinks: false } %><br>
|
||||
filter: @current_filter) %><br>
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -6,63 +6,12 @@
|
||||
<%= render "shared/canonical", href: budgets_url %>
|
||||
<% end %>
|
||||
|
||||
<% if current_budget.present? %>
|
||||
<div class="budget-header">
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<h1><%= current_budget.name %></h1>
|
||||
<div class="description">
|
||||
<%= auto_link_already_sanitized_html wysiwyg(current_budget.description) %>
|
||||
</div>
|
||||
<p>
|
||||
<%= link_to t("budgets.index.section_header.help"), "#section_help" %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% if @budget.present? %>
|
||||
<%= render Budgets::BudgetComponent.new(@budget) %>
|
||||
|
||||
<%= render Budgets::SubheaderComponent.new(current_budget) %>
|
||||
<%= render Budgets::PhasesComponent.new(current_budget) %>
|
||||
|
||||
<div id="budget_info" class="budget-info">
|
||||
<div class="row margin-top">
|
||||
<div class="small-12 column">
|
||||
|
||||
<div id="groups_and_headings" class="groups-and-headings">
|
||||
<% current_budget.groups.each do |group| %>
|
||||
<h2 id="<%= group.name.parameterize %>"><%= group.name %></h2>
|
||||
<ul class="no-bullet" data-equalizer data-equalizer-on="medium">
|
||||
<% group.headings.sort_by_name.each do |heading| %>
|
||||
<li class="heading small-12 medium-4 large-2" data-equalizer-watch>
|
||||
<% unless current_budget.informing? || current_budget.finished? %>
|
||||
<%= link_to budget_investments_path(current_budget.id,
|
||||
heading_id: heading.id) do %>
|
||||
<%= heading_name_and_price_html(heading, current_budget) %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<div class="heading-name">
|
||||
<%= heading_name_and_price_html(heading, current_budget) %>
|
||||
</div>
|
||||
<% end %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% unless current_budget.informing? %>
|
||||
<div class="map inline">
|
||||
<h3><%= t("budgets.index.map") %></h3>
|
||||
<%= render_map(nil, "budgets", false, nil, @budgets_coordinates) %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% if @finished_budgets.present? %>
|
||||
<%= render "finished", budgets: @finished_budgets %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% if @finished_budgets.present? %>
|
||||
<%= render "finished", budgets: @finished_budgets %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<div class="budget-header margin-bottom">
|
||||
<div class="row">
|
||||
@@ -81,13 +30,4 @@
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<div id="section_help" class="margin" data-magellan-target="section_help">
|
||||
<p class="lead">
|
||||
<strong><%= t("budgets.index.section_footer.title") %></strong>
|
||||
</p>
|
||||
<p><%= t("budgets.index.section_footer.description") %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<%= render Budgets::FooterComponent.new %>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<%= back_link_to budgets_path %>
|
||||
<%= back_link_to budget_path(@budget) %>
|
||||
|
||||
<% if can? :show, @ballot %>
|
||||
<%= link_to t("budgets.investments.header.check_ballot"),
|
||||
|
||||
@@ -21,30 +21,8 @@
|
||||
<% cache [locale_and_user_status(investment), "index", investment, investment.author] do %>
|
||||
<h3><%= link_to investment.title, namespaced_budget_investment_path(investment) %></h3>
|
||||
|
||||
<p class="investment-project-info">
|
||||
<%= l investment.created_at.to_date %>
|
||||
<%= render Budgets::Investments::InfoComponent.new(investment) %>
|
||||
|
||||
<% if investment.author.hidden? || investment.author.erased? %>
|
||||
<span class="bullet"> • </span>
|
||||
<span class="author">
|
||||
<%= t("budgets.investments.show.author_deleted") %>
|
||||
</span>
|
||||
<% else %>
|
||||
<span class="bullet"> • </span>
|
||||
<span class="author">
|
||||
<%= investment.author.name %>
|
||||
</span>
|
||||
<% if investment.author.official? %>
|
||||
<span class="bullet"> • </span>
|
||||
<span class="label round level-<%= investment.author.official_level %>">
|
||||
<%= investment.author.official_position %>
|
||||
</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<span class="bullet"> • </span>
|
||||
<%= investment.heading.name %>
|
||||
</p>
|
||||
<div class="investment-project-description">
|
||||
<%= wysiwyg(investment.description) %>
|
||||
<div class="truncate"></div>
|
||||
|
||||
@@ -61,13 +61,13 @@
|
||||
<% end %>
|
||||
|
||||
<p>
|
||||
<%= link_to budget_path(@budget) do %>
|
||||
<%= link_to budget_investments_path(@budget, heading_id: @heading) do %>
|
||||
<small><%= t("budgets.results.investment_proyects") %></small>
|
||||
<% end %><br>
|
||||
<%= link_to budget_path(@budget, filter: "unfeasible") do %>
|
||||
<%= link_to budget_investments_path(@budget, heading_id: @heading, filter: "unfeasible") do %>
|
||||
<small><%= t("budgets.results.unfeasible_investment_proyects") %></small>
|
||||
<% end %><br>
|
||||
<%= link_to budget_path(@budget, filter: "unselected") do %>
|
||||
<%= link_to budget_investments_path(@budget, heading_id: @heading, filter: "unselected") do %>
|
||||
<small><%= t("budgets.results.not_selected_investment_proyects") %></small>
|
||||
<% end %>
|
||||
</p>
|
||||
|
||||
@@ -1,76 +1,9 @@
|
||||
<%= render Shared::BannerComponent.new("budgets") %>
|
||||
<% provide :title do %><%= @budget.name %><% end %>
|
||||
|
||||
<% content_for :canonical do %>
|
||||
<%= render "shared/canonical", href: budget_url(@budget, filter: @current_filter) %>
|
||||
<% end %>
|
||||
|
||||
<div class="budget-header">
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<%= back_link_to budgets_path %>
|
||||
|
||||
<h1><%= @budget.name %></h1>
|
||||
|
||||
<%= auto_link_already_sanitized_html wysiwyg(@budget.description) %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= render Budgets::SubheaderComponent.new(@budget) %>
|
||||
|
||||
<div class="row margin">
|
||||
<div class="small-12 medium-9 column">
|
||||
<% if @current_filter == "unfeasible" %>
|
||||
<h3 class="margin-bottom"><%= t("budgets.show.unfeasible_title") %></h3>
|
||||
<% elsif @current_filter == "unselected" %>
|
||||
<h3 class="margin-bottom"><%= t("budgets.show.unselected_title") %></h3>
|
||||
<% end %>
|
||||
<table class="table-fixed">
|
||||
<thead>
|
||||
<th><%= t("budgets.show.group") %></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% @budget.groups.each do |group| %>
|
||||
<tr>
|
||||
<td>
|
||||
<% if group.single_heading_group? %>
|
||||
<%= link_to group.name,
|
||||
budget_investments_path(@budget,
|
||||
heading_id: group.headings.first.id,
|
||||
filter: @current_filter),
|
||||
data: { turbolinks: false } %>
|
||||
<% else %>
|
||||
<%= link_to group.name,
|
||||
budget_group_path(@budget, group,
|
||||
filter: @current_filter) %>
|
||||
<% end %>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% if @budget.balloting_or_later? %>
|
||||
<% unless @current_filter == "unfeasible" %>
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<small>
|
||||
<%= link_to t("budgets.show.unfeasible"),
|
||||
budget_path(@budget, filter: "unfeasible") %>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% unless @current_filter == "unselected" %>
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<small>
|
||||
<%= link_to t("budgets.show.unselected"),
|
||||
budget_path(@budget, filter: "unselected") %>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<%= render Budgets::BudgetComponent.new(@budget) %>
|
||||
<%= render Budgets::FooterComponent.new %>
|
||||
|
||||
@@ -178,11 +178,6 @@ en:
|
||||
one: "You have selected <strong>1</strong> project out of <strong>%{limit}</strong>"
|
||||
other: "You have selected <strong>%{count}</strong> projects out of <strong>%{limit}</strong>"
|
||||
show:
|
||||
group: Group
|
||||
unfeasible_title: Unfeasible investments
|
||||
unfeasible: See unfeasible investments
|
||||
unselected_title: Investments not selected for balloting phase
|
||||
unselected: See investments not selected for balloting phase
|
||||
see_results: See results
|
||||
results:
|
||||
link: Results
|
||||
|
||||
@@ -178,11 +178,6 @@ es:
|
||||
one: "Has seleccionado <strong>1</strong> proyecto de <strong>%{limit}</strong>"
|
||||
other: "Has seleccionado <strong>%{count}</strong> proyectos de <strong>%{limit}</strong>"
|
||||
show:
|
||||
group: Grupo
|
||||
unfeasible_title: Proyectos de gasto inviables
|
||||
unfeasible: Ver los proyectos inviables
|
||||
unselected_title: Proyectos no seleccionados para la votación final
|
||||
unselected: Ver los proyectos no seleccionados para la votación final
|
||||
see_results: Ver resultados
|
||||
results:
|
||||
link: Resultados
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
require "rails_helper"
|
||||
require "sessions_helper"
|
||||
|
||||
describe "Ballots" do
|
||||
let(:user) { create(:user, :level_two) }
|
||||
@@ -61,13 +62,6 @@ describe "Ballots" do
|
||||
let!(:districts) { create(:budget_group, budget: budget, name: "Districts") }
|
||||
|
||||
context "Group and Heading Navigation" do
|
||||
scenario "Groups" do
|
||||
visit budget_path(budget)
|
||||
|
||||
expect(page).to have_link "City"
|
||||
expect(page).to have_link "Districts"
|
||||
end
|
||||
|
||||
scenario "Headings" do
|
||||
create(:budget_heading, group: city, name: "Investments Type1")
|
||||
create(:budget_heading, group: city, name: "Investments Type2")
|
||||
@@ -75,16 +69,13 @@ describe "Ballots" do
|
||||
create(:budget_heading, group: districts, name: "District 2")
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "City"
|
||||
|
||||
expect(page).to have_link "Investments Type1"
|
||||
expect(page).to have_link "Investments Type2"
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "Districts"
|
||||
|
||||
expect(page).to have_link "District 1"
|
||||
expect(page).to have_link "District 2"
|
||||
within("#groups_and_headings") do
|
||||
expect(page).to have_link "Investments Type1"
|
||||
expect(page).to have_link "Investments Type2"
|
||||
expect(page).to have_link "District 1"
|
||||
expect(page).to have_link "District 2"
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Investments" do
|
||||
@@ -105,7 +96,6 @@ describe "Ballots" do
|
||||
end
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "City"
|
||||
click_link "Above the city"
|
||||
|
||||
expect(page).to have_css(".budget-investment", count: 2)
|
||||
@@ -113,8 +103,6 @@ describe "Ballots" do
|
||||
expect(page).to have_content "Observatory"
|
||||
|
||||
visit budget_path(budget)
|
||||
|
||||
click_link "Districts"
|
||||
click_link "District 1"
|
||||
|
||||
expect(page).to have_css(".budget-investment", count: 2)
|
||||
@@ -122,22 +110,11 @@ describe "Ballots" do
|
||||
expect(page).to have_content "Zero-emission zone"
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "Districts"
|
||||
click_link "District 2"
|
||||
|
||||
expect(page).to have_css(".budget-investment", count: 1)
|
||||
expect(page).to have_content "Climbing wall"
|
||||
end
|
||||
|
||||
scenario "Redirect to first heading if there is only one" do
|
||||
city_heading = create(:budget_heading, group: city, name: "City")
|
||||
city_investment = create(:budget_investment, :selected, heading: city_heading)
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "City"
|
||||
|
||||
expect(page).to have_content city_investment.title
|
||||
end
|
||||
end
|
||||
|
||||
context "Adding and Removing Investments" do
|
||||
@@ -145,10 +122,7 @@ describe "Ballots" do
|
||||
create(:budget_investment, :selected, heading: new_york, price: 10000, title: "Bring back King Kong")
|
||||
create(:budget_investment, :selected, heading: new_york, price: 20000, title: "Paint cabs black")
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "States"
|
||||
click_link "New York"
|
||||
|
||||
visit budget_investments_path(budget, heading_id: new_york)
|
||||
add_to_ballot("Bring back King Kong")
|
||||
|
||||
expect(page).to have_css("#amount-spent", text: "€10,000")
|
||||
@@ -175,9 +149,7 @@ describe "Ballots" do
|
||||
scenario "Removing a investment", :js do
|
||||
investment = create(:budget_investment, :selected, heading: new_york, price: 10000, balloters: [user])
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "States"
|
||||
click_link "New York"
|
||||
visit budget_investments_path(budget, heading_id: new_york)
|
||||
|
||||
expect(page).to have_content investment.title
|
||||
expect(page).to have_css("#amount-spent", text: "€10,000")
|
||||
@@ -206,9 +178,7 @@ describe "Ballots" do
|
||||
scenario "the Map shoud be visible before and after", :js do
|
||||
create(:budget_investment, :selected, heading: new_york, price: 10000, title: "More bridges")
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "States"
|
||||
click_link "New York"
|
||||
visit budget_investments_path(budget, heading_id: new_york)
|
||||
|
||||
within("#sidebar") do
|
||||
expect(page).to have_content "OpenStreetMap"
|
||||
@@ -243,8 +213,7 @@ describe "Ballots" do
|
||||
create(:budget_investment, :selected, heading: district_heading1, price: 20000, title: "Average")
|
||||
create(:budget_investment, :selected, heading: district_heading2, price: 30000, title: "Expensive")
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "City"
|
||||
visit budget_investments_path(budget, heading_id: city_heading)
|
||||
|
||||
add_to_ballot("Cheap")
|
||||
|
||||
@@ -256,9 +225,7 @@ describe "Ballots" do
|
||||
expect(page).to have_content "€10,000"
|
||||
end
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "Districts"
|
||||
click_link "District 1"
|
||||
visit budget_investments_path(budget, heading_id: district_heading1)
|
||||
|
||||
expect(page).to have_css("#amount-spent", text: "€0")
|
||||
expect(page).to have_css("#amount-spent", text: "€1,000,000")
|
||||
@@ -276,8 +243,7 @@ describe "Ballots" do
|
||||
expect(page).not_to have_content "€10,000"
|
||||
end
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "City"
|
||||
visit budget_investments_path(budget, heading_id: city_heading)
|
||||
|
||||
expect(page).to have_css("#amount-spent", text: "€10,000")
|
||||
expect(page).to have_css("#amount-available", text: "€9,990,000")
|
||||
@@ -290,9 +256,7 @@ describe "Ballots" do
|
||||
expect(page).not_to have_content "€20,000"
|
||||
end
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "Districts"
|
||||
click_link "District 2"
|
||||
visit budget_investments_path(budget, heading_id: district_heading2)
|
||||
|
||||
expect(page).to have_content("You have active votes in another heading: District 1")
|
||||
end
|
||||
@@ -317,14 +281,11 @@ describe "Ballots" do
|
||||
scenario "Select my heading", :js do
|
||||
create(:budget_investment, :selected, heading: california, title: "Green beach")
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "States"
|
||||
click_link "California"
|
||||
visit budget_investments_path(budget, heading_id: california)
|
||||
|
||||
add_to_ballot("Green beach")
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "States"
|
||||
visit budget_group_path(budget, states)
|
||||
|
||||
expect(page).to have_content "California"
|
||||
expect(page).to have_css("#budget_heading_#{california.id}.is-active")
|
||||
@@ -345,8 +306,8 @@ describe "Ballots" do
|
||||
|
||||
add_to_ballot("Avengers Tower")
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "States"
|
||||
visit budget_group_path(budget, states)
|
||||
|
||||
expect(page).to have_css("#budget_heading_#{new_york.id}.is-active")
|
||||
expect(page).not_to have_css("#budget_heading_#{california.id}.is-active")
|
||||
end
|
||||
@@ -363,16 +324,6 @@ describe "Ballots" do
|
||||
end
|
||||
|
||||
context "Showing the ballot" do
|
||||
scenario "Do not display heading name if there is only one heading in the group (example: group city)" do
|
||||
group = create(:budget_group, budget: budget)
|
||||
heading = create(:budget_heading, group: group)
|
||||
visit budget_path(budget)
|
||||
click_link group.name
|
||||
# No need to click on the heading name
|
||||
expect(page).to have_content("Investment projects with scope: #{heading.name}")
|
||||
expect(page).to have_current_path(budget_investments_path(budget), ignore_query: true)
|
||||
end
|
||||
|
||||
scenario "Displaying the correct group, heading, count & amount" do
|
||||
group1 = create(:budget_group, budget: budget)
|
||||
group2 = create(:budget_group, budget: budget)
|
||||
@@ -471,28 +422,45 @@ describe "Ballots" do
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Back link after removing an investment from Ballot", :js do
|
||||
create(:budget_investment, :selected, heading: new_york, price: 10, title: "Sully monument")
|
||||
describe "Back link", :js do
|
||||
scenario "after adding and removing an investment from the ballot" do
|
||||
create(:budget_investment, :selected, heading: new_york, price: 10, title: "Sully monument")
|
||||
|
||||
login_as(user)
|
||||
visit budget_investments_path(budget, heading_id: new_york.id)
|
||||
add_to_ballot("Sully monument")
|
||||
login_as(user)
|
||||
visit budget_investments_path(budget, heading_id: new_york.id)
|
||||
add_to_ballot("Sully monument")
|
||||
|
||||
within(".budget-heading") do
|
||||
click_link "Check and confirm my ballot"
|
||||
within(".budget-heading") do
|
||||
click_link "Check and confirm my ballot"
|
||||
end
|
||||
|
||||
expect(page).to have_content("You have voted one investment")
|
||||
|
||||
within(".ballot-list li", text: "Sully monument") do
|
||||
find(".icon-x").click
|
||||
end
|
||||
|
||||
expect(page).to have_content("You have voted 0 investments")
|
||||
|
||||
click_link "Go back"
|
||||
|
||||
expect(page).to have_current_path(budget_investments_path(budget, heading_id: new_york.id))
|
||||
end
|
||||
|
||||
expect(page).to have_content("You have voted one investment")
|
||||
scenario "before adding any investments" do
|
||||
login_as(user)
|
||||
visit budget_investments_path(budget, heading_id: new_york.id)
|
||||
|
||||
within(".ballot-list li", text: "Sully monument") do
|
||||
find(".icon-x").click
|
||||
within(".budget-heading") do
|
||||
click_link "Check and confirm my ballot"
|
||||
end
|
||||
|
||||
expect(page).to have_content("You have voted 0 investments")
|
||||
|
||||
click_link "Go back"
|
||||
|
||||
expect(page).to have_current_path(budget_investments_path(budget, heading_id: new_york.id))
|
||||
end
|
||||
|
||||
expect(page).to have_content("You have voted 0 investments")
|
||||
|
||||
click_link "Go back"
|
||||
|
||||
expect(page).to have_current_path(budget_investments_path(budget, heading_id: new_york.id))
|
||||
end
|
||||
|
||||
context "Permissions" do
|
||||
@@ -542,9 +510,7 @@ describe "Ballots" do
|
||||
investment = create(:budget_investment, heading: new_york, title: "WTF asdfasfd")
|
||||
|
||||
login_as(user)
|
||||
visit budget_path(budget)
|
||||
click_link states.name
|
||||
click_link new_york.name
|
||||
visit budget_investments_path(budget, heading_id: new_york)
|
||||
|
||||
expect(page).not_to have_css("#budget_investment_#{investment.id}")
|
||||
end
|
||||
@@ -553,9 +519,7 @@ describe "Ballots" do
|
||||
investment = create(:budget_investment, :undecided, heading: new_york)
|
||||
|
||||
login_as(user)
|
||||
visit budget_path(budget)
|
||||
click_link states.name
|
||||
click_link new_york.name
|
||||
visit budget_investments_path(budget, heading_id: new_york)
|
||||
|
||||
within("#budget-investments") do
|
||||
expect(page).not_to have_css("div.ballot")
|
||||
@@ -679,23 +643,34 @@ describe "Ballots" do
|
||||
scenario "Edge case voting a non-elegible investment", :js do
|
||||
investment1 = create(:budget_investment, :selected, heading: new_york, price: 10000)
|
||||
|
||||
login_as(user)
|
||||
visit budget_path(budget)
|
||||
click_link "States"
|
||||
click_link "New York"
|
||||
in_browser(:user) do
|
||||
login_as user
|
||||
visit budget_investments_path(budget, heading_id: new_york)
|
||||
|
||||
new_york.update!(price: 10)
|
||||
expect(page).to have_css(".in-favor a")
|
||||
end
|
||||
|
||||
within("#budget_investment_#{investment1.id}") do
|
||||
find(".in-favor a").click
|
||||
in_browser(:admin) do
|
||||
login_as create(:administrator).user
|
||||
visit edit_admin_budget_group_heading_path(budget, states, new_york)
|
||||
fill_in "Amount", with: 10
|
||||
click_button "Save heading"
|
||||
|
||||
expect(page).not_to have_content "Remove"
|
||||
expect(page).not_to have_selector(".participation-not-allowed")
|
||||
expect(page).to have_content "Heading updated successfully"
|
||||
end
|
||||
|
||||
hover_over_ballot
|
||||
in_browser(:user) do
|
||||
within("#budget_investment_#{investment1.id}") do
|
||||
find(".in-favor a").click
|
||||
|
||||
expect(page).to have_selector(".participation-not-allowed")
|
||||
expect(page).to have_selector(".in-favor a", obscured: true)
|
||||
expect(page).not_to have_content "Remove"
|
||||
expect(page).not_to have_selector(".participation-not-allowed")
|
||||
|
||||
hover_over_ballot
|
||||
|
||||
expect(page).to have_selector(".participation-not-allowed")
|
||||
expect(page).to have_selector(".in-favor a", obscured: true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ describe "Budgets" do
|
||||
visit budgets_path
|
||||
|
||||
within("#budget_info") do
|
||||
expect(page).not_to have_link "#{heading.name} €1,000,000"
|
||||
expect(page).not_to have_link heading.name
|
||||
expect(page).to have_content "#{heading.name} €1,000,000"
|
||||
|
||||
expect(page).not_to have_link("List of all investment projects")
|
||||
@@ -136,7 +136,7 @@ describe "Budgets" do
|
||||
visit budgets_path
|
||||
|
||||
within("#budget_info") do
|
||||
expect(page).not_to have_link "#{heading.name} €1,000,000"
|
||||
expect(page).not_to have_link heading.name
|
||||
expect(page).to have_content "#{heading.name} €1,000,000"
|
||||
|
||||
expect(page).to have_css("div.map")
|
||||
@@ -307,7 +307,7 @@ describe "Budgets" do
|
||||
map_locations << { longitude: 40.123456789, latitude: "********" }
|
||||
map_locations << { longitude: "**********", latitude: 3.12345678 }
|
||||
|
||||
budget_map_locations = map_locations.map do |map_location|
|
||||
coordinates = map_locations.map do |map_location|
|
||||
{
|
||||
lat: map_location[:latitude],
|
||||
long: map_location[:longitude],
|
||||
@@ -317,8 +317,7 @@ describe "Budgets" do
|
||||
}
|
||||
end
|
||||
|
||||
allow_any_instance_of(BudgetsHelper).
|
||||
to receive(:current_budget_map_locations).and_return(budget_map_locations)
|
||||
allow_any_instance_of(Budgets::BudgetComponent).to receive(:coordinates).and_return(coordinates)
|
||||
|
||||
visit budgets_path
|
||||
|
||||
@@ -329,61 +328,32 @@ describe "Budgets" do
|
||||
end
|
||||
|
||||
context "Show" do
|
||||
scenario "List all groups" do
|
||||
create(:budget_group, budget: budget)
|
||||
create(:budget_group, budget: budget)
|
||||
|
||||
visit budget_path(budget)
|
||||
|
||||
budget.groups.each { |group| expect(page).to have_link(group.name) }
|
||||
end
|
||||
|
||||
scenario "Links to unfeasible and selected if balloting or later" do
|
||||
budget = create(:budget, :selecting)
|
||||
group = create(:budget_group, budget: budget)
|
||||
|
||||
visit budget_path(budget)
|
||||
|
||||
expect(page).not_to have_link "See unfeasible investments"
|
||||
expect(page).not_to have_link "See investments not selected for balloting phase"
|
||||
|
||||
click_link group.name
|
||||
visit budget_group_path(budget, group)
|
||||
|
||||
expect(page).not_to have_link "See unfeasible investments"
|
||||
expect(page).not_to have_link "See investments not selected for balloting phase"
|
||||
|
||||
budget.update!(phase: :publishing_prices)
|
||||
|
||||
visit budget_path(budget)
|
||||
|
||||
expect(page).not_to have_link "See unfeasible investments"
|
||||
expect(page).not_to have_link "See investments not selected for balloting phase"
|
||||
|
||||
click_link group.name
|
||||
visit budget_group_path(budget, group)
|
||||
|
||||
expect(page).not_to have_link "See unfeasible investments"
|
||||
expect(page).not_to have_link "See investments not selected for balloting phase"
|
||||
|
||||
budget.update!(phase: :balloting)
|
||||
|
||||
visit budget_path(budget)
|
||||
|
||||
expect(page).to have_link "See unfeasible investments"
|
||||
expect(page).to have_link "See investments not selected for balloting phase"
|
||||
|
||||
click_link group.name
|
||||
visit budget_group_path(budget, group)
|
||||
|
||||
expect(page).to have_link "See unfeasible investments"
|
||||
expect(page).to have_link "See investments not selected for balloting phase"
|
||||
|
||||
budget.update!(phase: :finished)
|
||||
|
||||
visit budget_path(budget)
|
||||
|
||||
expect(page).to have_link "See unfeasible investments"
|
||||
expect(page).to have_link "See investments not selected for balloting phase"
|
||||
|
||||
click_link group.name
|
||||
visit budget_group_path(budget, group)
|
||||
|
||||
expect(page).to have_link "See unfeasible investments"
|
||||
expect(page).to have_link "See investments not selected for balloting phase"
|
||||
@@ -399,8 +369,7 @@ describe "Budgets" do
|
||||
heading3 = create(:budget_heading, group: group2, name: "Brooklyn")
|
||||
heading4 = create(:budget_heading, group: group2, name: "Queens")
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "New York"
|
||||
visit budget_group_path(budget, group1)
|
||||
|
||||
expect(page).to have_css("#budget_heading_#{heading1.id}")
|
||||
expect(page).to have_css("#budget_heading_#{heading2.id}")
|
||||
|
||||
@@ -68,5 +68,13 @@ describe "Budget Groups" do
|
||||
expect(page).to have_link "Southwest"
|
||||
expect(page).not_to have_link "See investments not selected for balloting phase unfeasible investments"
|
||||
end
|
||||
|
||||
scenario "Back link", :js do
|
||||
visit budget_group_path(budget, group)
|
||||
|
||||
click_link "Go back"
|
||||
|
||||
expect(page).to have_current_path budget_path(budget)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -78,7 +78,7 @@ describe "Budget Investments" do
|
||||
unfeasible_investment = create(:budget_investment, :unfeasible, heading: heading)
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "Health"
|
||||
click_link "More hospitals"
|
||||
|
||||
expect(page).to have_selector("#budget-investments .budget-investment", count: 3)
|
||||
investments.each do |investment|
|
||||
@@ -88,6 +88,10 @@ describe "Budget Investments" do
|
||||
expect(page).not_to have_content(unfeasible_investment.title)
|
||||
end
|
||||
end
|
||||
|
||||
click_link "Go back"
|
||||
|
||||
expect(page).to have_current_path budget_path(budget)
|
||||
end
|
||||
|
||||
scenario "Index view mode" do
|
||||
@@ -95,11 +99,9 @@ describe "Budget Investments" do
|
||||
create(:budget_investment, heading: heading),
|
||||
create(:budget_investment, heading: heading)]
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "Health"
|
||||
visit budget_investments_path(budget, heading_id: heading)
|
||||
|
||||
click_button "View mode"
|
||||
|
||||
click_link "List"
|
||||
|
||||
investments.each do |investment|
|
||||
@@ -110,7 +112,6 @@ describe "Budget Investments" do
|
||||
end
|
||||
|
||||
click_button "View mode"
|
||||
|
||||
click_link "Cards"
|
||||
|
||||
investments.each do |investment|
|
||||
@@ -238,47 +239,6 @@ describe "Budget Investments" do
|
||||
end
|
||||
end
|
||||
|
||||
scenario "by unfeasibilty link for group with one heading" do
|
||||
budget.update!(phase: :balloting)
|
||||
group = create(:budget_group, name: "All City", budget: budget)
|
||||
heading = create(:budget_heading, name: "Madrid", group: group)
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "See unfeasible investments"
|
||||
|
||||
click_link "All City"
|
||||
|
||||
expected_path = budget_investments_path(budget, heading_id: heading.id, filter: "unfeasible")
|
||||
expect(page).to have_current_path(expected_path)
|
||||
end
|
||||
|
||||
scenario "by unfeasibilty link for group with many headings" do
|
||||
budget.update!(phase: :balloting)
|
||||
group = create(:budget_group, name: "Districts", budget: budget)
|
||||
|
||||
barajas = create(:budget_heading, name: "Barajas", group: group)
|
||||
carabanchel = create(:budget_heading, name: "Carabanchel", group: group)
|
||||
|
||||
create(:budget_investment, :feasible, heading: barajas, title: "Terminal 5")
|
||||
create(:budget_investment, :unfeasible, heading: barajas, title: "Seaport")
|
||||
create(:budget_investment, :unfeasible, heading: carabanchel, title: "Airport")
|
||||
|
||||
visit budget_path(budget)
|
||||
|
||||
click_link "See unfeasible investments"
|
||||
|
||||
click_link "Districts"
|
||||
click_link "Barajas"
|
||||
|
||||
within("#budget-investments") do
|
||||
expect(page).to have_css(".budget-investment", count: 1)
|
||||
|
||||
expect(page).to have_content "Seaport"
|
||||
expect(page).not_to have_content "Terminal 5"
|
||||
expect(page).not_to have_content "Airport"
|
||||
end
|
||||
end
|
||||
|
||||
context "Results Phase" do
|
||||
before { budget.update(phase: "finished", results_enabled: true) }
|
||||
|
||||
@@ -286,8 +246,7 @@ describe "Budget Investments" do
|
||||
investment1 = create(:budget_investment, :winner, heading: heading)
|
||||
investment2 = create(:budget_investment, :selected, heading: heading)
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "Health"
|
||||
visit budget_investments_path(budget, heading_id: heading)
|
||||
|
||||
within("#budget-investments") do
|
||||
expect(page).to have_css(".budget-investment", count: 1)
|
||||
@@ -297,7 +256,6 @@ describe "Budget Investments" do
|
||||
|
||||
visit budget_results_path(budget)
|
||||
click_link "List of all investment projects"
|
||||
click_link "Health"
|
||||
|
||||
within("#budget-investments") do
|
||||
expect(page).to have_css(".budget-investment", count: 1)
|
||||
@@ -312,7 +270,6 @@ describe "Budget Investments" do
|
||||
|
||||
visit budget_results_path(budget)
|
||||
click_link "List of all unfeasible investment projects"
|
||||
click_link "Health"
|
||||
|
||||
within("#budget-investments") do
|
||||
expect(page).to have_css(".budget-investment", count: 1)
|
||||
@@ -327,7 +284,6 @@ describe "Budget Investments" do
|
||||
|
||||
visit budget_results_path(budget)
|
||||
click_link "List of all investment projects not selected for balloting"
|
||||
click_link "Health"
|
||||
|
||||
within("#budget-investments") do
|
||||
expect(page).to have_css(".budget-investment", count: 1)
|
||||
@@ -1230,7 +1186,7 @@ describe "Budget Investments" do
|
||||
|
||||
first(:link, "Participatory budgeting").click
|
||||
|
||||
click_link "More hospitals €666,666"
|
||||
click_link "More hospitals"
|
||||
|
||||
within("#budget_investment_#{investment1.id}") do
|
||||
expect(page).to have_content investment1.title
|
||||
@@ -1305,19 +1261,12 @@ describe "Budget Investments" do
|
||||
create(:budget_investment, :selected, price: 100000, heading: new_york_heading, title: "NASA base")
|
||||
|
||||
login_as(user)
|
||||
visit budget_path(budget)
|
||||
|
||||
click_link "Global Group"
|
||||
# No need to click_link "Global Heading" because the link of a group with a single heading
|
||||
# points to the list of investments directly
|
||||
visit budget_investments_path(budget, heading: global_heading)
|
||||
|
||||
add_to_ballot("World T-Shirt")
|
||||
add_to_ballot("Eco pens")
|
||||
|
||||
visit budget_path(budget)
|
||||
|
||||
click_link "Health"
|
||||
click_link "Carabanchel"
|
||||
visit budget_investments_path(budget, heading: carabanchel_heading)
|
||||
|
||||
add_to_ballot("Fireworks")
|
||||
add_to_ballot("Bus pass")
|
||||
@@ -1360,10 +1309,7 @@ describe "Budget Investments" do
|
||||
create(:budget_investment, :selected, heading: heading_1, title: "Zero-emission zone")
|
||||
|
||||
login_as(user)
|
||||
visit budget_path(budget)
|
||||
|
||||
click_link "Health"
|
||||
click_link "Heading 1"
|
||||
visit budget_investments_path(budget, heading_id: heading_1)
|
||||
|
||||
add_to_ballot("Zero-emission zone")
|
||||
|
||||
@@ -1413,45 +1359,6 @@ describe "Budget Investments" do
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Shows unselected link for group with one heading" do
|
||||
group = create(:budget_group, name: "All City", budget: budget)
|
||||
heading = create(:budget_heading, name: "Madrid", group: group)
|
||||
|
||||
visit budget_path(budget)
|
||||
click_link "See investments not selected for balloting phase"
|
||||
|
||||
click_link "All City"
|
||||
|
||||
expected_path = budget_investments_path(budget, heading_id: heading.id, filter: "unselected")
|
||||
expect(page).to have_current_path(expected_path)
|
||||
end
|
||||
|
||||
scenario "Shows unselected link for group with many headings" do
|
||||
group = create(:budget_group, name: "Districts", budget: budget)
|
||||
|
||||
barajas = create(:budget_heading, name: "Barajas", group: group)
|
||||
carabanchel = create(:budget_heading, name: "Carabanchel", group: group)
|
||||
|
||||
create(:budget_investment, :selected, heading: barajas, title: "Terminal 5")
|
||||
create(:budget_investment, :unselected, heading: barajas, title: "Seaport")
|
||||
create(:budget_investment, :unselected, heading: carabanchel, title: "Airport")
|
||||
|
||||
visit budget_path(budget)
|
||||
|
||||
click_link "See investments not selected for balloting phase"
|
||||
|
||||
click_link "Districts"
|
||||
click_link "Barajas"
|
||||
|
||||
within("#budget-investments") do
|
||||
expect(page).to have_css(".budget-investment", count: 1)
|
||||
|
||||
expect(page).to have_content "Seaport"
|
||||
expect(page).not_to have_content "Terminal 5"
|
||||
expect(page).not_to have_content "Airport"
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Do not display vote button for unselected investments in index" do
|
||||
investment = create(:budget_investment, :unselected, heading: heading)
|
||||
|
||||
|
||||
@@ -256,8 +256,7 @@ describe "Tags" do
|
||||
end
|
||||
|
||||
login_as(admin) if budget.drafting?
|
||||
visit budget_path(budget)
|
||||
click_link group.name
|
||||
visit budget_investments_path(budget, heading: heading.id)
|
||||
|
||||
within "#tag-cloud" do
|
||||
click_link new_tag
|
||||
@@ -305,8 +304,7 @@ describe "Tags" do
|
||||
end
|
||||
|
||||
login_as(admin) if budget.drafting?
|
||||
visit budget_path(budget)
|
||||
click_link group.name
|
||||
visit budget_investments_path(budget, heading: heading.id)
|
||||
|
||||
within "#categories" do
|
||||
click_link tag_medio_ambiente.name
|
||||
|
||||
Reference in New Issue
Block a user