[fix] Use let in schedules_controller_spec; revert changes in event_schedule#happening_now?

This commit is contained in:
Jimmy 2021-03-31 07:45:26 +08:00
parent bfc39fdbe4
commit 0ede07dfaa
3 changed files with 28 additions and 18 deletions

View file

@ -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

View file

@ -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

View file

@ -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,7 +55,7 @@ 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
@ -60,8 +63,8 @@ describe SchedulesController do
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