Exemple #1
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;
 }
Exemple #2
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));
 }