assertIsArray( $result ); $this->assertEmpty( $result ); } public function test_get_summary_when_clean(): void { $summary = WPDO_Conflict_Monitor::get_summary(); $this->assertSame( 0, $summary['total'] ); $this->assertSame( 0, $summary['hook_overlap'] ); $this->assertSame( 0, $summary['uaepg_overlap'] ); } public function test_get_all_conflicts_lazy_scans(): void { // First call populates the cache. $first = WPDO_Conflict_Monitor::get_all_conflicts(); $this->assertIsArray( $first ); // Subsequent calls return the same reference (cached). $second = WPDO_Conflict_Monitor::get_all_conflicts(); $this->assertSame( $first, $second ); } public function test_reset_cache_forces_rescan(): void { WPDO_Conflict_Monitor::scan(); WPDO_Conflict_Monitor::reset_cache(); // Should not throw and should return empty (still no conflicts). $this->assertSame( array(), WPDO_Conflict_Monitor::scan() ); } public function test_summary_keys_always_present(): void { $summary = WPDO_Conflict_Monitor::get_summary(); $this->assertArrayHasKey( 'total', $summary ); $this->assertArrayHasKey( 'hook_overlap', $summary ); $this->assertArrayHasKey( 'uaepg_overlap', $summary ); } public function test_admin_notice_is_silent_when_no_conflicts(): void { ob_start(); WPDO_Conflict_Monitor::maybe_render_admin_notice(); $output = ob_get_clean(); $this->assertSame( '', $output ); } public function test_admin_bar_is_silent_when_no_conflicts(): void { // Pass a valid object stub to admin_bar handler — should no-op when count = 0. $stub = new class() { public array $nodes = array(); public function add_node( array $node ): void { $this->nodes[] = $node; } }; WPDO_Conflict_Monitor::maybe_render_admin_bar( $stub ); $this->assertCount( 0, $stub->nodes ); } }