From 97a6916ae197f6510f1db16e82fdffa2f886e0ea Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Mon, 17 Nov 2025 17:35:12 -0500 Subject: [PATCH] Update a card's `created_at` when it is published ref: https://app.fizzy.do/5986089/cards/2854 --- app/models/card/statuses.rb | 8 ++++++++ test/models/card/statuses_test.rb | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/app/models/card/statuses.rb b/app/models/card/statuses.rb index f26896b21..2639d88b7 100644 --- a/app/models/card/statuses.rb +++ b/app/models/card/statuses.rb @@ -4,6 +4,7 @@ module Card::Statuses included do enum :status, %w[ drafted published ].index_by(&:itself) + before_save :update_created_at_on_publication after_create -> { track_event :published }, if: :published? scope :published_or_drafted_by, ->(user) { where(status: :published).or(where(status: :drafted, creator: user)) } @@ -15,4 +16,11 @@ module Card::Statuses track_event :published end end + + private + def update_created_at_on_publication + if will_save_change_to_status? && status_in_database.inquiry.drafted? + self.created_at = Time.now + end + end end diff --git a/test/models/card/statuses_test.rb b/test/models/card/statuses_test.rb index 7d2fa9401..83179fbc4 100644 --- a/test/models/card/statuses_test.rb +++ b/test/models/card/statuses_test.rb @@ -51,4 +51,20 @@ class Card::StatusesTest < ActiveSupport::TestCase assert_equal card, event.eventable assert_equal "card_published", event.action end + + test "created_at is updated when the card is published" do + Current.session = sessions(:david) + freeze_time + + card = travel_to 1.week.ago do + boards(:writebook).cards.create! creator: users(:kevin), title: "Newly created card" + end + + assert card.drafted? + assert_equal 1.week.ago, card.created_at + + card.publish + + assert_equal Time.now, card.created_at + end end