FIX: consider events without ends_at as expired on EOD (#485)
This commit is contained in:
parent
87793eac8d
commit
e10339bc7b
|
|
@ -88,7 +88,7 @@ module DiscoursePostEvent
|
||||||
scope :visible, -> { where(deleted_at: nil) }
|
scope :visible, -> { where(deleted_at: nil) }
|
||||||
|
|
||||||
def expired?
|
def expired?
|
||||||
!!(self.ends_at && Time.now > self.ends_at)
|
(ends_at || starts_at.end_of_day) <= Time.now
|
||||||
end
|
end
|
||||||
|
|
||||||
def starts_at
|
def starts_at
|
||||||
|
|
@ -128,11 +128,7 @@ module DiscoursePostEvent
|
||||||
if self.raw_invitees && self.raw_invitees.length > 10
|
if self.raw_invitees && self.raw_invitees.length > 10
|
||||||
errors.add(
|
errors.add(
|
||||||
:base,
|
:base,
|
||||||
I18n.t(
|
I18n.t("discourse_post_event.errors.models.event.raw_invitees_length", count: 10),
|
||||||
"discourse_post_event.errors.models.event.raw_invitees_length
|
|
||||||
",
|
|
||||||
count: 10,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -365,7 +361,7 @@ module DiscoursePostEvent
|
||||||
end
|
end
|
||||||
|
|
||||||
def calculate_next_date
|
def calculate_next_date
|
||||||
if !original_ends_at || self.recurrence.blank? || original_starts_at > Time.current
|
if self.recurrence.blank? || original_starts_at > Time.current
|
||||||
return { starts_at: original_starts_at, ends_at: original_ends_at, rescheduled: false }
|
return { starts_at: original_starts_at, ends_at: original_ends_at, rescheduled: false }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -401,8 +397,12 @@ module DiscoursePostEvent
|
||||||
|
|
||||||
next_starts_at = RRuleGenerator.generate(recurrence, localized_start, tzid: self.timezone)
|
next_starts_at = RRuleGenerator.generate(recurrence, localized_start, tzid: self.timezone)
|
||||||
|
|
||||||
|
if original_ends_at
|
||||||
difference = original_ends_at - original_starts_at
|
difference = original_ends_at - original_starts_at
|
||||||
next_ends_at = next_starts_at + difference.seconds
|
next_ends_at = next_starts_at + difference.seconds
|
||||||
|
else
|
||||||
|
next_ends_at = nil
|
||||||
|
end
|
||||||
|
|
||||||
{ starts_at: next_starts_at, ends_at: next_ends_at, rescheduled: true }
|
{ starts_at: next_starts_at, ends_at: next_ends_at, rescheduled: true }
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -51,8 +51,7 @@ module DiscoursePostEvent
|
||||||
end
|
end
|
||||||
|
|
||||||
def ended?
|
def ended?
|
||||||
return false if ends_at.nil?
|
(ends_at || starts_at.end_of_day) <= Time.current
|
||||||
ends_at <= Time.current
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ require "rails_helper"
|
||||||
describe DiscourseCalendar::MonitorEventDates do
|
describe DiscourseCalendar::MonitorEventDates do
|
||||||
fab!(:post_1) { Fabricate(:post) }
|
fab!(:post_1) { Fabricate(:post) }
|
||||||
fab!(:post_2) { Fabricate(:post) }
|
fab!(:post_2) { Fabricate(:post) }
|
||||||
|
fab!(:post_3) { Fabricate(:post) }
|
||||||
fab!(:past_event) do
|
fab!(:past_event) do
|
||||||
Fabricate(
|
Fabricate(
|
||||||
:event,
|
:event,
|
||||||
|
|
@ -24,6 +25,11 @@ describe DiscourseCalendar::MonitorEventDates do
|
||||||
end
|
end
|
||||||
let(:future_date) { future_event.event_dates.first }
|
let(:future_date) { future_event.event_dates.first }
|
||||||
|
|
||||||
|
fab!(:past_event_no_end_time) do
|
||||||
|
Fabricate(:event, post: post_3, original_starts_at: 7.days.after)
|
||||||
|
end
|
||||||
|
let(:past_date_no_end_time) { past_event_no_end_time.event_dates.first }
|
||||||
|
|
||||||
describe "#send_reminder" do
|
describe "#send_reminder" do
|
||||||
it "lodge reminder jobs in correct times" do
|
it "lodge reminder jobs in correct times" do
|
||||||
expect_not_enqueued_with(job: :discourse_post_event_send_reminder) do
|
expect_not_enqueued_with(job: :discourse_post_event_send_reminder) do
|
||||||
|
|
@ -129,23 +135,39 @@ describe DiscourseCalendar::MonitorEventDates do
|
||||||
freeze_time 8.days.after
|
freeze_time 8.days.after
|
||||||
|
|
||||||
described_class.new.execute({})
|
described_class.new.execute({})
|
||||||
|
future_date.reload
|
||||||
expect(future_date.finished_at).to eq(nil)
|
expect(future_date.finished_at).to eq(nil)
|
||||||
expect(past_event.event_dates.pending.count).to eq(0)
|
expect(past_event.event_dates.pending.count).to eq(0)
|
||||||
# expect(past_date.finished_at).not_to eq(nil)
|
past_date.reload
|
||||||
|
expect(past_date.finished_at).not_to eq(nil)
|
||||||
|
past_event_no_end_time.reload
|
||||||
|
expect(past_date_no_end_time.finished_at).not_to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates new date for recurrent events" do
|
it "creates new date for recurrent events" do
|
||||||
past_event.update!(recurrence: "every_week")
|
past_event.update!(recurrence: "every_week")
|
||||||
|
past_event_no_end_time.update!(recurrence: "every_week")
|
||||||
|
|
||||||
freeze_time 8.days.after
|
freeze_time 8.days.after
|
||||||
|
|
||||||
events = DiscourseEvent.track_events { described_class.new.execute({}) }
|
events = DiscourseEvent.track_events { described_class.new.execute({}) }
|
||||||
expect(future_date.finished_at).to eq(nil)
|
expect(future_date.finished_at).to eq(nil)
|
||||||
|
|
||||||
expect(past_event.event_dates.pending.count).to eq(1)
|
expect(past_event.event_dates.pending.count).to eq(1)
|
||||||
expect(past_event.event_dates.pending.first.starts_at.to_s).to eq(
|
expect(past_event.event_dates.pending.first.starts_at.to_s).to eq(
|
||||||
(past_date.starts_at + 7.days).to_s,
|
(past_date.starts_at + 7.days).to_s,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
expect(past_event_no_end_time.event_dates.pending.count).to eq(1)
|
||||||
|
expect(past_event_no_end_time.event_dates.pending.first.starts_at.to_s).to eq(
|
||||||
|
(past_date_no_end_time.starts_at + 7.days).to_s,
|
||||||
|
)
|
||||||
|
|
||||||
expect(events).to include(event_name: :discourse_post_event_event_ended, params: [past_event])
|
expect(events).to include(event_name: :discourse_post_event_event_ended, params: [past_event])
|
||||||
|
expect(events).to include(
|
||||||
|
event_name: :discourse_post_event_event_ended,
|
||||||
|
params: [past_event_no_end_time],
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,17 @@ describe DiscoursePostEvent::EventDate do
|
||||||
let(:user) { Fabricate(:user, admin: true) }
|
let(:user) { Fabricate(:user, admin: true) }
|
||||||
let(:topic) { Fabricate(:topic, user: user) }
|
let(:topic) { Fabricate(:topic, user: user) }
|
||||||
let!(:first_post) { Fabricate(:post, topic: topic) }
|
let!(:first_post) { Fabricate(:post, topic: topic) }
|
||||||
let(:second_post) { Fabricate(:post, topic: topic) }
|
let!(:second_post) { Fabricate(:post, topic: topic) }
|
||||||
let!(:starts_at) { "2020-04-24 14:15:00" }
|
let!(:starts_at) { "2020-04-24 08:15:00" }
|
||||||
let!(:ends_at) { "2020-04-24 16:15:00" }
|
let!(:starts_at_yesterday) { "2020-04-23 19:15:00" }
|
||||||
let!(:alt_starts_at) { "2020-04-25 17:15:25" }
|
|
||||||
let!(:alt_ends_at) { "2020-04-25 19:15:25" }
|
|
||||||
let!(:post_event) { Fabricate(:event, post: first_post, original_starts_at: starts_at) }
|
let!(:post_event) { Fabricate(:event, post: first_post, original_starts_at: starts_at) }
|
||||||
let!(:event_date) { Fabricate(:event_date, event: post_event) }
|
let!(:event_date) { Fabricate(:event_date, event: post_event, starts_at: starts_at) }
|
||||||
|
let!(:yesterday_post_event) do
|
||||||
|
Fabricate(:event, post: second_post, original_starts_at: starts_at_yesterday)
|
||||||
|
end
|
||||||
|
let!(:yesterday_event_date) do
|
||||||
|
Fabricate(:event_date, event: yesterday_post_event, starts_at: starts_at_yesterday)
|
||||||
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
freeze_time DateTime.parse("2020-04-24 14:10")
|
freeze_time DateTime.parse("2020-04-24 14:10")
|
||||||
|
|
@ -21,8 +25,14 @@ describe DiscoursePostEvent::EventDate do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "Event Date Ended?" do
|
describe "Event Date Ended?" do
|
||||||
it "returns false if no end time has been specified" do
|
context "with no end date time" do
|
||||||
|
it "returns false if started today" do
|
||||||
expect(event_date.ended?).to eq(false)
|
expect(event_date.ended?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "returns true if started before today" do
|
||||||
|
expect(yesterday_event_date.ended?).to eq(true)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue