Extract component for investment toggle selection
This way it'll be easier to refactor it.
This commit is contained in:
@@ -55,40 +55,7 @@
|
||||
</td>
|
||||
|
||||
<td data-field="selected">
|
||||
<% if investment.selected? %>
|
||||
<%= link_to_if can?(:toggle_selection, investment),
|
||||
t("admin.budget_investments.index.selected"),
|
||||
toggle_selection_admin_budget_budget_investment_path(
|
||||
budget,
|
||||
investment,
|
||||
filter: params[:filter],
|
||||
sort_by: params[:sort_by],
|
||||
min_total_supports: params[:min_total_supports],
|
||||
max_total_supports: params[:max_total_supports],
|
||||
advanced_filters: params[:advanced_filters],
|
||||
page: params[:page]
|
||||
),
|
||||
method: :patch,
|
||||
remote: true,
|
||||
class: "button small expanded" %>
|
||||
<% elsif investment.feasible? && investment.valuation_finished? %>
|
||||
<% if can?(:toggle_selection, investment) %>
|
||||
<%= link_to t("admin.budget_investments.index.select"),
|
||||
toggle_selection_admin_budget_budget_investment_path(
|
||||
budget,
|
||||
investment,
|
||||
filter: params[:filter],
|
||||
sort_by: params[:sort_by],
|
||||
min_total_supports: params[:min_total_supports],
|
||||
max_total_supports: params[:max_total_supports],
|
||||
advanced_filters: params[:advanced_filters],
|
||||
page: params[:page]
|
||||
),
|
||||
method: :patch,
|
||||
remote: true,
|
||||
class: "button small hollow expanded" %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<%= render Admin::BudgetInvestments::ToggleSelectionComponent.new(investment) %>
|
||||
</td>
|
||||
|
||||
<% if params[:advanced_filters]&.include?("selected") %>
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<% if investment.selected? %>
|
||||
<%= link_to_if can?(:toggle_selection, investment),
|
||||
t("admin.budget_investments.index.selected"),
|
||||
toggle_selection_admin_budget_budget_investment_path(
|
||||
budget,
|
||||
investment,
|
||||
filter: params[:filter],
|
||||
sort_by: params[:sort_by],
|
||||
min_total_supports: params[:min_total_supports],
|
||||
max_total_supports: params[:max_total_supports],
|
||||
advanced_filters: params[:advanced_filters],
|
||||
page: params[:page]
|
||||
),
|
||||
method: :patch,
|
||||
remote: true,
|
||||
class: "button small expanded" %>
|
||||
<% elsif investment.feasible? && investment.valuation_finished? %>
|
||||
<% if can?(:toggle_selection, investment) %>
|
||||
<%= link_to t("admin.budget_investments.index.select"),
|
||||
toggle_selection_admin_budget_budget_investment_path(
|
||||
budget,
|
||||
investment,
|
||||
filter: params[:filter],
|
||||
sort_by: params[:sort_by],
|
||||
min_total_supports: params[:min_total_supports],
|
||||
max_total_supports: params[:max_total_supports],
|
||||
advanced_filters: params[:advanced_filters],
|
||||
page: params[:page]
|
||||
),
|
||||
method: :patch,
|
||||
remote: true,
|
||||
class: "button small hollow expanded" %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -0,0 +1,14 @@
|
||||
class Admin::BudgetInvestments::ToggleSelectionComponent < ApplicationComponent
|
||||
attr_reader :investment
|
||||
use_helpers :can?
|
||||
|
||||
def initialize(investment)
|
||||
@investment = investment
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def budget
|
||||
investment.budget
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,64 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe Admin::BudgetInvestments::ToggleSelectionComponent, :admin do
|
||||
context "open budget" do
|
||||
let(:budget) { create(:budget) }
|
||||
|
||||
it "is not rendered for not-yet-evaluated investments" do
|
||||
unfeasible_investment = create(:budget_investment, :unfeasible, budget: budget)
|
||||
feasible_investment = create(:budget_investment, :feasible, budget: budget)
|
||||
|
||||
render_inline Admin::BudgetInvestments::ToggleSelectionComponent.new(unfeasible_investment)
|
||||
expect(page).not_to be_rendered
|
||||
|
||||
render_inline Admin::BudgetInvestments::ToggleSelectionComponent.new(feasible_investment)
|
||||
expect(page).not_to be_rendered
|
||||
end
|
||||
|
||||
it "renders a link to select unselected evaluated investments" do
|
||||
valuation_finished_investment = create(:budget_investment, :feasible, :finished, budget: budget)
|
||||
|
||||
render_inline Admin::BudgetInvestments::ToggleSelectionComponent.new(valuation_finished_investment)
|
||||
|
||||
expect(page).to have_link "Select"
|
||||
expect(page).not_to have_link "Selected"
|
||||
end
|
||||
|
||||
it "renders a link to deselect selected investments" do
|
||||
selected_investment = create(:budget_investment, :selected, budget: budget)
|
||||
|
||||
render_inline Admin::BudgetInvestments::ToggleSelectionComponent.new(selected_investment)
|
||||
|
||||
expect(page).to have_link "Selected"
|
||||
expect(page).not_to have_link "Select"
|
||||
end
|
||||
end
|
||||
|
||||
context "finished budget" do
|
||||
let(:budget) { create(:budget, :finished) }
|
||||
|
||||
it "is not rendered for unselected investments" do
|
||||
unfeasible_investment = create(:budget_investment, :unfeasible, budget: budget)
|
||||
feasible_investment = create(:budget_investment, :feasible, budget: budget)
|
||||
valuation_finished_investment = create(:budget_investment, :feasible, :finished, budget: budget)
|
||||
|
||||
render_inline Admin::BudgetInvestments::ToggleSelectionComponent.new(unfeasible_investment)
|
||||
expect(page).not_to be_rendered
|
||||
|
||||
render_inline Admin::BudgetInvestments::ToggleSelectionComponent.new(feasible_investment)
|
||||
expect(page).not_to be_rendered
|
||||
|
||||
render_inline Admin::BudgetInvestments::ToggleSelectionComponent.new(valuation_finished_investment)
|
||||
expect(page).not_to be_rendered
|
||||
end
|
||||
|
||||
it "renders plain text for selected investments" do
|
||||
selected_investment = create(:budget_investment, :selected, budget: budget)
|
||||
|
||||
render_inline Admin::BudgetInvestments::ToggleSelectionComponent.new(selected_investment)
|
||||
|
||||
expect(page).to have_content "Selected"
|
||||
expect(page).not_to have_link "Selected"
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -43,21 +43,6 @@ describe "Admin budget investments", :admin do
|
||||
expect(page).not_to have_content("€")
|
||||
end
|
||||
|
||||
scenario "If budget is finished do not show 'Selected' button" do
|
||||
finished_budget = create(:budget, :finished)
|
||||
budget_investment = create(:budget_investment, budget: finished_budget, cached_votes_up: 77)
|
||||
|
||||
visit admin_budget_budget_investments_path(budget_id: finished_budget.id)
|
||||
|
||||
within("#budget_investment_#{budget_investment.id}") do
|
||||
expect(page).to have_content(budget_investment.title)
|
||||
expect(page).to have_content(budget_investment.heading.name)
|
||||
expect(page).to have_content(budget_investment.id)
|
||||
expect(page).to have_content(budget_investment.total_votes)
|
||||
expect(page).not_to have_link("Selected")
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Display admin and valuator assignments" do
|
||||
olga = create(:user, username: "Olga")
|
||||
miriam = create(:user, username: "Miriam")
|
||||
@@ -1422,56 +1407,6 @@ describe "Admin budget investments", :admin do
|
||||
expect(page).not_to have_content(feasible_vf_bi.title)
|
||||
end
|
||||
|
||||
scenario "Showing the selection buttons" do
|
||||
visit admin_budget_budget_investments_path(budget)
|
||||
|
||||
within("#budget_investment_#{unfeasible_bi.id}") do
|
||||
expect(page).not_to have_link("Select")
|
||||
expect(page).not_to have_link("Selected")
|
||||
end
|
||||
|
||||
within("#budget_investment_#{feasible_bi.id}") do
|
||||
expect(page).not_to have_link("Select")
|
||||
expect(page).not_to have_link("Selected")
|
||||
end
|
||||
|
||||
within("#budget_investment_#{feasible_vf_bi.id}") do
|
||||
expect(page).to have_link("Select")
|
||||
expect(page).not_to have_link("Selected")
|
||||
end
|
||||
|
||||
within("#budget_investment_#{selected_bi.id}") do
|
||||
expect(page).not_to have_link("Select")
|
||||
expect(page).to have_link("Selected")
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Show only selected text when budget is finished" do
|
||||
budget.update!(phase: "finished")
|
||||
|
||||
visit admin_budget_budget_investments_path(budget)
|
||||
|
||||
within("#budget_investment_#{unfeasible_bi.id} [data-field=selected]") do
|
||||
expect(page).not_to have_content("Select")
|
||||
expect(page).not_to have_content("Selected")
|
||||
end
|
||||
|
||||
within("#budget_investment_#{feasible_bi.id} [data-field=selected]") do
|
||||
expect(page).not_to have_content("Select")
|
||||
expect(page).not_to have_content("Selected")
|
||||
end
|
||||
|
||||
within("#budget_investment_#{feasible_vf_bi.id} [data-field=selected]") do
|
||||
expect(page).not_to have_content("Select")
|
||||
expect(page).not_to have_content("Selected")
|
||||
end
|
||||
|
||||
within("#budget_investment_#{selected_bi.id} [data-field=selected]") do
|
||||
expect(page).not_to contain_exactly("Select")
|
||||
expect(page).to have_content("Selected")
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Selecting an investment" do
|
||||
visit admin_budget_budget_investments_path(budget)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user