diff --git a/app/components/budgets/investments/ballot_component.html.erb b/app/components/budgets/investments/ballot_component.html.erb index 4d3868666..3866e5098 100644 --- a/app/components/budgets/investments/ballot_component.html.erb +++ b/app/components/budgets/investments/ballot_component.html.erb @@ -14,7 +14,8 @@ investments_ids: investment_ids), class: "button button-remove-support expanded", method: :delete, - remote: true %> + remote: true, + "aria-label": remove_vote_aria_label %> <% end %> <% else %> @@ -30,7 +31,8 @@ class: "button button-support expanded", title: t("budgets.investments.investment.support_title"), method: :post, - remote: true %> + remote: true, + "aria-label": vote_aria_label %> <% end %> <% end %> diff --git a/app/components/budgets/investments/ballot_component.rb b/app/components/budgets/investments/ballot_component.rb index 016e7f4f4..016ff1bac 100644 --- a/app/components/budgets/investments/ballot_component.rb +++ b/app/components/budgets/investments/ballot_component.rb @@ -24,6 +24,14 @@ class Budgets::Investments::BallotComponent < ApplicationComponent @reason ||= investment.reason_for_not_being_ballotable_by(current_user, ballot) end + def vote_aria_label + t("budgets.investments.investment.add_label", investment: investment.title) + end + + def remove_vote_aria_label + t("budgets.ballots.show.remove_label", investment: investment.title) + end + def link_to_my_heading link_to(investment.heading.name, budget_investments_path(budget_id: investment.budget_id, diff --git a/config/locales/en/budgets.yml b/config/locales/en/budgets.yml index 6535410f3..4e2fb88bb 100644 --- a/config/locales/en/budgets.yml +++ b/config/locales/en/budgets.yml @@ -23,6 +23,7 @@ en: other: "You can vote up to %{count} projects" no_balloted_group_yet: "You have not voted on this group yet, go vote!" remove: Remove vote + remove_label: "Remove your vote for %{investment}" voted: one: "You have voted one investment." other: "You have voted %{count} investments." @@ -151,6 +152,7 @@ en: wrong_price_format: Only integer numbers investment: add: Vote + add_label: "Vote %{investment}" already_added: You have already added this investment project support_title: Support this project supports: diff --git a/config/locales/es/budgets.yml b/config/locales/es/budgets.yml index 7c4601039..6d892076b 100644 --- a/config/locales/es/budgets.yml +++ b/config/locales/es/budgets.yml @@ -23,6 +23,7 @@ es: other: "Puedes votar hasta %{count} proyectos" no_balloted_group_yet: "Todavía no has votado proyectos de este grupo, ¡vota!" remove: Quitar voto + remove_label: "Quitar tu voto a %{investment}" voted: one: "Has votado un proyecto." other: "Has votado %{count} proyectos." @@ -151,6 +152,7 @@ es: wrong_price_format: Solo puede incluir caracteres numéricos investment: add: Votar + add_label: "Votar %{investment}" already_added: Ya has añadido este proyecto de gasto support_title: Apoyar este proyecto supports: diff --git a/spec/components/budgets/investments/ballot_component_spec.rb b/spec/components/budgets/investments/ballot_component_spec.rb new file mode 100644 index 000000000..0048246c7 --- /dev/null +++ b/spec/components/budgets/investments/ballot_component_spec.rb @@ -0,0 +1,47 @@ +require "rails_helper" + +describe Budgets::Investments::BallotComponent do + describe "vote investment link" do + let(:budget) { create(:budget, :balloting) } + let(:investment) { create(:budget_investment, :selected, title: "New Sports Center", budget: budget) } + let(:component) do + Budgets::Investments::BallotComponent.new( + investment: investment, + investment_ids: [], + ballot: Budget::Ballot.where(budget: budget, user: controller.current_user).first_or_create!, + assigned_heading: nil + ) + end + + it "is shown alongside a 'not allowed' message to unverified users" do + sign_in(create(:user)) + + render_inline component + + expect(page).to have_link "Vote" + expect(page).to have_content "Only verified users can vote on investments; verify your account." + end + + it "is shown to verified users" do + sign_in(create(:user, :level_two)) + + render_inline component + + expect(page).to have_link count: 1 + expect(page).to have_link "Vote", title: "Support this project" + expect(page).to have_link "Vote New Sports Center" + expect(page).not_to have_link "Remove vote" + end + + it "is replaced with a link to remove the vote when the user has already voted" do + sign_in(create(:user, :level_two, ballot_lines: [investment])) + + render_inline component + + expect(page).to have_link count: 1 + expect(page).to have_link "Remove vote" + expect(page).to have_link "Remove your vote for New Sports Center" + expect(page).not_to have_link "Vote" + end + end +end