diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb
index fe8116ebd..12e9989ff 100644
--- a/app/helpers/events_helper.rb
+++ b/app/helpers/events_helper.rb
@@ -87,6 +87,12 @@ module EventsHelper
"#{h event_creator_name(event) } moved \"#{h title }\" to done".html_safe
when "card_reopened"
"#{h event_creator_name(event) } reopened \"#{h title }\"".html_safe
+ when "card_postponed"
+ "#{h event_creator_name(event) } postponed \"#{h title }\"".html_safe
+ when "card_auto_postponed"
+ "\"#{h title }\" was postponed due to inactivity".html_safe
+ when "card_resumed"
+ "#{h event_creator_name(event) } resumed \"#{h title }\"".html_safe
when "card_due_date_added"
"#{h event_creator_name(event)} set the date to #{h event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')} on \"#{h title }\"".html_safe
when "card_due_date_changed"
diff --git a/app/helpers/webhooks_helper.rb b/app/helpers/webhooks_helper.rb
index b3e14c4ab..6b63870de 100644
--- a/app/helpers/webhooks_helper.rb
+++ b/app/helpers/webhooks_helper.rb
@@ -2,6 +2,8 @@ module WebhooksHelper
ACTION_LABELS = {
card_assigned: "Card assigned",
card_closed: "Card moved to Done",
+ card_postponed: "Card postponed",
+ card_auto_postponed: "Card auto-postponed",
card_collection_changed: "Card collection changed",
card_due_date_added: "Card due date added",
card_due_date_changed: "Card due date changed",
diff --git a/app/models/card/entropic.rb b/app/models/card/entropic.rb
index 91157af06..46acd8da8 100644
--- a/app/models/card/entropic.rb
+++ b/app/models/card/entropic.rb
@@ -22,7 +22,7 @@ module Card::Entropic
class_methods do
def auto_postpone_all_due
due_to_be_postponed.find_each do |card|
- card.postpone(user: User.system)
+ card.auto_postpone(user: User.system)
end
end
end
diff --git a/app/models/card/postponable.rb b/app/models/card/postponable.rb
index 2ad6b1b14..f88c9c01b 100644
--- a/app/models/card/postponable.rb
+++ b/app/models/card/postponable.rb
@@ -24,16 +24,21 @@ module Card::Postponable
open? && published? && !postponed?
end
- def postpone(user: Current.user)
+ def auto_postpone(**args)
+ postpone(**args, event_name: :auto_postponed)
+ end
+
+ def postpone(user: Current.user, event_name: :postponed)
transaction do
send_back_to_triage
reopen
activity_spike&.destroy
create_not_now!(user: user) unless postponed?
+ track_event event_name, creator: user
end
end
- def resume
+ def resume(user: Current.user)
transaction do
reopen
activity_spike&.destroy
diff --git a/app/models/webhook.rb b/app/models/webhook.rb
index d3411e974..e84ada9b4 100644
--- a/app/models/webhook.rb
+++ b/app/models/webhook.rb
@@ -9,6 +9,8 @@ class Webhook < ApplicationRecord
PERMITTED_ACTIONS = %w[
card_assigned
card_closed
+ card_postponed
+ card_auto_postponed
card_collection_changed
card_due_date_added
card_due_date_changed
diff --git a/test/models/card/postponable_test.rb b/test/models/card/postponable_test.rb
index 89f3179ae..9bb29374e 100644
--- a/test/models/card/postponable_test.rb
+++ b/test/models/card/postponable_test.rb
@@ -20,10 +20,29 @@ class Card::PostponableTest < ActiveSupport::TestCase
card = cards(:text)
assert_changes -> { card.reload.postponed? }, to: true do
- card.postpone
+ assert_difference -> { card.events.count }, +1 do
+ card.postpone(user: users(:kevin))
+ end
end
- assert_equal users(:david), card.not_now.user
+ assert_equal users(:kevin), card.not_now.user
+ assert card.events.last.action.card_postponed?
+
+ assert_changes -> { card.reload.postponed? }, to: false do
+ card.resume(user: users(:kevin))
+ end
+ end
+
+ test "auto_postpone a card" do
+ card = cards(:text)
+
+ assert_changes -> { card.reload.postponed? }, to: true do
+ assert_difference -> { card.events.count }, +1 do
+ card.auto_postpone(user: users(:kevin))
+ end
+ end
+
+ assert card.events.last.action.card_auto_postponed?
end
test "scopes" do