Use helpers for repeated event dropdown links

This commit is contained in:
James Mason 2018-02-13 16:33:11 -08:00
parent 4c58104a65
commit ad19a6d753
7 changed files with 370 additions and 146 deletions

View file

@ -30,8 +30,8 @@ feature Event do
visit admin_conference_program_events_path(conference.short_title)
expect(page).to have_content 'Example Proposal'
click_button 'New'
click_link "reject_event_#{@event.id}"
click_on 'New'
click_link 'Reject'
expect(page).to have_content 'Event rejected!'
@event.reload
expect(@event.state).to eq('rejected')
@ -41,8 +41,8 @@ feature Event do
visit admin_conference_program_events_path(conference.short_title)
expect(page).to have_content 'Example Proposal'
click_button 'New'
click_link "accept_event_#{@event.id}"
click_on 'New'
click_link 'Accept'
expect(page).to have_content 'Event accepted!'
expect(page).to have_content 'Unconfirmed'
@event.reload
@ -54,8 +54,8 @@ feature Event do
visit admin_conference_program_events_path(conference.short_title)
expect(page).to have_content 'Example Proposal'
click_button 'Rejected'
click_link "restart_event_#{@event.id}"
click_on 'Rejected'
click_link 'Start review'
expect(page).to have_content 'Review started!'
@event.reload
expect(@event.state).to eq('new')

View file

@ -189,8 +189,8 @@ feature 'Version' do
click_button 'Update Proposal'
visit admin_conference_program_events_path(conference.short_title)
click_button 'New'
click_link 'Reject event'
click_on 'New'
click_link 'Reject'
visit conference_program_proposals_path(conference_id: conference.short_title)
within('#events') do
@ -198,15 +198,15 @@ feature 'Version' do
end
visit admin_conference_program_events_path(conference.short_title)
click_button 'New'
click_link 'Accept event'
click_on 'New'
click_link 'Accept'
visit conference_program_proposals_path(conference_id: conference.short_title)
click_link 'Confirm'
visit admin_conference_program_events_path(conference.short_title)
click_button 'Confirmed'
click_link 'Cancel event'
click_on 'Confirmed'
click_link 'Cancel'
visit admin_revision_history_path
expect(page).to have_text("#{organizer.name} submitted new event ABC in conference #{conference.short_title}")

View file

