Unify the logic to show the "not allowed" message
We were using the same logic six times regarding when we should show a "participation not allowed" message. Since we're going to change the current behavior, we're unifying the logic in one place so the changes will be easier.
This commit is contained in:
@@ -40,17 +40,5 @@
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if reason.present? && !voted? %>
|
||||
<div tabindex="0">
|
||||
<div class="participation-not-allowed" style="display:none">
|
||||
<p>
|
||||
<%= sanitize(t("budgets.ballots.reasons_for_not_balloting.#{reason}",
|
||||
verify_account: link_to_verify_account, signin: link_to_signin,
|
||||
signup: link_to_signup, my_heading: link_to_my_heading,
|
||||
change_ballot: link_to_change_ballot,
|
||||
heading_link: heading_link(assigned_heading, budget))) %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= render Shared::ParticipationNotAllowedComponent.new(investment, cannot_vote_text: cannot_vote_text) %>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
class Budgets::Investments::BallotComponent < ApplicationComponent
|
||||
attr_reader :investment, :investment_ids, :ballot, :assigned_heading
|
||||
delegate :current_user, :heading_link, :link_to_signin, :link_to_signup,
|
||||
:link_to_verify_account, to: :helpers
|
||||
delegate :current_user, :heading_link, :link_to_verify_account, to: :helpers
|
||||
|
||||
def initialize(investment:, investment_ids:, ballot:, assigned_heading:)
|
||||
@investment = investment
|
||||
@@ -42,4 +41,14 @@ class Budgets::Investments::BallotComponent < ApplicationComponent
|
||||
link_to(t("budgets.ballots.reasons_for_not_balloting.change_ballot"),
|
||||
budget_ballot_path(budget))
|
||||
end
|
||||
|
||||
def cannot_vote_text
|
||||
if reason.present? && !voted?
|
||||
t("budgets.ballots.reasons_for_not_balloting.#{reason}",
|
||||
verify_account: link_to_verify_account,
|
||||
my_heading: link_to_my_heading,
|
||||
change_ballot: link_to_change_ballot,
|
||||
heading_link: heading_link(assigned_heading, budget))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -34,21 +34,7 @@
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% if reason.present? && !user_voted_for? %>
|
||||
<div tabindex="0">
|
||||
<div class="participation-not-allowed" style="display:none" aria-hidden="false">
|
||||
<p>
|
||||
<%= sanitize(t("votes.budget_investments.#{reason}",
|
||||
count: investment.group.max_votable_headings,
|
||||
verify_account: link_to_verify_account,
|
||||
signin: link_to_signin,
|
||||
signup: link_to_signup,
|
||||
supported_headings: (current_user && current_user.headings_voted_within_group(investment.group).map(&:name).sort.to_sentence)
|
||||
)) %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= render Shared::ParticipationNotAllowedComponent.new(investment, cannot_vote_text: cannot_vote_text) %>
|
||||
|
||||
<% if user_voted_for? && setting["twitter_handle"] %>
|
||||
<div class="share-supported">
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
class Budgets::Investments::VotesComponent < ApplicationComponent
|
||||
attr_reader :investment
|
||||
delegate :namespace, :current_user, :image_absolute_url,
|
||||
:link_to_verify_account, :link_to_signin, :link_to_signup, to: :helpers
|
||||
delegate :namespace, :current_user, :image_absolute_url, :link_to_verify_account, to: :helpers
|
||||
|
||||
def initialize(investment)
|
||||
@investment = investment
|
||||
@@ -59,4 +58,13 @@ class Budgets::Investments::VotesComponent < ApplicationComponent
|
||||
def remove_support_aria_label
|
||||
t("budgets.investments.votes.remove_support_label", investment: investment.title)
|
||||
end
|
||||
|
||||
def cannot_vote_text
|
||||
if reason.present? && !user_voted_for?
|
||||
t("votes.budget_investments.#{reason}",
|
||||
count: investment.group.max_votable_headings,
|
||||
verify_account: link_to_verify_account,
|
||||
supported_headings: (current_user && current_user.headings_voted_within_group(investment.group).map(&:name).sort.to_sentence))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,21 +5,5 @@
|
||||
<%= t("debates.debate.votes", count: debate.votes_score) %>
|
||||
</span>
|
||||
|
||||
<% if !current_user %>
|
||||
<div tabindex="0">
|
||||
<%= render "shared/login_to_vote" %>
|
||||
</div>
|
||||
<% elsif organization? %>
|
||||
<div class="participation-not-allowed" style="display:none" aria-hidden="false">
|
||||
<p>
|
||||
<%= t("votes.organizations") %>
|
||||
</p>
|
||||
</div>
|
||||
<% elsif !can_vote? %>
|
||||
<div class="participation-not-allowed" style="display:none" aria-hidden="false">
|
||||
<p>
|
||||
<%= sanitize(t("votes.anonymous", verify_account: link_to_verify_account)) %>
|
||||
</p>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= render Shared::ParticipationNotAllowedComponent.new(debate, cannot_vote_text: cannot_vote_text) %>
|
||||
</div>
|
||||
|
||||
@@ -12,7 +12,7 @@ class Debates::VotesComponent < ApplicationComponent
|
||||
debate.votable_by?(current_user)
|
||||
end
|
||||
|
||||
def organization?
|
||||
current_user&.organization?
|
||||
def cannot_vote_text
|
||||
t("votes.anonymous", verify_account: link_to_verify_account) unless can_vote?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7,24 +7,7 @@
|
||||
<%= t("proposals.proposal.votes", count: proposal.votes_score) %>
|
||||
</span>
|
||||
|
||||
<% if !current_user %>
|
||||
<div tabindex="0">
|
||||
<%= render "shared/login_to_vote" %>
|
||||
</div>
|
||||
<% elsif organization? %>
|
||||
<div class="participation-not-allowed" style="display:none" aria-hidden="false">
|
||||
<p>
|
||||
<%= t("votes.organizations") %>
|
||||
</p>
|
||||
</div>
|
||||
<% elsif !can_vote? %>
|
||||
<div class="participation-not-allowed" style="display:none" aria-hidden="false">
|
||||
<p>
|
||||
<%= sanitize(t("legislation.proposals.not_verified",
|
||||
verify_account: link_to_verify_account)) %>
|
||||
</p>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= render Shared::ParticipationNotAllowedComponent.new(proposal, cannot_vote_text: cannot_vote_text) %>
|
||||
|
||||
<% if current_user&.voted_as_when_voted_for(proposal) && setting["twitter_handle"] %>
|
||||
<div class="share-supported">
|
||||
|
||||
@@ -12,7 +12,7 @@ class Legislation::Proposals::VotesComponent < ApplicationComponent
|
||||
proposal.votable_by?(current_user)
|
||||
end
|
||||
|
||||
def organization?
|
||||
current_user&.organization?
|
||||
def cannot_vote_text
|
||||
t("legislation.proposals.not_verified", verify_account: link_to_verify_account) unless can_vote?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -19,25 +19,7 @@
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% if !current_user %>
|
||||
<div tabindex="0">
|
||||
<%= render "shared/login_to_vote" %>
|
||||
</div>
|
||||
<% elsif organization? %>
|
||||
<div class="participation-not-allowed" style="display:none" aria-hidden="false">
|
||||
<p>
|
||||
<%= t("votes.organizations") %>
|
||||
</p>
|
||||
</div>
|
||||
<% elsif !can_vote? %>
|
||||
<div tabindex="0">
|
||||
<div class="participation-not-allowed" style="display:none" aria-hidden="false">
|
||||
<p>
|
||||
<%= sanitize(t("votes.verified_only", verify_account: link_to_verify_account)) %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= render Shared::ParticipationNotAllowedComponent.new(proposal, cannot_vote_text: cannot_vote_text) %>
|
||||
|
||||
<% if voted? && setting["twitter_handle"] %>
|
||||
<div class="share-supported">
|
||||
|
||||
@@ -25,7 +25,7 @@ class Proposals::VotesComponent < ApplicationComponent
|
||||
t("proposals.proposal.support_label", proposal: proposal.title)
|
||||
end
|
||||
|
||||
def organization?
|
||||
current_user&.organization?
|
||||
def cannot_vote_text
|
||||
t("votes.verified_only", verify_account: link_to_verify_account) unless can_vote?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<div tabindex="0">
|
||||
<div class="participation-not-allowed" style="display:none" aria-hidden="false">
|
||||
<%= body %>
|
||||
</div>
|
||||
</div>
|
||||
30
app/components/shared/participation_not_allowed_component.rb
Normal file
30
app/components/shared/participation_not_allowed_component.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
class Shared::ParticipationNotAllowedComponent < ApplicationComponent
|
||||
attr_reader :votable, :cannot_vote_text
|
||||
delegate :current_user, :link_to_signin, :link_to_signup, to: :helpers
|
||||
|
||||
def initialize(votable, cannot_vote_text:)
|
||||
@votable = votable
|
||||
@cannot_vote_text = cannot_vote_text
|
||||
end
|
||||
|
||||
def render?
|
||||
body.present?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def body
|
||||
@body ||=
|
||||
if !current_user
|
||||
sanitize(t("users.login_to_continue", signin: link_to_signin, signup: link_to_signup))
|
||||
elsif organization?
|
||||
tag.p t("votes.organizations")
|
||||
elsif cannot_vote_text.present?
|
||||
tag.p sanitize(cannot_vote_text)
|
||||
end
|
||||
end
|
||||
|
||||
def organization?
|
||||
current_user&.organization?
|
||||
end
|
||||
end
|
||||
@@ -1,3 +0,0 @@
|
||||
<div class="participation-not-allowed" style="display:none" aria-hidden="false">
|
||||
<%= sanitize(t("users.login_to_continue", signin: link_to_signin, signup: link_to_signup)) %>
|
||||
</div>
|
||||
@@ -31,9 +31,7 @@ en:
|
||||
voted_info_2: "But you can change your vote at any time until this phase is closed."
|
||||
zero: You have not voted any investment project.
|
||||
reasons_for_not_balloting:
|
||||
not_logged_in: You must %{signin} or %{signup} to continue.
|
||||
not_verified: Only verified users can vote on investments; %{verify_account}.
|
||||
organization: Organizations are not permitted to vote
|
||||
not_selected: Unselected investment projects can not be supported
|
||||
not_enough_money: "You have already assigned the available budget.<br><small>Remember you can %{change_ballot} at any time</small>"
|
||||
no_ballots_allowed: Selecting phase is closed
|
||||
|
||||
@@ -855,9 +855,7 @@ en:
|
||||
supports: Supports
|
||||
verified_only: Only verified users can vote on proposals; %{verify_account}.
|
||||
budget_investments:
|
||||
not_logged_in: You must %{signin} or %{signup} to continue.
|
||||
not_verified: Only verified users can vote on investment projects; %{verify_account}.
|
||||
organization: Organizations are not permitted to vote
|
||||
unfeasible: Unfeasible investment projects can not be supported
|
||||
not_voting_allowed: Voting phase is closed
|
||||
different_heading_assigned:
|
||||
|
||||
@@ -31,9 +31,7 @@ es:
|
||||
voted_info_2: "Pero puedes cambiarlos en cualquier momento hasta el cierre de esta fase."
|
||||
zero: Todavía no has votado ningún proyecto de gasto.
|
||||
reasons_for_not_balloting:
|
||||
not_logged_in: Necesitas %{signin} o %{signup} para continuar.
|
||||
not_verified: Los proyectos de gasto sólo pueden ser apoyados por usuarios verificados, %{verify_account}.
|
||||
organization: Las organizaciones no pueden votar.
|
||||
not_selected: No se pueden votar proyectos inviables.
|
||||
not_enough_money: "Ya has asignado el presupuesto disponible.<br><small>Recuerda que puedes %{change_ballot} en cualquier momento</small>"
|
||||
no_ballots_allowed: El periodo de votación está cerrado.
|
||||
|
||||
@@ -855,9 +855,7 @@ es:
|
||||
supports: Apoyos
|
||||
verified_only: Las propuestas sólo pueden ser votadas por usuarios verificados, %{verify_account}.
|
||||
budget_investments:
|
||||
not_logged_in: Necesitas %{signin} o %{signup} para continuar.
|
||||
not_verified: Los proyectos de gasto sólo pueden ser apoyadas por usuarios verificados, %{verify_account}.
|
||||
organization: Las organizaciones no pueden votar.
|
||||
unfeasible: No se pueden votar propuestas inviables.
|
||||
not_voting_allowed: El periodo de votación está cerrado.
|
||||
different_heading_assigned:
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe Shared::ParticipationNotAllowedComponent do
|
||||
let(:votable) { create(:proposal) }
|
||||
|
||||
context "Without cannot vote text" do
|
||||
let(:component) { Shared::ParticipationNotAllowedComponent.new(votable, cannot_vote_text: nil) }
|
||||
|
||||
it "asks anonymous users to sign in or sign up" do
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_content "You must sign in or sign up to continue"
|
||||
expect(page).to have_link "sign in"
|
||||
expect(page).to have_link "sign up"
|
||||
end
|
||||
|
||||
it "says voting is not allowed to organizations" do
|
||||
sign_in(create(:organization, user: create(:user, :level_two)).user)
|
||||
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_content "Organizations are not permitted to vote"
|
||||
expect(page).not_to have_link "sign in", visible: :all
|
||||
expect(page).not_to have_link "sign up", visible: :all
|
||||
end
|
||||
|
||||
it "is not rendered to regular users" do
|
||||
sign_in(create(:user))
|
||||
|
||||
render_inline component
|
||||
|
||||
expect(page).not_to be_rendered
|
||||
end
|
||||
end
|
||||
|
||||
context "With cannot vote text" do
|
||||
let(:component) { Shared::ParticipationNotAllowedComponent.new(votable, cannot_vote_text: "Too old") }
|
||||
|
||||
it "ignores the text and asks anonymous users to sign in or sign up" do
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_content "You must sign in or sign up to continue"
|
||||
expect(page).to have_link "sign in"
|
||||
expect(page).to have_link "sign up"
|
||||
expect(page).not_to have_content "Too old"
|
||||
end
|
||||
|
||||
it "ignores the text and says voting is not allowed to organizations" do
|
||||
sign_in(create(:organization, user: create(:user, :level_two)).user)
|
||||
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_content "Organizations are not permitted to vote"
|
||||
expect(page).not_to have_link "sign in", visible: :all
|
||||
expect(page).not_to have_link "sign up", visible: :all
|
||||
expect(page).not_to have_content "Too old"
|
||||
end
|
||||
|
||||
it "renders the cannot vote text to regular users" do
|
||||
sign_in(create(:user))
|
||||
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_content "Too old"
|
||||
expect(page).not_to have_content "Organizations are not permitted to vote"
|
||||
expect(page).not_to have_link "sign in", visible: :all
|
||||
expect(page).not_to have_link "sign up", visible: :all
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user