Files
nairobi/spec/features/dashboard/polls_spec.rb
Juan Salvador Pérez García 5b5095b37b Bugfixing and several enhancements
* Added missing specs
* Removed models that were refactored previously
* Added simplecov when executing specs locally
* Fixed bug in poll model validation that was causing an 500 error.
2018-08-01 13:26:30 +02:00

163 lines
4.3 KiB
Ruby

require 'rails_helper'
feature 'Polls' do
let!(:proposal) { create(:proposal, :draft) }
before do
login_as(proposal.author)
visit proposal_dashboard_index_path(proposal)
end
scenario 'Has a link to polls feature' do
expect(page).to have_link('Polls')
end
scenario 'Create a poll', :js do
click_link 'Polls'
click_link 'Create poll'
start_date = 1.week.from_now
end_date = 2.weeks.from_now
fill_in "poll_name", with: 'Upcoming poll'
fill_in 'poll_starts_at', with: start_date.strftime('%d/%m/%Y')
fill_in 'poll_ends_at', with: end_date.strftime('%d/%m/%Y')
fill_in 'poll_description', with: "Upcomming poll's description. This poll..."
expect(page).not_to have_css('#poll_results_enabled')
expect(page).not_to have_css('#poll_stats_enabled')
click_link 'Add question'
fill_in 'Question', with: 'First question'
click_link 'Add answer'
fill_in 'Title', with: 'First answer'
click_button 'Create poll'
expect(page).to have_content 'Poll created successfully'
expect(page).to have_content 'Upcoming poll'
expect(page).to have_content I18n.l(start_date.to_date)
end
scenario 'Create a poll redirects back to form when invalid data', js: true do
click_link 'Polls'
click_link 'Create poll'
click_button 'Create poll'
expect(page).to have_content('New poll')
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 redirects back when invalid data', js: true 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
fill_in "poll_name", with: ''
click_button 'Update poll'
expect(page).to have_content('Edit poll')
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
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)
end
end
end