rank_ideas( $ideas ); $this->assertSame( 'High Score', $ranked[0]->get_title() ); $this->assertSame( 'Mid Score', $ranked[1]->get_title() ); $this->assertSame( 'Low Score', $ranked[2]->get_title() ); } /** * Test rank_ideas limits output to requested count. */ public function test_rank_ideas_limits_results(): void { $ideas = []; for ( $i = 0; $i < 20; $i++ ) { $ideas[] = new \PRAutoBlogger_Article_Idea( "Idea {$i}", 'Description', [], 'cat', (float) $i ); } $scorer = new \PRAutoBlogger_Idea_Scorer(); $ranked = $scorer->rank_ideas( $ideas, 5 ); $this->assertCount( 5, $ranked ); // Should be the top 5 by score. $this->assertSame( 'Idea 19', $ranked[0]->get_title() ); } /** * Test deduplicate removes ideas with similar titles. */ public function test_deduplicate_removes_similar_titles(): void { $ideas = [ new \PRAutoBlogger_Article_Idea( 'BPC-157 Benefits for Gut Health', 'Desc', [], 'cat', 80.0 ), new \PRAutoBlogger_Article_Idea( 'BPC-157 Benefits for Gut Health', 'Different desc', [], 'cat', 75.0 ), new \PRAutoBlogger_Article_Idea( 'Thymosin Beta-4 Research Update', 'Desc', [], 'cat', 70.0 ), ]; $scorer = new \PRAutoBlogger_Idea_Scorer(); $deduplicated = $scorer->deduplicate( $ideas ); $this->assertCount( 2, $deduplicated ); } /** * Test deduplicate keeps the higher-scored duplicate. */ public function test_deduplicate_keeps_higher_score(): void { $ideas = [ new \PRAutoBlogger_Article_Idea( 'Same Title Here', 'Low version', [], 'cat', 40.0 ), new \PRAutoBlogger_Article_Idea( 'Same Title Here', 'High version', [], 'cat', 90.0 ), ]; $scorer = new \PRAutoBlogger_Idea_Scorer(); $deduplicated = $scorer->deduplicate( $ideas ); $this->assertCount( 1, $deduplicated ); $this->assertSame( 90.0, $deduplicated[0]->get_score() ); } /** * Test rank_ideas handles empty input. */ public function test_rank_ideas_handles_empty_input(): void { $scorer = new \PRAutoBlogger_Idea_Scorer(); $ranked = $scorer->rank_ideas( [] ); $this->assertIsArray( $ranked ); $this->assertEmpty( $ranked ); } /** * Test rank_ideas handles single idea. */ public function test_rank_ideas_handles_single_idea(): void { $ideas = [ new \PRAutoBlogger_Article_Idea( 'Only Idea', 'Desc', [], 'cat', 50.0 ), ]; $scorer = new \PRAutoBlogger_Idea_Scorer(); $ranked = $scorer->rank_ideas( $ideas ); $this->assertCount( 1, $ranked ); $this->assertSame( 'Only Idea', $ranked[0]->get_title() ); } }