From 51f9ba0206194bcd64cf24795f8de05a228c1046 Mon Sep 17 00:00:00 2001 From: rajavi-mishra Date: Fri, 12 Mar 2021 09:51:24 -0800 Subject: [PATCH 01/16] happening now - model implementation --- app/models/conference.rb | 10 ++++++++++ app/models/event.rb | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/models/conference.rb b/app/models/conference.rb index e9a0fa23..581f4839 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -784,6 +784,16 @@ class Conference < ApplicationRecord end_date < Time.current end + def find_live_events() + live_events = [] + for event in program.events + if event.is_live? + live_events.append(event) + end + end + live_events + end + private # Returns a different html colour for every i and consecutive colors are diff --git a/app/models/event.rb b/app/models/event.rb index d10ae1a1..238a6871 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -7,7 +7,6 @@ # id :bigint not null, primary key # abstract :text # comments_count :integer default(0), not null -# committee_review :text # description :text # guid :string not null # is_highlight :boolean default(FALSE) @@ -338,6 +337,10 @@ class Event < ApplicationRecord time <=> other.time end + def is_live? + start_time >= Time.now && Time.now <= start_time + event_type.length + end + private ## From 7475a407752b79767f3a62f2d5f954387ce472b6 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Fri, 12 Mar 2021 10:38:47 -0800 Subject: [PATCH 02/16] implementation in progress --- app/controllers/conferences_controller.rb | 8 ++++++++ app/models/conference.rb | 2 +- app/models/event.rb | 2 +- config/routes.rb | 2 ++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/controllers/conferences_controller.rb b/app/controllers/conferences_controller.rb index 02d869f4..682f0858 100644 --- a/app/controllers/conferences_controller.rb +++ b/app/controllers/conferences_controller.rb @@ -112,6 +112,14 @@ class ConferencesController < ApplicationController end end + def live_events + conference = Conference.find_by(short_title: params[:conference_id]) + temp = conference.find_live_events + p "TESTTEST" + p temp.size() + p temp.to_json() + end + private def conference_finder_conditions diff --git a/app/models/conference.rb b/app/models/conference.rb index 581f4839..0b9aeded 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -784,7 +784,7 @@ class Conference < ApplicationRecord end_date < Time.current end - def find_live_events() + def find_live_events live_events = [] for event in program.events if event.is_live? diff --git a/app/models/event.rb b/app/models/event.rb index 238a6871..78e53949 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -338,7 +338,7 @@ class Event < ApplicationRecord end def is_live? - start_time >= Time.now && Time.now <= start_time + event_type.length + time() >= Time.now && Time.now <= time() + event_type.length end private diff --git a/config/routes.rb b/config/routes.rb index e2332ce2..fdbd73b7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -154,6 +154,8 @@ Osem::Application.routes.draw do end end resources :conferences, only: [:index, :show] do + get 'live_events', to: 'conferences#live_events' + resources :booths do member do patch :withdraw From 21f7d1d8ca38b41268ef0e90d33b719eb678f6dc Mon Sep 17 00:00:00 2001 From: Jimmy Date: Tue, 16 Mar 2021 22:10:37 +0800 Subject: [PATCH 03/16] [feat] Endpoint implementation done --- app/controllers/conferences_controller.rb | 5 +---- app/models/conference.rb | 6 +++--- app/models/event.rb | 2 +- config/routes.rb | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/app/controllers/conferences_controller.rb b/app/controllers/conferences_controller.rb index 682f0858..84358357 100644 --- a/app/controllers/conferences_controller.rb +++ b/app/controllers/conferences_controller.rb @@ -114,10 +114,7 @@ class ConferencesController < ApplicationController def live_events conference = Conference.find_by(short_title: params[:conference_id]) - temp = conference.find_live_events - p "TESTTEST" - p temp.size() - p temp.to_json() + conference.find_live_events.to_json end private diff --git a/app/models/conference.rb b/app/models/conference.rb index 0b9aeded..ef64bf29 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -786,9 +786,9 @@ class Conference < ApplicationRecord def find_live_events live_events = [] - for event in program.events - if event.is_live? - live_events.append(event) + program.events.each do |event| + if event.live? + live_events.append(event) end end live_events diff --git a/app/models/event.rb b/app/models/event.rb index 78e53949..cc3f24f0 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -338,7 +338,7 @@ class Event < ApplicationRecord end def is_live? - time() >= Time.now && Time.now <= time() + event_type.length + time >= Time.now && Time.now <= time + event_type.length end private diff --git a/config/routes.rb b/config/routes.rb index fdbd73b7..c1389d7a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -155,7 +155,7 @@ Osem::Application.routes.draw do end resources :conferences, only: [:index, :show] do get 'live_events', to: 'conferences#live_events' - + resources :booths do member do patch :withdraw From 8e9532511949f493c9f1f02c3241feef417cf15a Mon Sep 17 00:00:00 2001 From: Jimmy Date: Tue, 16 Mar 2021 22:10:37 +0800 Subject: [PATCH 04/16] [feat] Endpoint implementation done --- app/controllers/conferences_controller.rb | 5 +---- app/models/conference.rb | 6 +++--- app/models/event.rb | 2 +- config/routes.rb | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/app/controllers/conferences_controller.rb b/app/controllers/conferences_controller.rb index 682f0858..84358357 100644 --- a/app/controllers/conferences_controller.rb +++ b/app/controllers/conferences_controller.rb @@ -114,10 +114,7 @@ class ConferencesController < ApplicationController def live_events conference = Conference.find_by(short_title: params[:conference_id]) - temp = conference.find_live_events - p "TESTTEST" - p temp.size() - p temp.to_json() + conference.find_live_events.to_json end private diff --git a/app/models/conference.rb b/app/models/conference.rb index 0b9aeded..ef64bf29 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -786,9 +786,9 @@ class Conference < ApplicationRecord def find_live_events live_events = [] - for event in program.events - if event.is_live? - live_events.append(event) + program.events.each do |event| + if event.live? + live_events.append(event) end end live_events diff --git a/app/models/event.rb b/app/models/event.rb index 78e53949..cc3f24f0 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -338,7 +338,7 @@ class Event < ApplicationRecord end def is_live? - time() >= Time.now && Time.now <= time() + event_type.length + time >= Time.now && Time.now <= time + event_type.length end private diff --git a/config/routes.rb b/config/routes.rb index fdbd73b7..c1389d7a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -155,7 +155,7 @@ Osem::Application.routes.draw do end resources :conferences, only: [:index, :show] do get 'live_events', to: 'conferences#live_events' - + resources :booths do member do patch :withdraw From 4e1e9bdfbd2351266e7841d248a11d244a1e8c75 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Tue, 16 Mar 2021 22:16:21 +0800 Subject: [PATCH 05/16] [fix] Fix function name --- app/models/event.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/event.rb b/app/models/event.rb index cc3f24f0..c17553d8 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -337,7 +337,7 @@ class Event < ApplicationRecord time <=> other.time end - def is_live? + def live? time >= Time.now && Time.now <= time + event_type.length end From 034313cccbfa4ceeda9dc27269f3a0052d6f7b90 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 17 Mar 2021 07:34:42 +0800 Subject: [PATCH 06/16] [fix] live_events return json; use the provided happening_now? function --- app/controllers/conferences_controller.rb | 2 +- app/models/conference.rb | 8 +------- app/models/event.rb | 4 ---- 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/app/controllers/conferences_controller.rb b/app/controllers/conferences_controller.rb index 84358357..fc257b96 100644 --- a/app/controllers/conferences_controller.rb +++ b/app/controllers/conferences_controller.rb @@ -114,7 +114,7 @@ class ConferencesController < ApplicationController def live_events conference = Conference.find_by(short_title: params[:conference_id]) - conference.find_live_events.to_json + render json: conference.find_live_events.to_json end private diff --git a/app/models/conference.rb b/app/models/conference.rb index ef64bf29..8eca5854 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -785,13 +785,7 @@ class Conference < ApplicationRecord end def find_live_events - live_events = [] - program.events.each do |event| - if event.live? - live_events.append(event) - end - end - live_events + program.events.select(&:happening_now?) end private diff --git a/app/models/event.rb b/app/models/event.rb index c17553d8..ba04ba20 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -337,10 +337,6 @@ class Event < ApplicationRecord time <=> other.time end - def live? - time >= Time.now && Time.now <= time + event_type.length - end - private ## From 871457f65bbf5afd40ef9f9daf5a7ca3b70cea4e Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 17 Mar 2021 21:02:35 +0800 Subject: [PATCH 07/16] [feat] Use existing #happening_now method; respond to both html and json requests --- app/controllers/conferences_controller.rb | 5 ----- app/controllers/schedules_controller.rb | 5 +++++ app/models/conference.rb | 4 ---- config/routes.rb | 2 -- spec/controllers/conferences_controller_spec.rb | 1 - 5 files changed, 5 insertions(+), 12 deletions(-) diff --git a/app/controllers/conferences_controller.rb b/app/controllers/conferences_controller.rb index fc257b96..02d869f4 100644 --- a/app/controllers/conferences_controller.rb +++ b/app/controllers/conferences_controller.rb @@ -112,11 +112,6 @@ class ConferencesController < ApplicationController end end - def live_events - conference = Conference.find_by(short_title: params[:conference_id]) - render json: conference.find_live_events.to_json - end - private def conference_finder_conditions diff --git a/app/controllers/schedules_controller.rb b/app/controllers/schedules_controller.rb index 230cda2f..ae8a011a 100644 --- a/app/controllers/schedules_controller.rb +++ b/app/controllers/schedules_controller.rb @@ -72,6 +72,11 @@ class SchedulesController < ApplicationController ).select(&:happening_now?) @events_schedules = [] unless @events_schedules @current_time = Time.now.in_time_zone(@conference.timezone) + + respond_to do |format| + format.html + format.json { render json: @events_schedules.to_json } + end end def app diff --git a/app/models/conference.rb b/app/models/conference.rb index 8eca5854..e9a0fa23 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -784,10 +784,6 @@ class Conference < ApplicationRecord end_date < Time.current end - def find_live_events - program.events.select(&:happening_now?) - end - private # Returns a different html colour for every i and consecutive colors are diff --git a/config/routes.rb b/config/routes.rb index c1389d7a..e2332ce2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -154,8 +154,6 @@ Osem::Application.routes.draw do end end resources :conferences, only: [:index, :show] do - get 'live_events', to: 'conferences#live_events' - resources :booths do member do patch :withdraw diff --git a/spec/controllers/conferences_controller_spec.rb b/spec/controllers/conferences_controller_spec.rb index c9a17d14..f6c81de4 100644 --- a/spec/controllers/conferences_controller_spec.rb +++ b/spec/controllers/conferences_controller_spec.rb @@ -48,5 +48,4 @@ describe ConferencesController do expect(response.response_code).to eq(200) end end - end From cab293e947a0826e9f89ce782be853855cdd5fe4 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Thu, 18 Mar 2021 18:53:55 +0800 Subject: [PATCH 08/16] [fix] Fix event_schedule# happening_now?; Add tests for happening_now JSON endpoint --- app/models/event_schedule.rb | 13 ++----- spec/controllers/schedules_controller_spec.rb | 38 +++++++++++++++++++ 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/app/models/event_schedule.rb b/app/models/event_schedule.rb index 07b31a30..4585d993 100644 --- a/app/models/event_schedule.rb +++ b/app/models/event_schedule.rb @@ -55,16 +55,9 @@ class EventSchedule < ApplicationRecord # True within `threshold` before and after the event. # def happening_now?(threshold = 30.minutes) - 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 - # TODO: There's probably better logic. - event_time_range.overlaps?(now_range) && (in_tz_end > Time.now) + event_time_range = start_time..end_time + now_range = (Time.now - threshold)..(Time.now + threshold) + event_time_range.overlaps?(now_range) && (end_time > Time.now) end def self.withdrawn_or_canceled_event_schedules(schedule_ids) diff --git a/spec/controllers/schedules_controller_spec.rb b/spec/controllers/schedules_controller_spec.rb index 8724c21b..67919bde 100644 --- a/spec/controllers/schedules_controller_spec.rb +++ b/spec/controllers/schedules_controller_spec.rb @@ -27,4 +27,42 @@ describe SchedulesController do end end end + + describe 'GET #happening_now' do + before do + @conference2 = create(:full_conference, start_date: 1.day.ago, end_date: 7.days.from_now) + @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) + end + + context 'html' do + before :each do + get :happening_now, params: { conference_id: @conference2.short_title } + end + + it 'has 200 status code' do + expect(response).to be_success + end + end + + context 'json' do + before :each do + 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) + end + end + end end From 1c54d38094db97b5ba1c8d251274bf0c6670052c Mon Sep 17 00:00:00 2001 From: Jimmy Date: Fri, 19 Mar 2021 17:13:34 +0800 Subject: [PATCH 09/16] [fix] Fix time displayed in happening_now.haml; Make event_schedule#happening_now? more efficient --- app/models/event_schedule.rb | 3 ++- app/views/schedules/happening_now.haml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/models/event_schedule.rb b/app/models/event_schedule.rb index 4585d993..3c52c499 100644 --- a/app/models/event_schedule.rb +++ b/app/models/event_schedule.rb @@ -55,9 +55,10 @@ class EventSchedule < ApplicationRecord # True within `threshold` before and after the event. # 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) - event_time_range.overlaps?(now_range) && (end_time > Time.now) + event_time_range.overlaps?(now_range) end def self.withdrawn_or_canceled_event_schedules(schedule_ids) diff --git a/app/views/schedules/happening_now.haml b/app/views/schedules/happening_now.haml index 0704b30e..537727c3 100644 --- a/app/views/schedules/happening_now.haml +++ b/app/views/schedules/happening_now.haml @@ -12,7 +12,7 @@ %h3 This page was loaded at = inyourtz(Time.now) do - Time.now.strftime('%a %b %d at %I:%M %P (%z)').to_s + #{Time.now.strftime('%a %b %d at %I:%M %P (%z)').to_s} .row / TODO: Clean this up, merge with all events page. From 3019a022c7eeb657a02fa3935f37886a7bbccb3a Mon Sep 17 00:00:00 2001 From: Jimmy Date: Fri, 19 Mar 2021 17:22:08 +0800 Subject: [PATCH 10/16] [fix] Fix style; Fix start_hour and end_hour in test --- app/models/event_schedule.rb | 1 + app/views/schedules/happening_now.haml | 2 +- spec/controllers/schedules_controller_spec.rb | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/models/event_schedule.rb b/app/models/event_schedule.rb index 3c52c499..7126d067 100644 --- a/app/models/event_schedule.rb +++ b/app/models/event_schedule.rb @@ -56,6 +56,7 @@ 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) event_time_range.overlaps?(now_range) diff --git a/app/views/schedules/happening_now.haml b/app/views/schedules/happening_now.haml index 537727c3..438cd774 100644 --- a/app/views/schedules/happening_now.haml +++ b/app/views/schedules/happening_now.haml @@ -12,7 +12,7 @@ %h3 This page was loaded at = inyourtz(Time.now) do - #{Time.now.strftime('%a %b %d at %I:%M %P (%z)').to_s} + = Time.now.strftime('%a %b %d at %I:%M %P (%z)') .row / TODO: Clean this up, merge with all events page. diff --git a/spec/controllers/schedules_controller_spec.rb b/spec/controllers/schedules_controller_spec.rb index 67919bde..3896c7f7 100644 --- a/spec/controllers/schedules_controller_spec.rb +++ b/spec/controllers/schedules_controller_spec.rb @@ -30,7 +30,7 @@ describe SchedulesController do describe 'GET #happening_now' do before do - @conference2 = create(:full_conference, start_date: 1.day.ago, end_date: 7.days.from_now) + @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) From bfc39fdbe4fc7cdd3ddde271c00b820299a67051 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Sat, 20 Mar 2021 13:34:14 +0800 Subject: [PATCH 11/16] [feat] happening_now json endpoint returns event embedded in event_schedule --- app/controllers/schedules_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/schedules_controller.rb b/app/controllers/schedules_controller.rb index ae8a011a..cb0a3522 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.to_json } + format.json { render json: @events_schedules.as_json(:include => :event) } end end From 0ede07dfaa9e252eca94cd2a1900051f2207122d Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 31 Mar 2021 07:45:26 +0800 Subject: [PATCH 12/16] [fix] Use let in schedules_controller_spec; revert changes in event_schedule#happening_now? --- app/controllers/schedules_controller.rb | 2 +- app/models/event_schedule.rb | 11 +++++-- spec/controllers/schedules_controller_spec.rb | 33 ++++++++++--------- 3 files changed, 28 insertions(+), 18 deletions(-) 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 From 455faed6382944be8fcc0535881ea5005305f791 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 31 Mar 2021 07:52:55 +0800 Subject: [PATCH 13/16] [fix] Remove unmerged code --- app/views/schedules/happening_now.haml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/views/schedules/happening_now.haml b/app/views/schedules/happening_now.haml index 57d077ff..6c3d8f5b 100644 --- a/app/views/schedules/happening_now.haml +++ b/app/views/schedules/happening_now.haml @@ -9,19 +9,12 @@ .col-md-12 %h2 #{pluralize(@events_schedules.count, 'Event')} Occurring Within The Next 30 minutes. -<<<<<<< HEAD - %h3 - This page was loaded at - = inyourtz(Time.now) do - = Time.now.strftime('%a %b %d at %I:%M %P (%z)') -======= %br %small This page was loaded at = inyourtz(Time.now) do = Time.now.strftime('%a %b %d at %I:%M %P (%z)') \. ->>>>>>> b194ad8ad6e0af95b48002a350a87a514cd8593a .row / TODO: Clean this up, merge with all events page. From 010f72d42fec752f0d935a98e2fe981d91b837a6 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 31 Mar 2021 08:34:04 +0800 Subject: [PATCH 14/16] [fix] Fix event_schedule#happening_now? --- app/models/event_schedule.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/models/event_schedule.rb b/app/models/event_schedule.rb index 0a50b31f..036a89f2 100644 --- a/app/models/event_schedule.rb +++ b/app/models/event_schedule.rb @@ -55,13 +55,14 @@ class EventSchedule < ApplicationRecord # True within `threshold` before and after the event. # def happening_now?(threshold = 30.minutes) - return false if end_time < Time.now - # 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 + + return false if in_tz_end < Time.now + begin_range = Time.now - threshold end_range = Time.now + threshold event_time_range = in_tz_start..in_tz_end From 7b3d97fdbbe5b4d7ef136867a906bc40ffc9f02b Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 31 Mar 2021 16:08:44 +0800 Subject: [PATCH 15/16] [refactor] Change to_json to as_json --- app/controllers/schedules_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/schedules_controller.rb b/app/controllers/schedules_controller.rb index 5a5b7b3b..450dcf32 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.to_json(include: :event) } + format.json { render json: @events_schedules.as_json(root: false, include: :event) } end end From c3167a3503ec3bf88f46c414d45f42e12467cb85 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 31 Mar 2021 17:35:25 +0800 Subject: [PATCH 16/16] [feat] Happening now JSON endpoint contains rendered abstract of event; Add corresponding tests --- app/models/event.rb | 6 ++++++ spec/controllers/schedules_controller_spec.rb | 6 +++++- spec/models/event_spec.rb | 10 ++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/models/event.rb b/app/models/event.rb index ff798651..686c6aa8 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -33,6 +33,8 @@ class Event < ApplicationRecord include ActiveRecord::Transitions include RevisionCount + include FormatHelper + has_paper_trail on: [:create, :update], ignore: [:updated_at, :guid, :week], meta: { conference_id: :conference_id } acts_as_commentable @@ -337,6 +339,10 @@ class Event < ApplicationRecord time <=> other.time end + def serializable_hash(options = {}) + super(options).merge('rendered_abstract' => markdown(abstract)) + end + private ## diff --git a/spec/controllers/schedules_controller_spec.rb b/spec/controllers/schedules_controller_spec.rb index 97632f60..22cb7c1a 100644 --- a/spec/controllers/schedules_controller_spec.rb +++ b/spec/controllers/schedules_controller_spec.rb @@ -34,7 +34,7 @@ describe SchedulesController do let!(:selected_schedule) { create(:schedule, program: program) } let!(:scheduled_event1) do program.update_attributes!(selected_schedule: selected_schedule) - create(:event, program: program, state: 'confirmed') + create(:event, program: program, state: 'confirmed', abstract: '`markdown`') 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 @@ -66,6 +66,10 @@ describe SchedulesController do expect(response.body).to include(event_schedule1.to_json(include: :event)) expect(response.body).not_to include(event_schedule2.to_json(include: :event)) end + + it 'contains the rendered markdown in HTML of events that are happening now' do + expect(response.body).to include('code') + end end end end diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 2beb3a20..1ed2ac9e 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -448,4 +448,14 @@ describe Event do end end end + + describe '#serializable_hash' do + let(:event2) { create(:event, program: conference.program, abstract: '`markdown`') } + + context 'serializes event correctly' do + it 'contains rendered markdown in HTML' do + expect(event2.serializable_hash['rendered_abstract']).to include('markdown') + end + end + end end