Esempio n. 1
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));
 }
 /**
  * @return TodoDeadline
  */
 public function deadline()
 {
     if (!$this->deadline) {
         $this->deadline = TodoDeadline::fromString($this->payload['deadline']);
     }
     return $this->deadline;
 }
 /**
  * @test
  * @dataProvider getDeadlines
  */
 public function it_correctly_validates_the_deadline($deadline, $inThePast)
 {
     $deadline = TodoDeadline::fromString($deadline);
     $deadlineInThePast = $deadline->isInThePast();
     if ($inThePast) {
         $this->assertTrue($deadlineInThePast);
     } else {
         $this->assertFalse($deadlineInThePast);
     }
 }
Esempio n. 4
0
 /**
  * @test
  * @return Todo $todo
  * @depends it_marks_an_open_todo_as_expired
  */
 public function it_unmarks_an_expired_todo_when_deadline_is_added(Todo $todo)
 {
     $userId = $todo->assigneeId();
     $deadline = TodoDeadline::fromString('1 day');
     $todo->addDeadline($userId, $deadline);
     $events = $this->popRecordedEvent($todo);
     $this->assertEquals(2, count($events));
     $this->assertInstanceOf(TodoWasUnmarkedAsExpired::class, $events[1]);
     return $todo;
 }
Esempio n. 5
0
 /**
  * @test
  * @expectedException \Prooph\ProophessorDo\Model\Todo\Exception\TodoNotOpen
  * @depends it_adds_a_deadline_to_todo
  */
 public function it_throws_an_exception_if_todo_is_closed(Todo $todo)
 {
     $todo->markAsDone();
     $todo->addDeadline($todo->assigneeId(), TodoDeadline::fromString('2047-12-11 12:00:00'));
 }
Esempio n. 6
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()));
 }
 public static function deadlineInThePast(TodoDeadline $deadline)
 {
     return new self(sprintf('Provided deadline %s is in the past from %s', $deadline->toString(), $deadline->createdOn()));
 }
 /**
  * @return TodoDeadline
  */
 public function deadline()
 {
     return TodoDeadline::fromString($this->payload['deadline']);
 }
Esempio n. 9
0
 /**
  * @param TodoStatus $status
  * @param Todo       $todo
  * @return TodoNotExpired
  */
 public static function withDeadline(TodoDeadline $deadline, Todo $todo)
 {
     return new self(sprintf('Tried to mark a non-expired Todo as expired.  Todo will expire after the deadline %s.', $deadline->toString()));
 }