Merge pull request #235 from medialab-prado/issue_234

Fixes #234
This commit is contained in:
Juan Salvador Pérez García
2018-07-23 07:24:03 +02:00
committed by GitHub
12 changed files with 135 additions and 116 deletions

View File

@@ -12,10 +12,6 @@ class Dashboard::PollsController < Dashboard::BaseController
@poll = Poll.new
end
def show
authorize! :manage_polls, proposal
end
def create
authorize! :manage_polls, proposal
@@ -36,7 +32,7 @@ class Dashboard::PollsController < Dashboard::BaseController
respond_to do |format|
if poll.update(poll_params)
format.html { redirect_to proposal_dashboard_poll_path(proposal, poll), notice: t("flash.actions.update.poll") }
format.html { redirect_to proposal_dashboard_polls_path(proposal), notice: t("flash.actions.update.poll") }
format.json { respond_with_bip(poll) }
else
format.html { render :edit }
@@ -45,11 +41,6 @@ class Dashboard::PollsController < Dashboard::BaseController
end
end
def results
authorize! :manage_polls, proposal
@partial_results = poll.partial_results
end
private
def poll

View File

@@ -21,7 +21,7 @@
<% if poll.incoming? %>
<%= link_to t('.edit_poll'), edit_proposal_dashboard_poll_path(proposal, poll), class: 'button hollow' %>
<% else %>
<%= link_to t('.view_responses'), proposal_dashboard_poll_path(proposal, poll), class: 'button' %>
<%= link_to t('.view_results'), results_poll_path(poll), class: 'button', target: '_blank' %>
<% end %>
</div>
<div class="card-section">

View File

@@ -1,21 +0,0 @@
<h2 class="inline-block">
<%= poll.name %>
</h2>
<div class="clear"></div>
<div class="callout highlight">
<div class="inline-block">
<strong><%= t("admin.polls.index.dates") %></strong>
<br>
<%= l poll.starts_at.to_date %> - <%= l poll.ends_at.to_date %>
</div>
<% if poll.geozone_restricted %>
<div class="inline-block margin-left">
<strong><%= t("admin.polls.index.geozone_restricted") %></strong>
<br>
<%= poll.geozones.pluck(:name).to_sentence %>
</div>
<% end %>
</div>

View File

@@ -1,24 +0,0 @@
<h3><%= t("admin.polls.show.questions_title") %></h3>
<% if poll.questions.empty? %>
<div class="callout primary margin-top">
<%= t('admin.polls.show.no_questions') %>
</div>
<% else %>
<table class="fixed margin">
<thead>
<tr>
<th><%= t('admin.polls.show.table_title') %></th>
</tr>
</thead>
<% poll.questions.each do |question| %>
<tr id="<%= dom_id(question) %>">
<td>
<strong>
<%= question.title %>
</strong>
</td>
</tr>
<% end %>
</table>
<% end %>

View File

@@ -1,30 +0,0 @@
<ul class="menu simple clear" id="assigned-resources-tabs">
<% if action_name == "show" %>
<li class="is-active">
<h2>
<%= t("admin.polls.show.questions_tab") %>
(<%= poll.questions.count %>)
</h2>
</li>
<% else %>
<li>
<%= link_to proposal_dashboard_poll_path(proposal, poll) do %>
<%= t("admin.polls.show.questions_tab") %>
(<%= poll.questions.count %>)
<% end %>
</li>
<% end %>
<% if action_name == "results" %>
<li class="is-active">
<h2>
<%= t("admin.polls.show.results_tab") %>
</h2>
</li>
<% else %>
<li>
<%= link_to t("admin.polls.show.results_tab"), results_proposal_dashboard_poll_path(proposal, poll) %>
</li>
<% end %>
</ul>

View File

@@ -1,18 +0,0 @@
<%= render 'poll_header' %>
<div id="poll-resources">
<%= render "subnav" %>
<h3><%= t("admin.results.index.title") %></h3>
<% if @partial_results.empty? %>
<div class="callout primary margin-top">
<%= t("admin.results.index.no_results") %>
</div>
<% else %>
<%= render "/admin/poll/polls/recount", resource: @poll %>
<%= render "/admin/poll/polls/result" %>
<%= render "/admin/poll/polls/results_by_booth" %>
<%= render "/admin/poll/polls/show_results", resource: @poll %>
<% end %>
</div>

View File

@@ -576,7 +576,7 @@ en:
responses:
one: "%{count} response"
other: "%{count} responses"
view_responses: View responses
view_results: View results
edit_poll: Edit survey
show_results: Show results
show_results_help: If you check this box the results will be public and all users will be able to see them

