/** * @throws Exception\TodoNotOpen */ public function markAsDone() { $status = TodoStatus::fromString('done'); if (!$this->status->isOpen()) { throw Exception\TodoNotOpen::triedStatus($status, $this); } $this->recordThat(TodoWasMarkedAsDone::fromStatus($this->todoId, $this->status, $status)); }