2025-08-15 02:50:42 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Tests\Traits;
|
|
|
|
|
|
2026-08-14 00:07:08 +02:00
|
|
|
use App\Actions\FetchArticleDataAction;
|
|
|
|
|
use App\Actions\FetchFeedArticlesAction;
|
2026-08-13 23:36:07 +02:00
|
|
|
use App\Actions\FetchRssArticlesAction;
|
|
|
|
|
use App\Actions\FetchWebsiteArticlesAction;
|
2026-08-13 21:59:56 +02:00
|
|
|
use App\Actions\SaveArticleAction;
|
2025-08-15 02:50:42 +02:00
|
|
|
use App\Services\Log\LogSaver;
|
|
|
|
|
use Mockery;
|
2026-03-18 20:01:25 +01:00
|
|
|
use Mockery\MockInterface;
|
2025-08-15 02:50:42 +02:00
|
|
|
|
2026-08-14 00:07:08 +02:00
|
|
|
trait CreatesFetchActions
|
2025-08-15 02:50:42 +02:00
|
|
|
{
|
2026-08-14 00:07:08 +02:00
|
|
|
protected function createFeedFetcher(?LogSaver $logSaver = null): FetchFeedArticlesAction
|
2025-08-15 02:50:42 +02:00
|
|
|
{
|
2026-08-14 00:07:08 +02:00
|
|
|
$logSaver ??= $this->mockLogSaver();
|
|
|
|
|
$saveArticle = new SaveArticleAction($logSaver);
|
2025-08-15 02:50:42 +02:00
|
|
|
|
2026-08-14 00:07:08 +02:00
|
|
|
return new FetchFeedArticlesAction(
|
|
|
|
|
$logSaver,
|
|
|
|
|
new FetchRssArticlesAction($logSaver, $saveArticle),
|
|
|
|
|
new FetchWebsiteArticlesAction($logSaver, $saveArticle),
|
|
|
|
|
);
|
2025-08-15 02:50:42 +02:00
|
|
|
}
|
|
|
|
|
|
2026-08-14 00:07:08 +02:00
|
|
|
protected function createArticleDataFetcher(?LogSaver $logSaver = null): FetchArticleDataAction
|
2026-08-13 23:36:07 +02:00
|
|
|
{
|
2026-08-14 00:07:08 +02:00
|
|
|
return new FetchArticleDataAction($logSaver ?? $this->mockLogSaver());
|
2026-08-13 23:36:07 +02:00
|
|
|
}
|
|
|
|
|
|
2026-08-14 00:07:08 +02:00
|
|
|
/** @return array{FetchFeedArticlesAction, MockInterface} */
|
|
|
|
|
protected function createFeedFetcherWithMockedLogSaver(): array
|
2026-08-13 23:36:07 +02:00
|
|
|
{
|
2026-08-14 00:07:08 +02:00
|
|
|
$logSaver = $this->mockLogSaver();
|
2026-08-13 23:36:07 +02:00
|
|
|
|
2026-08-14 00:07:08 +02:00
|
|
|
return [$this->createFeedFetcher($logSaver), $logSaver];
|
2026-08-13 23:36:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @return LogSaver&MockInterface */
|
|
|
|
|
private function mockLogSaver(): MockInterface
|
2025-08-15 02:50:42 +02:00
|
|
|
{
|
|
|
|
|
$logSaver = Mockery::mock(LogSaver::class);
|
|
|
|
|
$logSaver->shouldReceive('info')->zeroOrMoreTimes();
|
|
|
|
|
$logSaver->shouldReceive('warning')->zeroOrMoreTimes();
|
|
|
|
|
$logSaver->shouldReceive('error')->zeroOrMoreTimes();
|
|
|
|
|
$logSaver->shouldReceive('debug')->zeroOrMoreTimes();
|
2026-03-08 14:18:28 +01:00
|
|
|
|
2026-08-13 23:36:07 +02:00
|
|
|
return $logSaver;
|
2025-08-15 02:50:42 +02:00
|
|
|
}
|
2026-03-08 14:18:28 +01:00
|
|
|
}
|