@ -2,7 +2,7 @@ require 'spec_helper'
describe EventsHelper, type: :helper do
let(:conference) { create(:conference) }
let(:event) { create(:event, program: conference.program) }
let(:event) { create(:event_full, program: conference.program) }
let(:my_vote) { 3 }
let(:max_rating) { 5 }
let(:fraction) { my_vote.to_s + '/' + max_rating.to_s }
@ -56,4 +56,224 @@ describe EventsHelper, type: :helper do
end
end
end
describe '#event_switch_checkbox' do
let(:result) do
event_switch_checkbox(event, :is_highlight, conference.short_title)
end
it 'should build a switch checkbox' do
expect(result).to include(
'<input type="checkbox"',
'class="switch-checkbox"'
)
end
it 'should patch to the admin event url' do
expect(result).to include(
'method="patch"',
"url=\"/admin/conferences/#{conference.short_title}/program" \
"/events/#{event.id}?event%5Bis_highlight%5D=\""
)
end
end
describe '#event_type_dropdown' do
let(:event_types) do
[
event.event_type,
create(:event_type, title: 'foo'),
create(:event_type, title: 'bar')
]
end
let(:result) do
event_type_dropdown(event, event_types, conference.short_title)
end
it 'builds a bootstrap dropdown list of event types' do
expect(result).to include(
'<div class="dropdown">' \
'<a class="dropdown-toggle" href="#" data-toggle="dropdown">' \
"<span>#{h event.event_type.title}</span><span class=\"caret\"></span>" \
'</a><ul class="dropdown-menu">'
)
event_types.each do |event_type|
expect(result).to include(
'<li><a rel="nofollow" data-method="patch" ' \
"href=\"/admin/conferences/#{conference.short_title}/program/" \
"events/#{event.id}?event%5Bevent_type_id%5D=#{event_type.id}\">" \
"#{h event_type.title}</a></li>"
)
end
end
end
describe '#track_dropdown' do
let(:tracks) do
[
event.track,
create(:track, name: 'foo'),
create(:track, name: 'bar')
]
end
let(:result) do
track_dropdown(event, tracks, conference.short_title)
end
it 'builds a bootstrap dropdown list of tracks' do
expect(result).to include(
'<div class="dropdown">' \
'<a class="dropdown-toggle" href="#" data-toggle="dropdown">' \
"<span>#{h event.track.name}</span><span class=\"caret\"></span>" \
'</a><ul class="dropdown-menu">'
)
tracks.each do |track|
expect(result).to include(
'<li><a rel="nofollow" data-method="patch" ' \
"href=\"/admin/conferences/#{conference.short_title}/program/" \
"events/#{event.id}?event%5Btrack_id%5D=#{track.id}\">" \
"#{h track.name}</a></li>"
)
end
end
end
describe '#difficulty_dropdown' do
let(:difficulties) do
[
event.difficulty_level,
create(:difficulty_level, title: 'foo'),
create(:difficulty_level, title: 'bar')
]
end
let(:result) do
difficulty_dropdown(event, difficulties, conference.short_title)
end
it 'builds a bootstrap dropdown list of difficulty levels' do
expect(result).to include(
'<div class="dropdown">' \
'<a class="dropdown-toggle" href="#" data-toggle="dropdown">' \
"<span>#{h event.difficulty_level.title}</span>" \
'<span class="caret"></span>' \
'</a><ul class="dropdown-menu">'
)
difficulties.each do |difficulty|
expect(result).to include(
'<li><a rel="nofollow" data-method="patch" ' \
"href=\"/admin/conferences/#{conference.short_title}/program/" \
"events/#{event.id}?event%5Bdifficulty_level_id%5D=#{difficulty.id}\">" \
"#{h difficulty.title}</a></li>"
)
end
end
end
describe '#state_dropdown' do
let(:conference_id) { conference.short_title }
let(:email_settings) { conference.email_settings }
setup do
allow(event).to receive(:transition_possible?).at_least(:once) { false }
end
it 'builds a bootstrap dropdown list of event states' do
result = state_dropdown(event, conference_id, email_settings)
expect(result).to include(
'<div class="dropdown">' \
'<a class="dropdown-toggle" href="#" data-toggle="dropdown">' \
"<span>#{h event.state.humanize}</span><span class=\"caret\"></span>" \
'</a><ul class="dropdown-menu">'
)
end
it 'handles the accept transition' do
tag = '<li><a rel="nofollow" data-method="patch" ' \
"href=\"/admin/conferences/#{conference_id}/program/" \
"events/#{event.id}/accept\">" \
'Accept</a></li>'
result = state_dropdown(event, conference_id, email_settings)
expect(result).not_to include(tag)
expect(event).to receive(:transition_possible?).with(:accept) { true }
result = state_dropdown(event, conference_id, email_settings)
expect(result).to include(tag)
end
it 'handles the accept transition without email' do
expect(event).to receive(:transition_possible?).with(:accept) { true }
expect(email_settings).to receive(:send_on_accepted?) { true }
result = state_dropdown(event, conference_id, email_settings)
expect(result).to include(
'<li><a rel="nofollow" data-method="patch" ' \
"href=\"/admin/conferences/#{conference_id}/program/" \
"events/#{event.id}/accept?send_mail=false\">" \
'Accept (without email)</a></li>'
)
end
it 'handles the reject transition' do
tag = '<li><a rel="nofollow" data-method="patch" ' \
"href=\"/admin/conferences/#{conference_id}/program/" \
"events/#{event.id}/reject\">" \
'Reject</a></li>'
result = state_dropdown(event, conference_id, email_settings)
expect(result).not_to include(tag)
expect(event).to receive(:transition_possible?).with(:reject) { true }
result = state_dropdown(event, conference_id, email_settings)
expect(result).to include(tag)
end
it 'handles the reject transition without email' do
expect(event).to receive(:transition_possible?).with(:reject) { true }
expect(email_settings).to receive(:send_on_rejected?) { true }
result = state_dropdown(event, conference_id, email_settings)
expect(result).to include(
'<li><a rel="nofollow" data-method="patch" ' \
"href=\"/admin/conferences/#{conference_id}/program/" \
"events/#{event.id}/reject?send_mail=false\">" \
'Reject (without email)</a></li>'
)
end
it 'handles the restart transition' do
tag = '<li><a rel="nofollow" data-method="patch" ' \
"href=\"/admin/conferences/#{conference_id}/program/" \
"events/#{event.id}/restart\">" \
'Start review</a></li>'
result = state_dropdown(event, conference_id, email_settings)
expect(result).not_to include(tag)
expect(event).to receive(:transition_possible?).with(:restart) { true }
result = state_dropdown(event, conference_id, email_settings)
expect(result).to include(tag)
end
it 'handles the confirm transition' do
tag = '<li><a rel="nofollow" data-method="patch" ' \
"href=\"/admin/conferences/#{conference_id}/program/" \
"events/#{event.id}/confirm\">" \
'Confirm</a></li>'
result = state_dropdown(event, conference_id, email_settings)
expect(result).not_to include(tag)
expect(event).to receive(:transition_possible?).with(:confirm) { true }
result = state_dropdown(event, conference_id, email_settings)
expect(result).to include(tag)
end
it 'handles the cancel transition' do
tag = '<li><a rel="nofollow" data-method="patch" ' \
"href=\"/admin/conferences/#{conference_id}/program/" \
"events/#{event.id}/cancel\">" \
'Cancel</a></li>'
result = state_dropdown(event, conference_id, email_settings)
expect(result).not_to include(tag)
expect(event).to receive(:transition_possible?).with(:cancel) { true }
result = state_dropdown(event, conference_id, email_settings)
expect(result).to include(tag)
end
end
end