From ac765a320c11ed1f66e9998f7b44b2e8181faf0c Mon Sep 17 00:00:00 2001 From: Krzysztof Kotlarek Date: Thu, 8 Apr 2021 10:10:55 +1000 Subject: [PATCH] FIX: event serializer start and end date (#117) When all events are finished (not pending) serializer is not sorting correctly and not taking the lastly updated event_date. That is causing an issue that even though the database is updated correctly, it is not reflected in UI --- app/models/discourse_post_event/event.rb | 4 ++-- spec/models/discourse_post_event/event_spec.rb | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/models/discourse_post_event/event.rb b/app/models/discourse_post_event/event.rb index 7d4b5d63..d3976ca5 100644 --- a/app/models/discourse_post_event/event.rb +++ b/app/models/discourse_post_event/event.rb @@ -65,12 +65,12 @@ module DiscoursePostEvent def starts_at event_dates.pending.order(:starts_at).last&.starts_at || - event_dates.order(:starts_at).last&.starts_at + event_dates.order(:updated_at, :id).last&.starts_at end def ends_at event_dates.pending.order(:starts_at).last&.ends_at || - event_dates.order(:starts_at).last&.ends_at + event_dates.order(:updated_at, :id).last&.ends_at end validates :original_starts_at, presence: true diff --git a/spec/models/discourse_post_event/event_spec.rb b/spec/models/discourse_post_event/event_spec.rb index 2b9d6bce..522e2f0d 100644 --- a/spec/models/discourse_post_event/event_spec.rb +++ b/spec/models/discourse_post_event/event_spec.rb @@ -23,8 +23,8 @@ describe DiscoursePostEvent::Event do let(:second_post) { Fabricate(:post, topic: topic) } let!(:starts_at) { '2020-04-24 14:15:00' } let!(:ends_at) { '2020-04-24 16:15:00' } - let!(:alt_starts_at) { '2020-04-25 17:15:25' } - let!(:alt_ends_at) { '2020-04-25 19:15:25' } + let!(:alt_starts_at) { '2020-04-24 14:14:25' } + let!(:alt_ends_at) { '2020-04-24 19:15:25' } describe '#after_commit[:create, :update]' do context 'a post event has been created' do @@ -84,6 +84,10 @@ describe DiscoursePostEvent::Event do expect(first_event_date.finished_at).not_to be nil expect(second_event_date.starts_at).to eq_time(DateTime.parse(alt_starts_at)) + + second_event_date.update_columns(finished_at: Time.current) + expect(post_event.starts_at).to eq_time(DateTime.parse(alt_starts_at)) + expect(post_event.ends_at).to eq_time(DateTime.parse(alt_ends_at)) end end