nodes are scheduled on different days according to dates provided

This commit is contained in:
Yisroel Baum 2026-04-23 20:54:08 +03:00
parent 858f2e075f
commit 358694e7e3
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
3 changed files with 58 additions and 2 deletions

View file

@ -74,10 +74,21 @@ class CreatePlan
name: $request->name,
user: $user,
));
foreach ($nodesOfText as $node) {
$dates = [];
$currentDate = $startDate;
while ($currentDate <= $endDate) {
$dates[] = $currentDate;
$currentDate = $currentDate->modify('+1 day');
}
foreach ($nodesOfText as $index => $node) {
$dateIndex = $index % count($dates);
$scheduledDate = $dates[$dateIndex];
$this->createScheduledNode->execute(
new CreateScheduledNodeRequest(
date: '2025-01-01', // TODO: this should be cycling over some list of dates
date: $scheduledDate->format('Y-m-d'),
planId: $plan->getId(),
)
);

View file

@ -22,4 +22,9 @@ class ScheduledNode
{
return $this->plan;
}
public function getDate(): DateTimeImmutable
{
return $this->date;
}
}

View file

@ -11,6 +11,7 @@ use App\Text\CreateTextDto;
use App\User\UseCases\CreateUserDto;
use App\User\User;
use App\ValueObjects\EmailAddress;
use DateTimeImmutable;
use DomainException;
use Tests\Fakes\FakeNodeRepository;
use Tests\Fakes\FakePlanRepository;
@ -230,4 +231,43 @@ class CreatePlanTest extends TestCase
dateEnd: '2025-01-01',
));
}
public function test_scheduled_nodes_are_scheduled_on_different_days(): void
{
$text = $this->textRepo->find(0);
$rootNode = $this->nodeRepo->create(new CreateNodeDto(
text: $text,
title: 'root node',
parentNode: null,
));
$this->nodeRepo->create(new CreateNodeDto(
text: $text,
title: 'child 1',
parentNode: $rootNode,
));
$this->nodeRepo->create(new CreateNodeDto(
text: $text,
title: 'child 2',
parentNode: $rootNode,
));
$plan = $this->useCase->execute(new CreatePlanRequest(
userId: 0,
name: 'testPlan',
textId: 0,
dateStart: '2025-01-01',
dateEnd: '2025-01-02',
));
$childOne = $this->scheduledNodeRepo->find(0);
$childTwo = $this->scheduledNodeRepo->find(1);
$this->assertNotNull($childOne);
$this->assertNotNull($childTwo);
$this->assertEquals(
new DateTimeImmutable('2025-01-01'),
$childOne->getDate()
);
$this->assertEquals(
new DateTimeImmutable('2025-01-02'),
$childTwo->getDate()
);
}
}