14 - Add PageCrawlObserver and ProcessCrawlJob skeleton
This commit is contained in:
parent
118de0023a
commit
2a586ecac4
4 changed files with 78 additions and 0 deletions
21
app/Jobs/ProcessCrawlJob.php
Normal file
21
app/Jobs/ProcessCrawlJob.php
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Jobs;
|
||||||
|
|
||||||
|
use App\Models\PageCrawl;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Queue\Queueable;
|
||||||
|
|
||||||
|
class ProcessCrawlJob implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Queueable;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
public PageCrawl $pageCrawl,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public function handle(): void
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -5,11 +5,14 @@
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use App\Enums\CrawlOutcomeEnum;
|
use App\Enums\CrawlOutcomeEnum;
|
||||||
|
use App\Observers\PageCrawlObserver;
|
||||||
use Database\Factories\PageCrawlFactory;
|
use Database\Factories\PageCrawlFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
|
||||||
|
#[ObservedBy(PageCrawlObserver::class)]
|
||||||
class PageCrawl extends Model
|
class PageCrawl extends Model
|
||||||
{
|
{
|
||||||
/** @use HasFactory<PageCrawlFactory> */
|
/** @use HasFactory<PageCrawlFactory> */
|
||||||
|
|
|
||||||
14
app/Observers/PageCrawlObserver.php
Normal file
14
app/Observers/PageCrawlObserver.php
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Observers;
|
||||||
|
|
||||||
|
use App\Jobs\ProcessCrawlJob;
|
||||||
|
use App\Models\PageCrawl;
|
||||||
|
|
||||||
|
class PageCrawlObserver
|
||||||
|
{
|
||||||
|
public function created(PageCrawl $pageCrawl): void
|
||||||
|
{
|
||||||
|
ProcessCrawlJob::dispatch($pageCrawl);
|
||||||
|
}
|
||||||
|
}
|
||||||
40
tests/Feature/Jobs/ProcessCrawlJobTest.php
Normal file
40
tests/Feature/Jobs/ProcessCrawlJobTest.php
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Tests\Feature\Jobs;
|
||||||
|
|
||||||
|
use App\Jobs\ProcessCrawlJob;
|
||||||
|
use App\Models\Page;
|
||||||
|
use App\Models\PageCrawl;
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Support\Facades\Queue;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class ProcessCrawlJobTest extends TestCase
|
||||||
|
{
|
||||||
|
use RefreshDatabase;
|
||||||
|
|
||||||
|
public function test_creating_a_page_crawl_dispatches_process_crawl_job(): void
|
||||||
|
{
|
||||||
|
Queue::fake();
|
||||||
|
|
||||||
|
$page = Page::factory()->createQuietly(['url' => 'https://example.com/article']);
|
||||||
|
PageCrawl::factory()->page($page)->create();
|
||||||
|
|
||||||
|
Queue::assertPushed(ProcessCrawlJob::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_dispatched_job_carries_the_correct_page_crawl(): void
|
||||||
|
{
|
||||||
|
Queue::fake();
|
||||||
|
|
||||||
|
$page = Page::factory()->createQuietly(['url' => 'https://example.com/article']);
|
||||||
|
$crawl = PageCrawl::factory()->page($page)->create();
|
||||||
|
|
||||||
|
Queue::assertPushed(
|
||||||
|
ProcessCrawlJob::class,
|
||||||
|
fn (ProcessCrawlJob $job) => $job->pageCrawl->id === $crawl->id,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue