Make iCalendar feed routes return calendar data
Both iCalendar routes were unusable: * `/conferences/.../schedule.ics` raised `NoMethodError: undefined method 'icalendar_proposals'` because the `ConferenceHelper#icalendar_proposals` helper isn't auto-included in controllers; the action crashed before rendering. * `/calendar.ics` silently redirected to `/`. The controller goes through `load_and_authorize_resource`, which authorises `:calendar` on `Conference` and is rejected for anonymous visitors because no ability grants it — CanCan's `AccessDenied` rescue redirects to root. The helper is invoked through the controller `helpers` proxy so it works in both contexts, and the calendar action is opted out of resource loading and explicitly marked as not requiring authorization since it serves a public feed across conferences. The helper is also hardened so that proposals missing a room, difficulty level, track, event type or scheduled time produce a valid event instead of crashing the whole feed.
This commit is contained in:
parent
c8e6fabed1
commit
c5e84221c2
5 changed files with 83 additions and 30 deletions
|
|
@ -49,4 +49,25 @@ describe ConferencesController do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'GET #calendar' do
|
||||
it 'returns iCalendar data for all conferences' do
|
||||
get :calendar, params: { format: :ics }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(response.content_type).to start_with('text/calendar')
|
||||
expect(response.body).to start_with('BEGIN:VCALENDAR')
|
||||
end
|
||||
|
||||
it 'returns iCalendar data with full schedule when full=true' do
|
||||
conference.program.update!(schedule_public: true)
|
||||
create(:event_scheduled, program: conference.program)
|
||||
|
||||
get :calendar, params: { full: true, format: :ics }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(response.content_type).to start_with('text/calendar')
|
||||
expect(response.body).to start_with('BEGIN:VCALENDAR')
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue