From 2ac2d4e0dae39debc105f36c9339bcb9eaace3c4 Mon Sep 17 00:00:00 2001 From: "Stanko K.R." Date: Fri, 3 Oct 2025 17:30:42 +0200 Subject: [PATCH] Add postpone and auto-postpone as Webhook triggers --- app/helpers/events_helper.rb | 6 ++++++ app/helpers/webhooks_helper.rb | 2 ++ app/models/card/entropic.rb | 2 +- app/models/card/postponable.rb | 9 +++++++-- app/models/webhook.rb | 2 ++ test/models/card/postponable_test.rb | 23 +++++++++++++++++++++-- 6 files changed, 39 insertions(+), 5 deletions(-) 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