diff --git a/app/controllers/schedules_controller.rb b/app/controllers/schedules_controller.rb index cb0a3522..5a5b7b3b 100644 --- a/app/controllers/schedules_controller.rb +++ b/app/controllers/schedules_controller.rb @@ -75,7 +75,7 @@ class SchedulesController < ApplicationController respond_to do |format| format.html - format.json { render json: @events_schedules.as_json(:include => :event) } + format.json { render json: @events_schedules.to_json(include: :event) } end end diff --git a/app/models/event_schedule.rb b/app/models/event_schedule.rb index 7126d067..0a50b31f 100644 --- a/app/models/event_schedule.rb +++ b/app/models/event_schedule.rb @@ -57,8 +57,15 @@ class EventSchedule < ApplicationRecord def happening_now?(threshold = 30.minutes) return false if end_time < Time.now - event_time_range = start_time..end_time - now_range = (Time.now - threshold)..(Time.now + threshold) + # TODO: Save start_time with local timezone info when making an event schedule + in_tz_start = start_time.in_time_zone(timezone) + in_tz_end = end_time.in_time_zone(timezone) + in_tz_start -= in_tz_start.utc_offset + in_tz_end -= in_tz_end.utc_offset + begin_range = Time.now - threshold + end_range = Time.now + threshold + event_time_range = in_tz_start..in_tz_end + now_range = begin_range..end_range event_time_range.overlaps?(now_range) end diff --git a/spec/controllers/schedules_controller_spec.rb b/spec/controllers/schedules_controller_spec.rb index 3896c7f7..97632f60 100644 --- a/spec/controllers/schedules_controller_spec.rb +++ b/spec/controllers/schedules_controller_spec.rb @@ -29,20 +29,23 @@ describe SchedulesController do end describe 'GET #happening_now' do - before do - @conference2 = create(:full_conference, start_date: 1.day.ago, end_date: 7.days.from_now, start_hour: 0, end_hour: 24) - @program = @conference2.program - @selected_schedule = create(:schedule, program: @program) - @program.update_attributes!(selected_schedule: @selected_schedule) - @scheduled_event1 = create(:event, program: @program, state: 'confirmed') - @event_schedule1 = create(:event_schedule, event: @scheduled_event1, schedule: @selected_schedule, start_time: Time.now) - @scheduled_event2 = create(:event, program: @program, state: 'confirmed') - @event_schedule2 = create(:event_schedule, event: @scheduled_event2, schedule: @selected_schedule, start_time: Time.now + 1.hour) + let!(:conference2) { create(:full_conference, start_date: 1.day.ago, end_date: 7.days.from_now, start_hour: 0, end_hour: 24) } + let!(:program) { conference2.program } + let!(:selected_schedule) { create(:schedule, program: program) } + let!(:scheduled_event1) do + program.update_attributes!(selected_schedule: selected_schedule) + create(:event, program: program, state: 'confirmed') end - + let!(:event_schedule1) { create(:event_schedule, event: scheduled_event1, schedule: selected_schedule, start_time: Time.now.in_time_zone(conference2.timezone).strftime('%a, %d %b %Y %H:%M:%S')) } + let!(:scheduled_event2) do + program.update_attributes!(selected_schedule: selected_schedule) + create(:event, program: program, state: 'confirmed') + end + let!(:event_schedule2) { create(:event_schedule, event: scheduled_event2, schedule: selected_schedule, start_time: (Time.now.in_time_zone(conference2.timezone) + 1.hour).strftime('%a, %d %b %Y %H:%M:%S')) } + context 'html' do before :each do - get :happening_now, params: { conference_id: @conference2.short_title } + get :happening_now, params: { conference_id: conference2.short_title } end it 'has 200 status code' do @@ -52,16 +55,16 @@ describe SchedulesController do context 'json' do before :each do - get :happening_now, format: :json, params: { conference_id: @conference2.short_title } + get :happening_now, format: :json, params: { conference_id: conference2.short_title } end - + it 'has 200 status code' do expect(response).to be_success end it 'returns the events that are happening now' do - expect(response.body).to include(@event_schedule1.to_json) - expect(response.body).not_to include(@event_schedule2.to_json) + expect(response.body).to include(event_schedule1.to_json(include: :event)) + expect(response.body).not_to include(event_schedule2.to_json(include: :event)) end end end