From 31007c7bdb7987fe7461e47dd05245e2798b6eb0 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Thu, 3 Jul 2025 01:08:53 -0400 Subject: [PATCH] Create a "published" event if a card is created published This isn't the normal workflow in the app, but this problem will show up if we create cards programmatically (e.g., the seeds) --- app/models/card/statuses.rb | 2 ++ test/models/card/statuses_test.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/app/models/card/statuses.rb b/app/models/card/statuses.rb index 636d9127d..73d3f122a 100644 --- a/app/models/card/statuses.rb +++ b/app/models/card/statuses.rb @@ -4,6 +4,8 @@ module Card::Statuses included do enum :status, %w[ creating drafted published ].index_by(&:itself) + after_create -> { track_event :published }, if: :published? + scope :published_or_drafted_by, ->(user) { where(status: :published).or(where(status: :drafted, creator: user)) } end diff --git a/test/models/card/statuses_test.rb b/test/models/card/statuses_test.rb index 4f0c54312..5a3e2cb8b 100644 --- a/test/models/card/statuses_test.rb +++ b/test/models/card/statuses_test.rb @@ -25,6 +25,33 @@ class Card::StatusesTest < ActiveSupport::TestCase assert_includes Card.published_or_drafted_by(users(:jz)), card end + test "an event is created when a card is created in the published state" do + Current.session = sessions(:david) + + assert_no_difference(-> { Event.count }) do + collections(:writebook).cards.create! creator: users(:kevin), title: "Draft Card" + end + + assert_difference(-> { Event.count } => +1) do + @card = collections(:writebook).cards.create! creator: users(:kevin), title: "Published Card", status: :published + end + + assert_equal @card, Event.last.eventable + assert_equal "card_published", Event.last.action + end + + test "an event is created when a card is published" do + Current.session = sessions(:david) + + card = collections(:writebook).cards.create! creator: users(:kevin), title: "Published Card" + assert_difference(-> { Event.count } => +1) do + card.publish + end + + assert_equal card, Event.last.eventable + assert_equal "card_published", Event.last.action + end + test "can_recover_abandoned_creation?" do card = collections(:writebook).cards.create! creator: users(:kevin) unsaved_card = collections(:writebook).cards.new creator: users(:kevin)