Merge pull request #1767 from basecamp/new-invites-mentions
Fix: not detecting mentions when publishing saved drafts
This commit is contained in:
@@ -9,7 +9,7 @@ module Card::Mentions
|
||||
end
|
||||
|
||||
def should_check_mentions?
|
||||
saved_change_to_status? && published?
|
||||
was_just_published?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,7 +4,10 @@ module Card::Statuses
|
||||
included do
|
||||
enum :status, %w[ drafted published ].index_by(&:itself)
|
||||
|
||||
attr_reader :initial_status
|
||||
|
||||
before_save :update_created_at_on_publication
|
||||
before_save :remember_initial_status
|
||||
after_create -> { track_event :published }, if: :published?
|
||||
|
||||
scope :published_or_drafted_by, ->(user) { where(status: :published).or(where(status: :drafted, creator: user)) }
|
||||
@@ -17,10 +20,21 @@ module Card::Statuses
|
||||
end
|
||||
end
|
||||
|
||||
def was_just_published?
|
||||
initial_status&.drafted? && status_in_database.inquiry.published?
|
||||
end
|
||||
|
||||
private
|
||||
def update_created_at_on_publication
|
||||
if will_save_change_to_status? && status_in_database.inquiry.drafted?
|
||||
self.created_at = Time.current
|
||||
end
|
||||
end
|
||||
|
||||
# So that we can check it in callbacks when other operations in the transaction clean the changes.
|
||||
def remember_initial_status
|
||||
if will_save_change_to_status?
|
||||
@initial_status ||= status_in_database.to_s.inquiry
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
require "test_helper"
|
||||
|
||||
class Card::StatusesTest < ActiveSupport::TestCase
|
||||
setup do
|
||||
Current.session = sessions(:david)
|
||||
end
|
||||
|
||||
test "cards start out in a `drafted` state" do
|
||||
card = boards(:writebook).cards.create! creator: users(:kevin), title: "Newly created card"
|
||||
|
||||
@@ -24,8 +28,6 @@ class Card::StatusesTest < ActiveSupport::TestCase
|
||||
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
|
||||
boards(:writebook).cards.create! creator: users(:kevin), title: "Draft Card"
|
||||
end
|
||||
@@ -40,8 +42,6 @@ class Card::StatusesTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
test "an event is created when a card is published" do
|
||||
Current.session = sessions(:david)
|
||||
|
||||
card = boards(:writebook).cards.create! creator: users(:kevin), title: "Published Card"
|
||||
assert_difference(-> { Event.count } => +1) do
|
||||
card.publish
|
||||
@@ -53,7 +53,6 @@ class Card::StatusesTest < ActiveSupport::TestCase
|
||||
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
|
||||
@@ -67,4 +66,22 @@ class Card::StatusesTest < ActiveSupport::TestCase
|
||||
|
||||
assert_equal Time.current, card.created_at
|
||||
end
|
||||
|
||||
test "detect drafts that were just published" do
|
||||
card = boards(:writebook).cards.create! creator: users(:kevin), title: "Draft Card"
|
||||
assert card.drafted?
|
||||
assert_not card.was_just_published?
|
||||
|
||||
card.publish
|
||||
|
||||
assert card.was_just_published?
|
||||
assert_not Card.find(card.id).was_just_published?
|
||||
end
|
||||
|
||||
test "detect cards that were created and published" do
|
||||
card = boards(:writebook).cards.create! creator: users(:kevin), title: "Published Card", status: :published
|
||||
assert card.was_just_published?
|
||||
|
||||
assert_not Card.find(card.id).was_just_published?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -23,7 +23,7 @@ class MentionsTest < ActiveSupport::TestCase
|
||||
card = Card.find(card.id)
|
||||
|
||||
assert_difference -> { Mention.count }, +1 do
|
||||
card.published!
|
||||
card.publish
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user