View File

@@ -576,7 +576,7 @@ es:
responses:
one: "%{count} respuesta"
other: "%{count} respuestas"
view_responses: Ver respuestas
view_results: Ver resultados
edit_poll: Editar encuesta
show_results: Mostrar resultados
show_results_help: Si marcas esta casilla los resultados serán públicos y todos los usuarios podrán verlos

View File

@@ -21,11 +21,7 @@ resources :proposals do
end
namespace :dashboard do
resources :polls, except: :destroy do
member do
get :results
end
end
resources :polls, except: [:show, :destroy]
end
member do

View File

@@ -40,4 +40,84 @@ feature 'Polls' do
expect(page).to have_content "Upcoming poll"
expect(page).to have_content I18n.l(start_date.to_date)
end
scenario 'Edit poll is allowed for upcoming polls' do
poll = create(:poll, :incoming, related: proposal)
visit proposal_dashboard_polls_path(proposal)
within "div#poll_#{poll.id}" do
expect(page).to have_content('Edit survey')
click_link 'Edit survey'
end
click_button 'Update poll'
expect(page).to have_content 'Poll updated successfully'
end
scenario 'Edit poll is not allowed for current polls' do
poll = create(:poll, :current, 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 'View results not available for upcoming polls' do
poll = create(:poll, :incoming, related: proposal)
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, :current, 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', js: true do
poll = create(:poll, :expired, related: proposal)
visit proposal_dashboard_polls_path(proposal)
within "div#poll_#{poll.id}" do
click_link 'View results'
end
page.driver.browser.switch_to.window page.driver.browser.window_handles.last do
expect(page.current_path).to eq(results_poll_path(poll))
end
end
end

View File

@@ -1029,12 +1029,12 @@ describe Budget::Investment do
investment.heading = heading2
investment.store_reclassified_votes("heading_changed")
reclassified_vote = Budget::ReclassifiedVote.first
expect(Budget::ReclassifiedVote.count).to eq(3)
expect(reclassified_vote.investment_id).to eq(investment.id)
expect(reclassified_vote.user_id).to eq(Budget::Ballot.first.user.id)
expect(reclassified_vote.reason).to eq("heading_changed")
Budget::ReclassifiedVote.find_each do |reclassified_vote|
expect(reclassified_vote.investment_id).to eq(investment.id)
expect(reclassified_vote.reason).to eq("heading_changed")
expect(Budget::Ballot.where(user_id: reclassified_vote.user_id)).not_to be_empty
end
end
end

View File

@@ -33,6 +33,51 @@ describe Poll do
poll.ends_at = 2.months.ago
expect(poll).not_to be_valid
end
it 'no overlapping polls for proposal polls are allowed' do
end
end
describe 'proposal polls specific validations' do
let(:proposal) { create(:proposal) }
let(:poll) { build(:poll, related: proposal) }
it 'is valid when overlapping but different proposals' do
other_proposal = create(:proposal)
_other_poll = create(:poll, related: other_proposal, starts_at: poll.starts_at, ends_at: poll.ends_at)
expect(poll).to be_valid
end
it 'is valid when same proposal but not overlapping' do
_other_poll = create(:poll, related: proposal, starts_at: poll.ends_at + 1.day, ends_at: poll.ends_at + 8.days)
expect(poll).to be_valid
end
it 'is not valid when overlaps from the beginning' do
_other_poll = create(:poll, related: proposal, starts_at: poll.starts_at - 8.days, ends_at: poll.starts_at)
expect(poll).not_to be_valid
end
it 'is not valid when overlaps from the end' do
_other_poll = create(:poll, related: proposal, starts_at: poll.ends_at, ends_at: poll.ends_at + 8.days)
expect(poll).not_to be_valid
end
it 'is not valid when overlaps with same interval' do
_other_poll = create(:poll, related: proposal, starts_at: poll.starts_at, ends_at: poll.ends_at)
expect(poll).not_to be_valid
end
it 'is not valid when overlaps with interval contained' do
_other_poll = create(:poll, related: proposal, starts_at: poll.starts_at + 1.day, ends_at: poll.ends_at - 1.day)
expect(poll).not_to be_valid
end
it 'is not valid when overlaps with interval containing' do
_other_poll = create(:poll, related: proposal, starts_at: poll.starts_at - 8.days, ends_at: poll.ends_at + 8.days)
expect(poll).not_to be_valid
end
end
describe "#opened?" do