@@ -1304,7 +1304,10 @@ private function create_woocommerce_default_pages(): array {
13041304 *
13051305 * @dataProvider data_determine_suggested_product_type
13061306 */
1307- public function test_determine_suggested_product_type ( $ order_items , $ expected_product_type ) {
1307+ public function test_determine_suggested_product_type ( $ order_items , $ expected_product_type , $ evidence_types_flag_enabled = true ) {
1308+ // Set the feature flag option.
1309+ update_option ( WC_Payments_Features::DISPUTE_ADDITIONAL_EVIDENCE_TYPES , $ evidence_types_flag_enabled ? '1 ' : '0 ' );
1310+
13081311 // Create a mock order.
13091312 $ mock_order = $ this ->getMockBuilder ( 'WC_Order ' )
13101313 ->disableOriginalConstructor ()
@@ -1328,73 +1331,112 @@ public function test_determine_suggested_product_type( $order_items, $expected_p
13281331 */
13291332 public function data_determine_suggested_product_type () {
13301333 return [
1331- 'empty_order ' => [
1334+ 'empty_order ' => [
13321335 'order_items ' => [],
13331336 'expected_product_type ' => 'physical_product ' ,
13341337 ],
1335- 'single_physical_product ' => [
1338+ 'single_physical_product ' => [
13361339 'order_items ' => [
13371340 $ this ->create_mock_order_item_product ( false ), // not virtual.
13381341 ],
13391342 'expected_product_type ' => 'physical_product ' ,
13401343 ],
1341- 'single_virtual_product ' => [
1344+ 'single_virtual_product ' => [
13421345 'order_items ' => [
13431346 $ this ->create_mock_order_item_product ( true ), // virtual.
13441347 ],
13451348 'expected_product_type ' => 'digital_product_or_service ' ,
13461349 ],
1347- 'multiple_products_mixed ' => [
1350+ 'multiple_products_mixed ' => [
13481351 'order_items ' => [
13491352 $ this ->create_mock_order_item_product ( false ), // physical.
13501353 $ this ->create_mock_order_item_product ( true ), // virtual.
13511354 ],
13521355 'expected_product_type ' => 'multiple ' ,
13531356 ],
1354- 'multiple_physical_products ' => [
1357+ 'multiple_physical_products ' => [
13551358 'order_items ' => [
13561359 $ this ->create_mock_order_item_product ( false ), // physical.
13571360 $ this ->create_mock_order_item_product ( false ), // physical.
13581361 ],
13591362 'expected_product_type ' => 'multiple ' ,
13601363 ],
1361- 'multiple_virtual_products ' => [
1364+ 'multiple_virtual_products ' => [
13621365 'order_items ' => [
13631366 $ this ->create_mock_order_item_product ( true ), // virtual.
13641367 $ this ->create_mock_order_item_product ( true ), // virtual.
13651368 ],
13661369 'expected_product_type ' => 'multiple ' ,
13671370 ],
1368- 'order_with_non_product_items ' => [
1371+ 'order_with_non_product_items ' => [
13691372 'order_items ' => [
13701373 $ this ->create_mock_order_item_product ( true ), // virtual product.
13711374 $ this ->create_mock_order_item_shipping (), // shipping item (not a product).
13721375 ],
13731376 'expected_product_type ' => 'digital_product_or_service ' ,
13741377 ],
1375- 'order_with_invalid_product ' => [
1378+ 'order_with_invalid_product ' => [
13761379 'order_items ' => [
13771380 $ this ->create_mock_order_item_product ( true , false ), // virtual but invalid product.
13781381 ],
13791382 'expected_product_type ' => 'physical_product ' ,
13801383 ],
1384+ 'single_booking_product ' => [
1385+ 'order_items ' => [
1386+ $ this ->create_mock_order_item_product ( true , true , 'booking ' ), // booking product.
1387+ ],
1388+ 'expected_product_type ' => 'booking_reservation ' ,
1389+ 'evidence_types_flag_enabled ' => true ,
1390+ ],
1391+ 'single_booking_product_flag_off ' => [
1392+ 'order_items ' => [
1393+ $ this ->create_mock_order_item_product ( true , true , 'booking ' ), // booking product (virtual).
1394+ ],
1395+ 'expected_product_type ' => 'digital_product_or_service ' , // Falls back to virtual detection.
1396+ 'evidence_types_flag_enabled ' => false ,
1397+ ],
1398+ 'single_booking_product_physical_flag_off ' => [
1399+ 'order_items ' => [
1400+ $ this ->create_mock_order_item_product ( false , true , 'booking ' ), // booking product (not virtual).
1401+ ],
1402+ 'expected_product_type ' => 'physical_product ' , // Falls back to physical detection.
1403+ 'evidence_types_flag_enabled ' => false ,
1404+ ],
1405+ 'multiple_booking_products ' => [
1406+ 'order_items ' => [
1407+ $ this ->create_mock_order_item_product ( true , true , 'booking ' ), // booking.
1408+ $ this ->create_mock_order_item_product ( true , true , 'booking ' ), // booking.
1409+ ],
1410+ 'expected_product_type ' => 'multiple ' ,
1411+ 'evidence_types_flag_enabled ' => true ,
1412+ ],
1413+ 'booking_physical_mixed ' => [
1414+ 'order_items ' => [
1415+ $ this ->create_mock_order_item_product ( true , true , 'booking ' ), // booking.
1416+ $ this ->create_mock_order_item_product ( false , true , 'simple ' ), // physical.
1417+ ],
1418+ 'expected_product_type ' => 'multiple ' ,
1419+ 'evidence_types_flag_enabled ' => true ,
1420+ ],
13811421 ];
13821422 }
13831423
13841424 /**
13851425 * Create a mock order item product for testing.
13861426 *
1387- * @param bool $is_virtual Whether the product is virtual.
1388- * @param bool $is_valid Whether the product is valid (can be retrieved).
1427+ * @param bool $is_virtual Whether the product is virtual.
1428+ * @param bool $is_valid Whether the product is valid (can be retrieved).
1429+ * @param string $product_type The product type (e.g., 'simple', 'booking', 'variable').
13891430 * @return MockObject
13901431 */
1391- private function create_mock_order_item_product ( $ is_virtual = false , $ is_valid = true ) {
1432+ private function create_mock_order_item_product ( $ is_virtual = false , $ is_valid = true , $ product_type = ' simple ' ) {
13921433 $ mock_product = $ this ->getMockBuilder ( 'WC_Product ' )
13931434 ->disableOriginalConstructor ()
1394- ->setMethods ( [ 'is_virtual ' ] )
1435+ ->setMethods ( [ 'is_virtual ' , ' get_type ' ] )
13951436 ->getMock ();
13961437
13971438 $ mock_product ->method ( 'is_virtual ' )->willReturn ( $ is_virtual );
1439+ $ mock_product ->method ( 'get_type ' )->willReturn ( $ product_type );
13981440
13991441 $ mock_order_item = $ this ->getMockBuilder ( 'WC_Order_Item_Product ' )
14001442 ->disableOriginalConstructor ()
0 commit comments