* 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.
163 lines
4.3 KiB
Ruby
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
|