@@ -29,7 +29,7 @@ public function setUp(): void {
2929 parent ::setUp ();
3030
3131 $ this ->plugin_detector = Mockery::mock ( PluginDetector::class );
32- $ this ->logger = Mockery::mock ( LoggerInterface::class );
32+ $ this ->logger = Mockery::mock ( LoggerInterface::class )-> shouldIgnoreMissing () ;
3333
3434 $ this ->sut = new ProductCustomizationDetector ( $ this ->plugin_detector , $ this ->logger );
3535 }
@@ -55,7 +55,6 @@ private function all_inactive(): array {
5555 */
5656 public function test_all_false_when_no_plugin_is_active (): void {
5757 $ this ->plugin_detector ->shouldReceive ( 'scan ' )->once ()->andReturn ( $ this ->all_inactive () );
58- $ this ->logger ->shouldNotReceive ( 'warning ' );
5958
6059 // An unconfigured Mockery mock throws on any unexpected method call,
6160 // so this also proves no check method ever touches the product.
@@ -75,15 +74,11 @@ public function test_logs_warning_and_returns_false_when_plugin_method_is_missin
7574 $ active_plugins [ $ plugin ] = true ;
7675
7776 $ this ->plugin_detector ->shouldReceive ( 'scan ' )->once ()->andReturn ( $ active_plugins );
78- $ this ->logger ->shouldReceive ( 'warning ' )
79- ->once ()
80- ->with (
81- Mockery::on (
82- static function ( string $ message ) use ( $ plugin ): bool {
83- return false !== strpos ( $ message , $ plugin ) && false !== strpos ( $ message , 'does not exist ' );
84- }
85- )
86- );
77+
78+ // Only asserts that a warning fires, not its exact wording: that's the
79+ // one observable signal that the plugin's API changed and detection
80+ // is silently degrading, so losing it should fail the test.
81+ $ this ->logger ->shouldReceive ( 'warning ' )->once ();
8782
8883 $ product = Mockery::mock ( 'WC_Product ' );
8984
0 commit comments