Move dashboard poll partial to component

This commit is contained in:
taitus
2025-06-30 11:22:37 +02:00
committed by Javi Martín
parent 150af75e3e
commit fc0d79b47b
7 changed files with 98 additions and 88 deletions

View File

@@ -372,28 +372,6 @@
padding: $line-height; padding: $line-height;
} }
.poll-card {
background: #e7f3fd;
border-radius: rem-calc(4);
margin-bottom: $line-height;
min-height: $line-height * 9;
padding: $line-height;
position: relative;
text-align: center;
.button {
font-weight: bold;
}
button {
cursor: pointer;
&:hover {
text-decoration: underline;
}
}
}
.community-poll { .community-poll {
border-bottom: 1px solid $border; border-bottom: 1px solid $border;
margin-bottom: $line-height; margin-bottom: $line-height;

View File

@@ -0,0 +1,21 @@
.dashboard-poll .poll-card {
background: #e7f3fd;
border-radius: rem-calc(4);
margin-bottom: $line-height;
min-height: $line-height * 9;
padding: $line-height;
position: relative;
text-align: center;
.button {
font-weight: bold;
}
button {
cursor: pointer;
&:hover {
text-decoration: underline;
}
}
}

View File

@@ -1,4 +1,4 @@
<div id="<%= dom_id(poll) %>" class="small-12 medium-6 large-4 column end"> <div id="<%= dom_id(poll) %>" class="dashboard-poll small-12 medium-6 large-4 column end">
<div class="poll-card" data-equalizer-watch="poll-cards"> <div class="poll-card" data-equalizer-watch="poll-cards">
<h4><%= link_to poll.title, proposal_poll_path(proposal, poll) %></h4> <h4><%= link_to poll.title, proposal_poll_path(proposal, poll) %></h4>
<span class="small"> <span class="small">

View File

@@ -0,0 +1,13 @@
class Dashboard::PollComponent < ApplicationComponent
attr_reader :poll
def initialize(poll)
@poll = poll
end
private
def proposal
poll.related
end
end

View File

@@ -5,7 +5,9 @@
<% if @polls.any? %> <% if @polls.any? %>
<div class="row expanded margin-top" data-equalizer="poll-cards" data-equalize-on="medium"> <div class="row expanded margin-top" data-equalizer="poll-cards" data-equalize-on="medium">
<%= render @polls %> <% @polls.each do |poll| %>
<%= render Dashboard::PollComponent.new(poll) %>
<% end %>
</div> </div>
<% end %> <% end %>
</div> </div>

View File

@@ -0,0 +1,60 @@
require "rails_helper"
describe Dashboard::PollComponent do
include Rails.application.routes.url_helpers
let(:proposal) { create(:proposal, :draft) }
before { sign_in(proposal.author) }
describe "Poll card content" do
describe "actions visibility" do
it "shows edit link for upcoming polls" do
upcoming = create(:poll, related: proposal, starts_at: 1.week.from_now)
render_inline Dashboard::PollComponent.new(upcoming)
page.find("div#poll_#{upcoming.id}") do |poll_card|
expect(poll_card).to have_link "Edit survey",
href: edit_proposal_dashboard_poll_path(proposal, upcoming)
expect(poll_card).not_to have_link "View results"
end
end
it "shows results link for current polls" do
current = create(:poll, related: proposal)
render_inline Dashboard::PollComponent.new(current)
page.find("div#poll_#{current.id}") do |poll_card|
expect(poll_card).not_to have_link "Edit survey"
expect(poll_card).to have_link "View results", href: results_proposal_poll_path(proposal, current)
end
end
it "shows results link for expired polls" do
expired = create(:poll, :expired, related: proposal)
render_inline Dashboard::PollComponent.new(expired)
page.find("div#poll_#{expired.id}") do |poll_card|
expect(poll_card).not_to have_link "Edit survey"
expect(poll_card).to have_link "View results", href: results_proposal_poll_path(proposal, expired)
end
end
end
it "renders poll title and dates" do
expired = create(:poll, :expired, related: proposal)
render_inline Dashboard::PollComponent.new(expired)
page.find("div#poll_#{expired.id}") do |poll_card|
expect(page).to have_content I18n.l(expired.starts_at.to_date)
expect(page).to have_content I18n.l(expired.ends_at.to_date)
expect(page).to have_link expired.title
expect(page).to have_link expired.title, href: proposal_poll_path(proposal, expired)
end
end
end
end

View File

@@ -123,26 +123,6 @@ describe "Polls" do
expect(page).to have_content("Edit poll") expect(page).to have_content("Edit poll")
end end
scenario "Edit poll is not allowed for current polls" do
poll = create(:poll, related: proposal)
visit proposal_dashboard_polls_path(proposal)
within "div#poll_#{poll.id}" do
expect(page).not_to have_content("Edit survey")
end
end
scenario "Edit poll is not allowed for expired polls" do
poll = create(:poll, :expired, related: proposal)
visit proposal_dashboard_polls_path(proposal)
within "div#poll_#{poll.id}" do
expect(page).not_to have_content("Edit survey")
end
end
scenario "Edit poll should allow to remove questions" do scenario "Edit poll should allow to remove questions" do
poll = create(:poll, related: proposal, starts_at: 1.week.from_now) poll = create(:poll, related: proposal, starts_at: 1.week.from_now)
create(:poll_question, poll: poll) create(:poll_question, poll: poll)
@@ -224,36 +204,6 @@ describe "Polls" do
expect(page).to have_content(poll.name) expect(page).to have_content(poll.name)
end end
scenario "View results not available for upcoming polls" do
poll = create(:poll, related: proposal, starts_at: 1.week.from_now)
visit proposal_dashboard_polls_path(proposal)
within "div#poll_#{poll.id}" do
expect(page).not_to have_content("View results")
end
end
scenario "View results available for current polls" do
poll = create(:poll, related: proposal)
visit proposal_dashboard_polls_path(proposal)
within "div#poll_#{poll.id}" do
expect(page).to have_content("View results")
end
end
scenario "View results available for expired polls" do
poll = create(:poll, :expired, related: proposal)
visit proposal_dashboard_polls_path(proposal)
within "div#poll_#{poll.id}" do
expect(page).to have_content("View results")
end
end
scenario "View results redirects to results in public zone" do scenario "View results redirects to results in public zone" do
poll = create(:poll, :expired, related: proposal) poll = create(:poll, :expired, related: proposal)
@@ -276,18 +226,4 @@ describe "Polls" do
expect(find_field("Show results")).not_to be_checked expect(find_field("Show results")).not_to be_checked
end end
scenario "Poll card" do
poll = create(:poll, :expired, related: proposal)
visit proposal_dashboard_polls_path(proposal)
within "div#poll_#{poll.id}" do
expect(page).to have_content(I18n.l(poll.starts_at.to_date))
expect(page).to have_content(I18n.l(poll.ends_at.to_date))
expect(page).to have_link(poll.title)
expect(page).to have_link(poll.title, href: proposal_poll_path(proposal, poll))
expect(page).to have_link("View results", href: results_proposal_poll_path(proposal, poll))
end
end
end end