diff --git a/app/models/topic.rb b/app/models/topic.rb index 4a66ee78ad7..ef9ec5b8c1f 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -988,9 +988,10 @@ SQL # * based_on_last_post: True if time should be based on timestamp of the last post. # * category_id: Category that the update will apply to. def set_or_create_timer(status_type, time, by_user: nil, timezone_offset: 0, based_on_last_post: false, category_id: SiteSetting.uncategorized_category_id) - topic_timer_options = { status_type: status_type, topic: self } + topic_timer_options = { topic: self } topic_timer_options.merge!(user: by_user) unless TopicTimer.public_types[status_type] topic_timer = TopicTimer.find_or_initialize_by(topic_timer_options) + topic_timer.status_type = status_type if time.blank? topic_timer.trash!(trashed_by: by_user || Discourse.system_user) diff --git a/spec/models/topic_spec.rb b/spec/models/topic_spec.rb index 207bee1efb2..e238e44a483 100644 --- a/spec/models/topic_spec.rb +++ b/spec/models/topic_spec.rb @@ -470,7 +470,7 @@ describe Topic do expect(notification.user).to eq(user) expect(notification.topic).to eq(topic) - + expect(notification.notification_type) .to eq(Notification.types[:invited_to_private_message]) end @@ -1267,6 +1267,16 @@ describe Topic do end end + it 'should allow status_type to be updated' do + Timecop.freeze do + topic_timer = closing_topic.set_or_create_timer( + TopicTimer.types[:publish_to_category], 72, by_user: admin + ) + + expect(topic_timer.execute_at).to eq(3.days.from_now) + end + end + it "does not update topic's topic status created_at it was already set to close" do expect{ closing_topic.set_or_create_timer(TopicTimer.types[:close], 14) diff --git a/spec/models/topic_timer_spec.rb b/spec/models/topic_timer_spec.rb index 7ffd78d2d63..d38a939b947 100644 --- a/spec/models/topic_timer_spec.rb +++ b/spec/models/topic_timer_spec.rb @@ -260,7 +260,8 @@ RSpec.describe TopicTimer, type: :model do open_topic_timer = Fabricate(:topic_timer, status_type: described_class.types[:open], execute_at: Time.zone.now - 1.hour, - created_at: Time.zone.now - 2.hour + created_at: Time.zone.now - 2.hour, + topic: Fabricate(:topic, closed: true) ) Fabricate(:topic_timer)