Http::response('
Test content with Belgium news', 200) ]); $feed = Feed::factory()->create(); $article = Article::factory()->create([ 'feed_id' => $feed->id, 'url' => 'https://example.com/article', 'approval_status' => 'pending' ]); $result = ValidationService::validate($article); $this->assertInstanceOf(Article::class, $result); $this->assertContains($result->approval_status, ['pending', 'approved', 'rejected']); } public function test_validate_marks_article_invalid_when_missing_data(): void { // Mock HTTP requests to return HTML without article content Http::fake([ 'https://invalid-url-without-parser.com/article' => Http::response('Empty', 200) ]); $feed = Feed::factory()->create(); $article = Article::factory()->create([ 'feed_id' => $feed->id, 'url' => 'https://invalid-url-without-parser.com/article', 'approval_status' => 'pending' ]); $result = ValidationService::validate($article); $this->assertEquals('rejected', $result->approval_status); } public function test_validate_with_supported_article_content(): void { // Mock HTTP requests Http::fake([ 'https://example.com/article' => Http::response('Article content', 200) ]); $feed = Feed::factory()->create(); $article = Article::factory()->create([ 'feed_id' => $feed->id, 'url' => 'https://example.com/article', 'approval_status' => 'pending' ]); $result = ValidationService::validate($article); // Since we can't fetch real content in tests, it should be marked rejected $this->assertEquals('rejected', $result->approval_status); } public function test_validate_updates_article_in_database(): void { // Mock HTTP requests Http::fake([ 'https://example.com/article' => Http::response('Article content', 200) ]); $feed = Feed::factory()->create(); $article = Article::factory()->create([ 'feed_id' => $feed->id, 'url' => 'https://example.com/article', 'approval_status' => 'pending' ]); $originalId = $article->id; ValidationService::validate($article); // Check that the article was updated in the database $updatedArticle = Article::find($originalId); $this->assertContains($updatedArticle->approval_status, ['pending', 'approved', 'rejected']); } public function test_validate_handles_article_with_existing_validation(): void { // Mock HTTP requests Http::fake([ 'https://example.com/article' => Http::response('Article content', 200) ]); $feed = Feed::factory()->create(); $article = Article::factory()->create([ 'feed_id' => $feed->id, 'url' => 'https://example.com/article', 'approval_status' => 'approved' ]); $originalApprovalStatus = $article->approval_status; $result = ValidationService::validate($article); // Should re-validate - status may change based on content validation $this->assertContains($result->approval_status, ['pending', 'approved', 'rejected']); } public function test_validate_keyword_checking_logic(): void { // Mock HTTP requests with content that contains Belgian keywords Http::fake([ 'https://example.com/article-about-bart-de-wever' => Http::response( '