Reapply "Make sure new card drafts are refreshed when reused"

This reverts commit 045ddf78f3.
This commit is contained in:
Jorge Manrubia
2026-01-05 15:58:29 +01:00
parent 045ddf78f3
commit 5f38e8957e
3 changed files with 39 additions and 1 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ class CardsController < ApplicationController
def create
respond_to do |format|
format.html do
card = @board.cards.find_or_create_by!(creator: Current.user, status: "drafted")
card = Current.user.draft_new_card_at(@board)
redirect_to card
end
+6
View File
@@ -11,6 +11,12 @@ module User::Accessor
after_create_commit :grant_access_to_boards, unless: :system?
end
def draft_new_card_at(board)
board.cards.find_or_initialize_by(creator: self, status: "drafted").tap do |card|
card.update!(created_at: Time.current, updated_at: Time.current, last_active_at: Time.current)
end
end
private
def grant_access_to_boards
Access.insert_all account.boards.all_access.pluck(:id).collect { |board_id| { id: ActiveRecord::Type::Uuid.generate, board_id: board_id, user_id: id, account_id: account.id } }
+32
View File
@@ -12,4 +12,36 @@ class User::AccessorTest < ActiveSupport::TestCase
system_user = User.create!(account: accounts("37s"), role: "system", name: "Test System User")
assert_empty system_user.boards
end
test "creating a new card draft sets current timestamps" do
user = users(:david)
board = boards(:writebook)
freeze_time do
card = user.draft_new_card_at(board)
assert card.persisted?
assert card.drafted?
assert_equal user, card.creator
assert_equal board, card.board
assert_equal Time.current, card.created_at
assert_equal Time.current, card.updated_at
assert_equal Time.current, card.last_active_at
end
end
test "reusing an existing card draft refreshes timestamps" do
existing_draft = cards(:unfinished_thoughts)
user = existing_draft.creator
board = existing_draft.board
freeze_time do
card = user.draft_new_card_at(board)
assert_equal existing_draft, card
assert_equal Time.current, card.created_at
assert_equal Time.current, card.updated_at
assert_equal Time.current, card.last_active_at
end
end
end