Example #1
0
 /**
  * @return TodoStatus
  */
 public function todoStatus()
 {
     if (is_null($this->todoStatus)) {
         $this->todoStatus = TodoStatus::fromString($this->payload['status']);
     }
     return $this->todoStatus;
 }
Example #2
0
 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;
 }
Example #4
0
 /**
  * @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));
 }
Example #5
0
 /**
  * @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;
 }
Example #6
0
 /**
  * @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));
 }
Example #8
0
 /**
  * @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()));
 }
Example #10
0
 /**
  * @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()));
 }