Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/controllers/cards_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
6 changes: 6 additions & 0 deletions app/models/user/accessor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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 } }
Expand Down
32 changes: 32 additions & 0 deletions test/models/user/accessor_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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