diff --git a/app/controllers/cards_controller.rb b/app/controllers/cards_controller.rb index daf22a5bc5..e79eeb22b5 100644 --- a/app/controllers/cards_controller.rb +++ b/app/controllers/cards_controller.rb @@ -12,7 +12,7 @@ def index 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_in(@board) redirect_to card end diff --git a/app/models/user/accessor.rb b/app/models/user/accessor.rb index a9cc5e4591..5dc1cdd90a 100644 --- a/app/models/user/accessor.rb +++ b/app/models/user/accessor.rb @@ -11,6 +11,12 @@ module User::Accessor after_create_commit :grant_access_to_boards, unless: :system? end + def draft_new_card_in(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 } } diff --git a/test/models/user/accessor_test.rb b/test/models/user/accessor_test.rb index 95cb84edba..0ff1074a2f 100644 --- a/test/models/user/accessor_test.rb +++ b/test/models/user/accessor_test.rb @@ -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_in(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_in(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