> $items
*/
function fakeNewsFeed(array $items): void
{
Http::fake([
'projectsend.org/serve/news' => Http::response($items, 200),
]);
}
test('it fetches, sanitizes, and caches news items', function () {
fakeNewsFeed([
[
'title' => 'ProjectSend r2029 Released',
'date' => '28-03-2026',
'content' => "Some notes.\r\n\r\n changelog",
'link' => 'https://example.test/r2029',
],
]);
$this->artisan('projectsend:fetch-news')->assertSuccessful();
$items = app(NewsItems::class)->current();
expect($items)->toHaveCount(1)
->and($items[0]['title'])->toBe('ProjectSend r2029 Released')
->and($items[0]['date'])->toBe('2026-03-28')
->and($items[0]['link'])->toBe('https://example.test/r2029')
->and($items[0]['content'])->not->toContain('