createNewsPost(); $unpublished = $this->createNewsPost(['is_published' => false, 'published_at' => null]); $response = $this->getJson('/api/news'); $response->assertStatus(200) ->assertJsonFragment(['id' => $published->id]); $ids = collect($response->json('data'))->pluck('id')->all(); $this->assertFalse(in_array($unpublished->id, $ids, true)); } public function test_show_returns_404_for_unpublished(): void { $news = $this->createNewsPost(['is_published' => false, 'published_at' => null]); $this->getJson("/api/news/{$news->slug}") ->assertStatus(404); } public function test_admin_can_create_update_and_delete_news(): void { $this->actingAsAdmin(); $createResponse = $this->postJson('/api/news', [ 'title' => ['cs' => 'Novinka', 'en' => 'News'], 'content' => ['cs' => 'Obsah', 'en' => 'Content'], 'excerpt' => ['cs' => 'Krátce', 'en' => 'Short'], 'is_published' => true, ]); $createResponse->assertStatus(201); $slug = $createResponse->json('slug'); $updateResponse = $this->putJson("/api/news/{$slug}", [ 'title' => ['cs' => 'Novinka 2', 'en' => 'News 2'], 'content' => ['cs' => 'Obsah', 'en' => 'Content'], 'excerpt' => ['cs' => 'Krátce', 'en' => 'Short'], ]); $updateResponse->assertStatus(200) ->assertJsonStructure(['slug']); $updatedSlug = $updateResponse->json('slug'); $this->deleteJson("/api/news/{$updatedSlug}") ->assertStatus(204); } public function test_non_admin_cannot_create_news(): void { $this->actingAsUser(); $this->postJson('/api/news', [ 'title' => ['cs' => 'Novinka', 'en' => 'News'], 'content' => ['cs' => 'Obsah', 'en' => 'Content'], 'excerpt' => ['cs' => 'Krátce', 'en' => 'Short'], ])->assertStatus(403); } }