Files
nairobi/spec/components/admin/budget_investments/toggle_selection_component_spec.rb
Javi Martín 9e5566cee4 Use a button to toggle investment selection
As mentioned in commit 5311daadf, using buttons for non-GET requests has
several advantages over using links.
2024-10-28 13:39:49 +01:00

65 lines
2.5 KiB
Ruby

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 button 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_button "Select"
expect(page).not_to have_button "Selected"
end
it "renders a button 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_button "Selected"
expect(page).not_to have_button "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_button "Selected"
end
end
end