diff --git a/app/ScheduledNode/UseCases/CreateScheduledNode.php b/app/ScheduledNode/UseCases/CreateScheduledNode.php index 05e6e78..a279f62 100644 --- a/app/ScheduledNode/UseCases/CreateScheduledNode.php +++ b/app/ScheduledNode/UseCases/CreateScheduledNode.php @@ -6,6 +6,7 @@ use App\Plan\PlanRepository; use App\ScheduledNode\ScheduledNode; use App\ScheduledNode\CreateScheduledNodeDto; use App\ScheduledNode\ScheduledNodeRepository; +use DomainException; class CreateScheduledNode { @@ -17,7 +18,12 @@ class CreateScheduledNode public function execute( CreateScheduledNodeRequest $request ): ScheduledNode { - $plan = $this->planRepo->find($request->planId); + $id = $request->planId; + $plan = $this->planRepo->find($id); + if ($plan === null) { + throw new DomainException("Plan with id: $id doesnt exist"); + } + return $this->scheduledNodeRepo->create( new CreateScheduledNodeDto( date: $request->date, diff --git a/tests/Unit/ScheduledNode/UseCases/CreateScheduledNodeTest.php b/tests/Unit/ScheduledNode/UseCases/CreateScheduledNodeTest.php index 445c20b..ced285a 100644 --- a/tests/Unit/ScheduledNode/UseCases/CreateScheduledNodeTest.php +++ b/tests/Unit/ScheduledNode/UseCases/CreateScheduledNodeTest.php @@ -11,6 +11,7 @@ use App\ScheduledNode\UseCases\CreateScheduledNodeRequest; use App\User\User; use App\ValueObjects\EmailAddress; use DateTimeImmutable; +use DomainException; use Tests\Fakes\FakePlanRepository; use Tests\Fakes\FakeScheduledNodeRepository; use PHPUnit\Framework\TestCase; @@ -62,4 +63,16 @@ class CreateScheduledNodeTest extends TestCase ); $this->assertInstanceOf(Plan::class, $scheduledNode->getPlan()); } + + public function test_nonexistant_plan_throws(): void + { + $this->expectException(DomainException::class); + $this->expectExceptionMessage('Plan with id: 1 doesnt exist'); + $this->useCase->execute( + new CreateScheduledNodeRequest( + date: new DateTimeImmutable('now'), + planId: 1, + ) + ); + } }