/** * @return TodoStatus */ public function todoStatus() { if (is_null($this->todoStatus)) { $this->todoStatus = TodoStatus::fromString($this->payload['status']); } return $this->todoStatus; }
public function reopenTodo() { if (!$this->status->isDone()) { throw Exception\CannotReopenTodo::notMarkedDone($this); } $this->recordThat(TodoWasReopened::withStatus($this->todoId, TodoStatus::fromString(TodoStatus::OPEN))); }
/** * @return TodoStatus */ public function status() { if (null === $this->status) { $this->status = TodoStatus::fromString($this->payload['status']); } return $this->status; }
/** * @param UserId $userId * @param TodoDeadline $deadline * @return void * @throws Exception\InvalidDeadline * @throws Exception\TodoNotOpen */ public function addDeadline(UserId $userId, TodoDeadline $deadline) { if (!$this->assigneeId()->sameValueAs($userId)) { throw Exception\InvalidDeadline::userIsNotAssignee($userId, $this->assigneeId()); } if ($deadline->isInThePast()) { throw Exception\InvalidDeadline::deadlineInThePast($deadline); } if ($this->status->isDone()) { throw Exception\TodoNotOpen::triedToAddDeadline($deadline, $this->status); } $this->recordThat(DeadlineWasAddedToTodo::byUserToDate($this->todoId, $this->assigneeId, $deadline)); }
/** * @test * @return Todo $todo */ public function it_marks_an_open_todo_as_expired() { $todoId = TodoId::generate(); $userId = UserId::generate(); $deadline = TodoDeadline::fromString('yesterday'); $events = [TodoWasPosted::byUser($userId, 'Do something that will be forgotten', $todoId, TodoStatus::open()), DeadlineWasAddedToTodo::byUserToDate($todoId, $userId, $deadline)]; $todo = $this->reconstituteAggregateFromHistory(Todo::class, $events); $todo->markAsExpired(); $events = $this->popRecordedEvent($todo); $this->assertEquals(1, count($events)); $this->assertInstanceOf(TodoWasMarkedAsExpired::class, $events[0]); $expectedPayload = ['old_status' => 'open', 'new_status' => 'expired']; $this->assertEquals($expectedPayload, $events[0]->payload()); return $todo; }
/** * @param TodoStatus $status * @return TodoNotOpen */ public static function triedToExpire(TodoStatus $status, Todo $todo) { return new self(sprintf('Tried to expire todo with status %s.', $status->toString())); }
public function getEvent($todoId) { return TodoWasMarkedAsExpired::fromStatus(TodoId::fromString($todoId), TodoStatus::fromString(TodoStatus::OPEN), TodoStatus::fromString(TodoStatus::EXPIRED)); }
/** * @param TodoReminder $reminder * @param TodoStatus $status * @return TodoNotOpen */ public static function triedToAddReminder(TodoReminder $reminder, TodoStatus $status) { return new self(sprintf('Tried to reminder %s to a todo with status %s.', $reminder->toString(), $status->toString())); }
/** * @param TodoStatus $status * @param Todo $todo * @return TodoAlreadyDone */ public static function triedStatus(TodoStatus $status, Todo $todo) { return new self(sprintf('Tried to change status of Todo %s to %s. But Todo is already marked as done!', $todo->todoId()->toString(), $status->toString())); }
/** * @param TodoDeadline $deadline * @param TodoStatus $status * @return TodoNotOpen */ public static function triedToAddDeadline(TodoDeadline $deadline, TodoStatus $status) { return new self(sprintf('Tried to deadline %s to a todo with status %s.', $deadline->toString(), $status->toString())); }