1
0

TaskAssignmentTest.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Tests\Domain;
  4. use App\Domain\TaskAssignment;
  5. use PHPUnit\Framework\TestCase;
  6. /**
  7. * Phase 18: status enum guard. The repo + controller both lean on this for
  8. * validation, so it gets its own pin.
  9. */
  10. final class TaskAssignmentTest extends TestCase
  11. {
  12. public function testKnownStatusesAreValid(): void
  13. {
  14. $this->assertTrue(TaskAssignment::isValidStatus('zugewiesen'));
  15. $this->assertTrue(TaskAssignment::isValidStatus('gestartet'));
  16. $this->assertTrue(TaskAssignment::isValidStatus('abgeschlossen'));
  17. $this->assertTrue(TaskAssignment::isValidStatus('abgebrochen'));
  18. }
  19. public function testUnknownStatusesAreRejected(): void
  20. {
  21. $this->assertFalse(TaskAssignment::isValidStatus(''));
  22. $this->assertFalse(TaskAssignment::isValidStatus('done'));
  23. $this->assertFalse(TaskAssignment::isValidStatus('in-progress'));
  24. $this->assertFalse(TaskAssignment::isValidStatus('ZUGEWIESEN'));
  25. }
  26. public function testAuditSnapshotIncludesStatus(): void
  27. {
  28. $a = new TaskAssignment(1, 2, 3, 1.5, TaskAssignment::STATUS_GESTARTET);
  29. $snapshot = $a->toAuditSnapshot();
  30. $this->assertSame(1, $snapshot['id']);
  31. $this->assertSame(2, $snapshot['task_id']);
  32. $this->assertSame(3, $snapshot['sprint_worker_id']);
  33. $this->assertSame(1.5, $snapshot['days']);
  34. $this->assertSame(TaskAssignment::STATUS_GESTARTET, $snapshot['status']);
  35. }
  36. public function testStatusesListIsCanonicalOrder(): void
  37. {
  38. // Workflow order: assigned → started → done | cancelled. Tests both
  39. // the constant order and the count, so adding a new status doesn't
  40. // silently slot in the wrong spot.
  41. $this->assertSame(
  42. [
  43. TaskAssignment::STATUS_ZUGEWIESEN,
  44. TaskAssignment::STATUS_GESTARTET,
  45. TaskAssignment::STATUS_ABGESCHLOSSEN,
  46. TaskAssignment::STATUS_ABGEBROCHEN,
  47. ],
  48. TaskAssignment::STATUSES,
  49. );
  50. }
  51. }