260 lines
299 KiB
HTML
260 lines
299 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Code Coverage for /var/www/html/backend/app/Providers/AppServiceProvider.php</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<link href="../_css/bootstrap.min.css?v=11.0.10" rel="stylesheet" type="text/css">
|
|
<link href="../_css/octicons.css?v=11.0.10" rel="stylesheet" type="text/css">
|
|
<link href="../_css/style.css?v=11.0.10" rel="stylesheet" type="text/css">
|
|
<link href="../_css/custom.css" rel="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<nav aria-label="breadcrumb">
|
|
<ol class="breadcrumb">
|
|
<li class="breadcrumb-item"><a href="../index.html">/var/www/html/backend/app</a></li>
|
|
<li class="breadcrumb-item"><a href="index.html">Providers</a></li>
|
|
<li class="breadcrumb-item active">AppServiceProvider.php</li>
|
|
|
|
</ol>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
<div class="container-fluid">
|
|
<div class="table-responsive">
|
|
<table class="table table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<td> </td>
|
|
<td colspan="10"><div align="center"><strong>Code Coverage</strong></div></td>
|
|
</tr>
|
|
<tr>
|
|
<td> </td>
|
|
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
|
|
<td colspan="4"><div align="center"><strong>Functions and Methods</strong></div></td>
|
|
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="warning">Total</td>
|
|
<td class="warning big"> <div class="progress">
|
|
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="82.76" aria-valuemin="0" aria-valuemax="100" style="width: 82.76%">
|
|
<span class="visually-hidden">82.76% covered (warning)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="warning small"><div align="right">82.76%</div></td>
|
|
<td class="warning small"><div align="right">24 / 29</div></td>
|
|
<td class="danger big"> <div class="progress">
|
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="33.33" aria-valuemin="0" aria-valuemax="100" style="width: 33.33%">
|
|
<span class="visually-hidden">33.33% covered (danger)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="danger small"><div align="right">33.33%</div></td>
|
|
<td class="danger small"><div align="right">1 / 3</div></td>
|
|
<td class="danger small"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></td>
|
|
<td class="danger big"> <div class="progress">
|
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
|
|
<span class="visually-hidden">0.00% covered (danger)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="danger small"><div align="right">0.00%</div></td>
|
|
<td class="danger small"><div align="right">0 / 1</div></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="warning"><abbr title="App\Providers\AppServiceProvider">AppServiceProvider</abbr></td>
|
|
<td class="warning big"> <div class="progress">
|
|
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="82.76" aria-valuemin="0" aria-valuemax="100" style="width: 82.76%">
|
|
<span class="visually-hidden">82.76% covered (warning)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="warning small"><div align="right">82.76%</div></td>
|
|
<td class="warning small"><div align="right">24 / 29</div></td>
|
|
<td class="danger big"> <div class="progress">
|
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="33.33" aria-valuemin="0" aria-valuemax="100" style="width: 33.33%">
|
|
<span class="visually-hidden">33.33% covered (danger)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="danger small"><div align="right">33.33%</div></td>
|
|
<td class="danger small"><div align="right">1 / 3</div></td>
|
|
<td class="danger small">6.18</td>
|
|
<td class="danger big"> <div class="progress">
|
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
|
|
<span class="visually-hidden">0.00% covered (danger)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="danger small"><div align="right">0.00%</div></td>
|
|
<td class="danger small"><div align="right">0 / 1</div></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="success"> <a href="#17"><abbr title="register(): void">register</abbr></a></td>
|
|
<td class="success big"> <div class="progress">
|
|
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
|
|
<span class="visually-hidden">100.00% covered (success)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="success small"><div align="right">100.00%</div></td>
|
|
<td class="success small"><div align="right">1 / 1</div></td>
|
|
<td class="success big"> <div class="progress">
|
|
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
|
|
<span class="visually-hidden">100.00% covered (success)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="success small"><div align="right">100.00%</div></td>
|
|
<td class="success small"><div align="right">1 / 1</div></td>
|
|
<td class="success small">1</td>
|
|
<td class="success" colspan="3"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="success"> <a href="#21"><abbr title="boot(): void">boot</abbr></a></td>
|
|
<td class="success big"> <div class="progress">
|
|
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="92.00" aria-valuemin="0" aria-valuemax="100" style="width: 92.00%">
|
|
<span class="visually-hidden">92.00% covered (success)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="success small"><div align="right">92.00%</div></td>
|
|
<td class="success small"><div align="right">23 / 25</div></td>
|
|
<td class="danger big"> <div class="progress">
|
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
|
|
<span class="visually-hidden">0.00% covered (danger)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="danger small"><div align="right">0.00%</div></td>
|
|
<td class="danger small"><div align="right">0 / 1</div></td>
|
|
<td class="danger small">1.00</td>
|
|
<td class="danger" colspan="3"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="danger"> <a href="#56"><abbr title="mapExceptionToLogLevel(Throwable $exception): App\LogLevelEnum">mapExceptionToLogLevel</abbr></a></td>
|
|
<td class="danger big"> <div class="progress">
|
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
|
|
<span class="visually-hidden">0.00% covered (danger)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="danger small"><div align="right">0.00%</div></td>
|
|
<td class="danger small"><div align="right">0 / 3</div></td>
|
|
<td class="danger big"> <div class="progress">
|
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
|
|
<span class="visually-hidden">0.00% covered (danger)</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="danger small"><div align="right">0.00%</div></td>
|
|
<td class="danger small"><div align="right">0 / 1</div></td>
|
|
<td class="danger small">20</td>
|
|
<td class="danger" colspan="3"></td>
|
|
</tr>
|
|
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<table id="code" class="table table-borderless table-condensed">
|
|
<tbody>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="1" href="#1">1</a></td><td class="col-11 codeLine"><span class="default"><?php</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="2" href="#2">2</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="3" href="#3">3</a></td><td class="col-11 codeLine"><span class="keyword">namespace</span><span class="default"> </span><span class="default">App\Providers</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="4" href="#4">4</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="5" href="#5">5</a></td><td class="col-11 codeLine"><span class="keyword">use</span><span class="default"> </span><span class="default">App\Events\ExceptionOccurred</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="6" href="#6">6</a></td><td class="col-11 codeLine"><span class="keyword">use</span><span class="default"> </span><span class="default">App\Listeners\LogExceptionToDatabase</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="7" href="#7">7</a></td><td class="col-11 codeLine"><span class="keyword">use</span><span class="default"> </span><span class="default">App\LogLevelEnum</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="8" href="#8">8</a></td><td class="col-11 codeLine"><span class="keyword">use</span><span class="default"> </span><span class="default">Error</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="9" href="#9">9</a></td><td class="col-11 codeLine"><span class="keyword">use</span><span class="default"> </span><span class="default">Illuminate\Contracts\Debug\ExceptionHandler</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="10" href="#10">10</a></td><td class="col-11 codeLine"><span class="keyword">use</span><span class="default"> </span><span class="default">Illuminate\Support\Facades\Event</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="11" href="#11">11</a></td><td class="col-11 codeLine"><span class="keyword">use</span><span class="default"> </span><span class="default">Illuminate\Support\ServiceProvider</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="12" href="#12">12</a></td><td class="col-11 codeLine"><span class="keyword">use</span><span class="default"> </span><span class="default">InvalidArgumentException</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="13" href="#13">13</a></td><td class="col-11 codeLine"><span class="keyword">use</span><span class="default"> </span><span class="default">Throwable</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="14" href="#14">14</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="15" href="#15">15</a></td><td class="col-11 codeLine"><span class="keyword">class</span><span class="default"> </span><span class="default">AppServiceProvider</span><span class="default"> </span><span class="keyword">extends</span><span class="default"> </span><span class="default">ServiceProvider</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="16" href="#16">16</a></td><td class="col-11 codeLine"><span class="keyword">{</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="17" href="#17">17</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">register</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">void</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="18" href="#18">18</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">{</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 19" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="19" href="#19">19</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="20" href="#20">20</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="21" href="#21">21</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">boot</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">void</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="22" href="#22">22</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">{</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 23" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="23" href="#23">23</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">Event</span><span class="default">::</span><span class="default">listen</span><span class="keyword">(</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 24" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="24" href="#24">24</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">ExceptionOccurred</span><span class="default">::</span><span class="default">class</span><span class="keyword">,</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 25" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="25" href="#25">25</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">LogExceptionToDatabase</span><span class="default">::</span><span class="default">class</span><span class="keyword">,</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 26" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="26" href="#26">26</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="27" href="#27">27</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 28" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="28" href="#28">28</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">Event</span><span class="default">::</span><span class="default">listen</span><span class="keyword">(</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 29" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="29" href="#29">29</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">\App\Events\NewArticleFetched</span><span class="default">::</span><span class="default">class</span><span class="keyword">,</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 30" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="30" href="#30">30</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">\App\Listeners\ValidateArticleListener</span><span class="default">::</span><span class="default">class</span><span class="keyword">,</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 31" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="31" href="#31">31</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="32" href="#32">32</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 33" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="33" href="#33">33</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">Event</span><span class="default">::</span><span class="default">listen</span><span class="keyword">(</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 34" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="34" href="#34">34</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">\App\Events\ArticleApproved</span><span class="default">::</span><span class="default">class</span><span class="keyword">,</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 35" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="35" href="#35">35</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">\App\Listeners\PublishApprovedArticle</span><span class="default">::</span><span class="default">class</span><span class="keyword">,</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 36" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="36" href="#36">36</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="37" href="#37">37</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 38" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="38" href="#38">38</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">Event</span><span class="default">::</span><span class="default">listen</span><span class="keyword">(</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 39" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="39" href="#39">39</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">\App\Events\ArticleReadyToPublish</span><span class="default">::</span><span class="default">class</span><span class="keyword">,</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 40" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="40" href="#40">40</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">\App\Listeners\PublishArticle</span><span class="default">::</span><span class="default">class</span><span class="keyword">,</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 41" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="41" href="#41">41</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="42" href="#42">42</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 43" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="43" href="#43">43</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">Event</span><span class="default">::</span><span class="default">listen</span><span class="keyword">(</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 44" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="44" href="#44">44</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">\App\Events\ExceptionLogged</span><span class="default">::</span><span class="default">class</span><span class="keyword">,</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 45" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="45" href="#45">45</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">\App\Listeners\LogExceptionToDatabase</span><span class="default">::</span><span class="default">class</span><span class="keyword">,</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 46" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="46" href="#46">46</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="47" href="#47">47</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 48" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="48" href="#48">48</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">app</span><span class="keyword">(</span><span class="keyword">)</span><span class="default">-></span><span class="default">make</span><span class="keyword">(</span><span class="default">ExceptionHandler</span><span class="default">::</span><span class="default">class</span><span class="keyword">)</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 49" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="49" href="#49">49</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">-></span><span class="default">reportable</span><span class="keyword">(</span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">Throwable</span><span class="default"> </span><span class="default">$e</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
|
<tr class="danger d-flex"><td class="col-1 text-end"><a id="50" href="#50">50</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$level</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">mapExceptionToLogLevel</span><span class="keyword">(</span><span class="default">$e</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="51" href="#51">51</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class="danger d-flex"><td class="col-1 text-end"><a id="52" href="#52">52</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">ExceptionOccurred</span><span class="default">::</span><span class="default">dispatch</span><span class="keyword">(</span><span class="default">$e</span><span class="keyword">,</span><span class="default"> </span><span class="default">$level</span><span class="keyword">,</span><span class="default"> </span><span class="default">$e</span><span class="default">-></span><span class="default">getMessage</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
|
<tr class="covered-by-large-tests popin d-flex"><td data-bs-title="79 tests cover line 53" data-bs-content="<ul><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_feed_returns_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_rss_feed_returns_empty_collection</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_website_feed_handles_no_parser</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_get_articles_from_unsupported_feed_type</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_returns_array</li><li class="covered-by-large-tests">Tests\Unit\Services\ArticleFetcherTest::test_fetch_article_data_handles_invalid_url</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_today_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_week_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_with_all_time_period</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_calculates_percentage_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_stats_handles_zero_articles</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_available_periods_returns_correct_options</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_returns_correct_structure</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_counts_correctly</li><li class="covered-by-large-tests">Tests\Unit\Services\DashboardStatsServiceTest::test_get_system_stats_handles_empty_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_returns_article_with_validation_status</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_marks_article_invalid_when_missing_data</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_with_supported_article_content</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_updates_article_in_database</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_handles_article_with_existing_validation</li><li class="covered-by-large-tests">Tests\Unit\Services\ValidationServiceTest::test_validate_keyword_checking_logic</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_approve_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_articles_reject_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_channels_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_feeds_toggle_endpoint_works</li><li class="danger">Tests\Feature\ApiEndpointRegressionTest::test_routing_toggle_endpoint_works</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_runs_successfully_when_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_no_active_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist</li><li class="covered-by-large-tests">Tests\Feature\ArticleDiscoveryCommandTest::test_command_logs_when_no_feeds_available</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_skips_already_published_articles</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_calls_publishing_service</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_article_ready_to_publish_event_integration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publishing_prevents_duplicate_publications</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_article_listener_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_publish_to_lemmy_job_has_correct_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\ArticlePublishingTest::test_multiple_articles_can_be_queued_independently</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_approval_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_article_rejection_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_channel_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_feed_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_routing_management_permissions</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_article_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_platform_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_channel_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_invalid_feed_operations_handle_gracefully</li><li class="danger">Tests\Feature\AuthenticationAndAuthorizationTest::test_csrf_protection_on_post_requests</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_user_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_platform_instance_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_article_model_creates_successfully</li><li class="danger">Tests\Feature\DatabaseIntegrationTest::test_article_publication_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_route_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_log_model_creates_successfully</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_feed_articles_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_language_platform_instances_relationship</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_model_soft_deletes_work_correctly</li><li class="covered-by-large-tests">Tests\Feature\DatabaseIntegrationTest::test_database_constraints_are_enforced</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_discovery_job_processes_successfully</li><li class="danger">Tests\Feature\JobsAndEventsTest::test_article_discovery_for_feed_job_processes_feed</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_to_lemmy_job_has_correct_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_new_article_fetched_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_approved_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_article_ready_to_publish_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_occurred_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_exception_logged_event_is_dispatched</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_validate_article_listener_processes_new_article</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_approved_article_listener_queues_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_publish_article_listener_queues_publish_job</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_event_listener_registration_works</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_retry_configuration</li><li class="covered-by-large-tests">Tests\Feature\JobsAndEventsTest::test_job_queue_configuration</li><li class="covered-by-large-tests">Tests\Feature\NewArticleFetchedEventTest::test_new_article_fetched_event_dispatched_on_article_creation</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_validates_article_and_dispatches_ready_to_publish_event</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_already_validated_articles</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_skips_articles_with_existing_publication</li><li class="covered-by-large-tests">Tests\Feature\ValidateArticleListenerTest::test_listener_calls_validation_service</li></ul>" data-bs-placement="top" data-bs-html="true" class="col-1 text-end"><a id="53" href="#53">53</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="54" href="#54">54</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="55" href="#55">55</a></td><td class="col-11 codeLine"></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="56" href="#56">56</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">private</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">mapExceptionToLogLevel</span><span class="keyword">(</span><span class="default">Throwable</span><span class="default"> </span><span class="default">$exception</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">LogLevelEnum</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="57" href="#57">57</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">{</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="58" href="#58">58</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">match</span><span class="default"> </span><span class="keyword">(</span><span class="default">true</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
|
<tr class="danger d-flex"><td class="col-1 text-end"><a id="59" href="#59">59</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$exception</span><span class="default"> </span><span class="keyword">instanceof</span><span class="default"> </span><span class="default">Error</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">LogLevelEnum</span><span class="default">::</span><span class="default">CRITICAL</span><span class="keyword">,</span></td></tr>
|
|
<tr class="danger d-flex"><td class="col-1 text-end"><a id="60" href="#60">60</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$exception</span><span class="default"> </span><span class="keyword">instanceof</span><span class="default"> </span><span class="default">InvalidArgumentException</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">LogLevelEnum</span><span class="default">::</span><span class="default">WARNING</span><span class="keyword">,</span></td></tr>
|
|
<tr class="danger d-flex"><td class="col-1 text-end"><a id="61" href="#61">61</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">default</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">LogLevelEnum</span><span class="default">::</span><span class="default">ERROR</span><span class="keyword">,</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="62" href="#62">62</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">;</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="63" href="#63">63</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
|
<tr class=" d-flex"><td class="col-1 text-end"><a id="64" href="#64">64</a></td><td class="col-11 codeLine"><span class="keyword">}</span></td></tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<footer>
|
|
<hr/>
|
|
<h4>Legend</h4>
|
|
<p><span class="legend covered-by-small-tests">Covered by small (and larger) tests</span><span class="legend covered-by-medium-tests">Covered by medium (and large) tests</span><span class="legend covered-by-large-tests">Covered by large tests (and tests of unknown size)</span><span class="legend not-covered">Not covered</span><span class="legend not-coverable">Not coverable</span></p>
|
|
<p>
|
|
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 11.0.10</a> using <a href="https://www.php.net/" target="_top">PHP 8.4.10</a> and <a href="https://phpunit.de/">PHPUnit 11.5.28</a> at Sun Aug 3 18:47:16 UTC 2025.</small>
|
|
</p>
|
|
<a title="Back to the top" id="toplink" href="#">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 11L6 5l-6 6h12z"/></svg>
|
|
</a>
|
|
</footer>
|
|
</div>
|
|
<script src="../_js/jquery.min.js?v=11.0.10" type="text/javascript"></script>
|
|
<script src="../_js/bootstrap.bundle.min.js?v=11.0.10" type="text/javascript"></script>
|
|
<script src="../_js/file.js?v=11.0.10" type="text/javascript"></script>
|
|
</body>
|
|
</html>
|