fedi-feed-router/backend/tests/Unit/Jobs/ArticleDiscoveryJobTest.php

147 lines
4.2 KiB
PHP
Raw Permalink Normal View History

2025-08-10 15:46:20 +02:00
<?php
namespace Tests\Unit\Jobs;
2025-08-15 16:39:18 +02:00
use Domains\Article\Jobs\ArticleDiscoveryJob;
use Domains\Settings\Models\Setting;
use Domains\Logging\Services\LogSaver;
2025-08-10 15:46:20 +02:00
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Queue;
2025-08-15 02:50:42 +02:00
use Mockery;
2025-08-10 15:46:20 +02:00
use Tests\TestCase;
class ArticleDiscoveryJobTest extends TestCase
{
use RefreshDatabase;
2025-08-15 02:50:42 +02:00
protected function setUp(): void
{
parent::setUp();
Queue::fake();
}
2025-08-10 15:46:20 +02:00
public function test_constructor_sets_correct_queue(): void
{
// Act
$job = new ArticleDiscoveryJob();
// Assert
$this->assertEquals('feed-discovery', $job->queue);
}
public function test_handle_skips_when_article_processing_disabled(): void
{
// Arrange
Setting::create(['key' => 'article_processing_enabled', 'value' => '0']);
2025-08-15 02:50:42 +02:00
// Mock LogSaver
$logSaverMock = Mockery::mock(LogSaver::class);
$logSaverMock->shouldReceive('info')
->once()
->with('Article processing is disabled. Article discovery skipped.');
2025-08-10 15:46:20 +02:00
$job = new ArticleDiscoveryJob();
// Act
2025-08-15 02:50:42 +02:00
$job->handle($logSaverMock);
2025-08-10 15:46:20 +02:00
// Assert
Queue::assertNothingPushed();
}
public function test_handle_dispatches_jobs_when_article_processing_enabled(): void
{
// Arrange
Setting::create(['key' => 'article_processing_enabled', 'value' => '1']);
2025-08-15 02:50:42 +02:00
// Mock LogSaver
$logSaverMock = Mockery::mock(LogSaver::class);
$logSaverMock->shouldReceive('info')
->with('Starting article discovery for all active feeds')
->once();
$logSaverMock->shouldReceive('info')
->with('Article discovery jobs dispatched for all active feeds')
->once();
2025-08-10 15:46:20 +02:00
$job = new ArticleDiscoveryJob();
// Act
2025-08-15 02:50:42 +02:00
$job->handle($logSaverMock);
2025-08-10 15:46:20 +02:00
// Assert - This will test that the static method is called, but we can't easily verify
// the job dispatch without mocking the static method
$this->assertTrue(true); // Job completes without error
}
public function test_handle_with_default_article_processing_enabled(): void
{
// Arrange - No setting exists, should default to enabled
2025-08-15 02:50:42 +02:00
// Mock LogSaver
$logSaverMock = Mockery::mock(LogSaver::class);
$logSaverMock->shouldReceive('info')
->with('Starting article discovery for all active feeds')
->once();
$logSaverMock->shouldReceive('info')
->with('Article discovery jobs dispatched for all active feeds')
->once();
2025-08-10 15:46:20 +02:00
$job = new ArticleDiscoveryJob();
// Act
2025-08-15 02:50:42 +02:00
$job->handle($logSaverMock);
2025-08-10 15:46:20 +02:00
// Assert - Should complete without skipping
$this->assertTrue(true); // Job completes without error
}
public function test_job_implements_should_queue(): void
{
// Arrange
$job = new ArticleDiscoveryJob();
// Assert
$this->assertInstanceOf(\Illuminate\Contracts\Queue\ShouldQueue::class, $job);
}
public function test_job_uses_queueable_trait(): void
{
// Arrange
$job = new ArticleDiscoveryJob();
// Assert
$this->assertTrue(method_exists($job, 'onQueue'));
$this->assertTrue(method_exists($job, 'onConnection'));
$this->assertTrue(method_exists($job, 'delay'));
}
public function test_handle_logs_appropriate_messages(): void
{
// This test verifies that the job calls the logging methods
// The actual logging is tested in the LogSaver tests
2025-08-15 02:50:42 +02:00
2025-08-10 15:46:20 +02:00
// Arrange
2025-08-15 02:50:42 +02:00
// Mock LogSaver
$logSaverMock = Mockery::mock(LogSaver::class);
$logSaverMock->shouldReceive('info')
->with('Starting article discovery for all active feeds')
->once();
$logSaverMock->shouldReceive('info')
->with('Article discovery jobs dispatched for all active feeds')
->once();
2025-08-10 15:46:20 +02:00
$job = new ArticleDiscoveryJob();
// Act - Should not throw any exceptions
2025-08-15 02:50:42 +02:00
$job->handle($logSaverMock);
2025-08-10 15:46:20 +02:00
// Assert - Job completes successfully
$this->assertTrue(true);
}
2025-08-15 02:50:42 +02:00
protected function tearDown(): void
{
Mockery::close();
parent::tearDown();
}
}