assertSame( array(), $result ); } public function test_short_circuit_caches_negative_result(): void { WPDO_HivePress_Detector::detect(); // Second call should hit memo cache; verify identical. $this->assertSame( array(), WPDO_HivePress_Detector::detect() ); } public function test_catalog_returns_thirteen_known_addons(): void { $catalog = WPDO_HivePress_Detector::catalog(); $this->assertCount( 13, $catalog ); $this->assertArrayHasKey( 'hivepress', $catalog ); $this->assertArrayHasKey( 'hivepress-bookings', $catalog ); $this->assertArrayHasKey( 'hivepress-marketplace', $catalog ); $this->assertArrayHasKey( 'hivepress-statistics', $catalog ); } public function test_is_known_recognises_supported_addons(): void { $this->assertTrue( WPDO_HivePress_Detector::is_known( 'hivepress' ) ); $this->assertTrue( WPDO_HivePress_Detector::is_known( 'hivepress-reviews' ) ); $this->assertFalse( WPDO_HivePress_Detector::is_known( 'hivepress-frobnicator' ) ); $this->assertFalse( WPDO_HivePress_Detector::is_known( '' ) ); } public function test_bust_cache_clears_memo_and_transient(): void { WPDO_HivePress_Detector::detect(); // Seed transient with bogus data to verify bust clears it. $GLOBALS['_wp_options']['_transient_wpdo_hivepress_detector_cache'] = array( 'fake' => '9.9.9' ); WPDO_HivePress_Detector::bust_cache(); $this->assertArrayNotHasKey( '_transient_wpdo_hivepress_detector_cache', $GLOBALS['_wp_options'] ?? array() ); } public function test_detects_addon_via_active_plugin_signal(): void { // HivePress addons publish no class/const — they register via the // `hivepress/v1/extensions` filter and are detected purely by being // active plugins. Seed active_plugins with core + one addon and assert // both are detected even though no HivePress classes are declared. $GLOBALS['_wp_options']['active_plugins'] = array( 'hivepress/hivepress.php', 'hivepress-messages/hivepress-messages.php', ); WPDO_HivePress_Detector::reset_for_tests(); unset( $GLOBALS['_wp_options']['_transient_wpdo_hivepress_detector_cache'] ); $result = WPDO_HivePress_Detector::detect(); $this->assertArrayHasKey( 'hivepress', $result, 'core detected via active plugin' ); $this->assertArrayHasKey( 'hivepress-messages', $result, 'addon detected via active plugin' ); $this->assertArrayNotHasKey( 'hivepress-reviews', $result, 'inactive addon not detected' ); // Cleanup so other tests observe no active plugins. bust_cache() clears // BOTH the memo and the seeded transient (reset_for_tests clears only // the memo) — otherwise the cached detection leaks into later suites. unset( $GLOBALS['_wp_options']['active_plugins'] ); WPDO_HivePress_Detector::bust_cache(); } }