From d5d1de587346fc27aef017a3fd6ce19870285320 Mon Sep 17 00:00:00 2001 From: Simmon Li Date: Wed, 20 Nov 2024 02:25:17 +0000 Subject: [PATCH] Update ical to generate the correct times while adjusting for timezone. Add test (#82) --- app/models/calendar.rb | 6 +----- test/controllers/events_controller_test.rb | 2 +- test/models/calendar_test.rb | 24 ++++++++++++++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 test/models/calendar_test.rb diff --git a/app/models/calendar.rb b/app/models/calendar.rb index 133d877..c8a4bc0 100644 --- a/app/models/calendar.rb +++ b/app/models/calendar.rb @@ -65,11 +65,7 @@ def timezone @timezone ||= TZInfo::Timezone.get(timezone_identifier) end - def ical_timezone - timezone.ical_timezone(timezone.now) - end - def ical_time(datetime) - Icalendar::Values::DateTime.new(datetime, tzid: timezone_identifier) + Icalendar::Values::DateTime.new(datetime.in_time_zone(timezone_identifier), tzid: timezone_identifier) end end diff --git a/test/controllers/events_controller_test.rb b/test/controllers/events_controller_test.rb index fff6001..bfd70e1 100644 --- a/test/controllers/events_controller_test.rb +++ b/test/controllers/events_controller_test.rb @@ -4,7 +4,7 @@ class EventsControllerTest < ActionController::TestCase def setup Event.destroy_all begining = Date.parse('2024-01-01').beginning_of_year - dates = 12.times.map { |i| begining + i.months } + dates = 12.times.map { |i| begining.to_datetime.change(hour: 19, zone: 'America/Toronto') + i.months } @events = dates.map do |date| Event.create!( start_at: date, diff --git a/test/models/calendar_test.rb b/test/models/calendar_test.rb new file mode 100644 index 0000000..009f11e --- /dev/null +++ b/test/models/calendar_test.rb @@ -0,0 +1,24 @@ +require 'test_helper' + +class CalendarTest < ActiveSupport::TestCase + def setup + @event = Event.create( + 'name' => "Toronto Ruby's One Year Anniversary", + 'location' => '
Some Office
', + 'rsvp_link' => 'https://test.com', + 'description' => '
DESCRIPTION
', + 'sponsor' => '', + 'sponsor_link' => '', + 'sponsor_logo' => '', + 'start_at' => '2024-11-26T00:30Z', + 'status' => 'published' + ) + @calendar = Calendar.new([@event]) + end + + test 'ical_time produces the correct time' do + want = DateTime.parse('2024-11-25T19:30-05:00').to_i + got = @calendar.send(:ical_time, @event.start_at) + assert_same(want, got.to_i) + end +end