Bump WooCommerce minimum required PHP version to 7.3 and upgrade to PHPUnit 9 (#37366)

This commit is contained in:
Néstor Soriano 2023-03-24 13:42:46 +01:00 committed by GitHub
commit 2d9b4bdd46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
37 changed files with 1676 additions and 638 deletions

View File

@ -27,7 +27,7 @@
<!-- Configs -->
<config name="minimum_supported_wp_version" value="5.2" />
<config name="testVersion" value="7.2-" />
<config name="testVersion" value="7.3-" />
<!-- Rules -->
<rule ref="WooCommerce-Core" />

View File

@ -0,0 +1,4 @@
Significance: patch
Type: dev
Bump required PHP version to 7.3 and PHPUnit version to 9

View File

@ -14,7 +14,7 @@
}
],
"require": {
"php": ">=7.2",
"php": ">=7.3",
"automattic/jetpack-autoloader": "2.10.1",
"automattic/jetpack-constants": "1.5.1",
"composer/installers": "^1.9",
@ -27,8 +27,8 @@
"automattic/jetpack-changelogger": "^3.3.0",
"bamarni/composer-bin-plugin": "^1.4",
"dms/phpunit-arraysubset-asserts": "^0.4.0",
"phpunit/phpunit": "^8.0",
"sebastian/comparator": "3.0.3",
"phpunit/phpunit": "^9.0",
"sebastian/comparator": "^4.0",
"yoast/phpunit-polyfills": "^1.0"
},
"config": {
@ -40,7 +40,7 @@
},
"sort-packages": true,
"platform": {
"php": "7.2"
"php": "7.3"
},
"allow-plugins": {
"automattic/jetpack-autoloader": true,

File diff suppressed because it is too large Load Diff

View File

@ -57,7 +57,6 @@ class WC_Admin_Notices {
add_action( 'woocommerce_installed', array( __CLASS__, 'reset_admin_notices' ) );
add_action( 'wp_loaded', array( __CLASS__, 'add_redirect_download_method_notice' ) );
add_action( 'admin_init', array( __CLASS__, 'hide_notices' ), 20 );
self::add_action( 'admin_init', array( __CLASS__, 'maybe_remove_php73_required_notice' ) );
// @TODO: This prevents Action Scheduler async jobs from storing empty list of notices during WC installation.
// That could lead to OBW not starting and 'Run setup wizard' notice not appearing in WP admin, which we want
@ -120,53 +119,8 @@ class WC_Admin_Notices {
self::add_notice( 'template_files' );
self::add_min_version_notice();
self::add_maxmind_missing_license_key_notice();
self::maybe_add_php73_required_notice();
}
// phpcs:disable Generic.Commenting.Todo.TaskFound
/**
* Add an admin notice about the bump of the required PHP version in WooCommerce 7.7
* if the current PHP version is too old.
*
* TODO: Remove this method in WooCommerce 7.7.
*/
private static function maybe_add_php73_required_notice() {
if ( version_compare( phpversion(), '7.3', '>=' ) ) {
return;
}
self::add_custom_notice(
'php73_required_in_woo_77',
sprintf(
'%s%s',
sprintf(
'<h4>%s</h4>',
esc_html__( 'PHP version requirements will change soon', 'woocommerce' )
),
sprintf(
// translators: Placeholder is a URL.
wpautop( wp_kses_data( __( 'WooCommerce 7.7, scheduled for <b>May 2023</b>, will require PHP 7.3 or newer to work. Your server is currently running an older version of PHP, so this change will impact your store. Upgrading to at least PHP 8.0 is recommended. <b><a href="%s">Learn more about this change.</a></b>', 'woocommerce' ) ) ),
'https://developer.woocommerce.com/2023/01/10/new-requirement-for-woocommerce-7-7-php-7-3/'
)
)
);
}
/**
* Remove the admin notice about the bump of the required PHP version in WooCommerce 7.7
* if the current PHP version is good.
*
* TODO: Remove this method in WooCommerce 7.7.
*/
private static function maybe_remove_php73_required_notice() {
if ( version_compare( phpversion(), '7.3', '>=' ) && self::has_notice( 'php73_required_in_woo_77' ) ) {
self::remove_notice( 'php73_required_in_woo_77' );
}
}
// phpcs:enable Generic.Commenting.Todo.TaskFound
/**
* Show a notice.
*

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
bootstrap="tests/legacy/bootstrap.php"
backupGlobals="false"
colors="true"
@ -7,43 +7,43 @@
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
verbose="true"
>
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
<testsuites>
<testsuite name="WooCommerce Test Suite">
<directory suffix=".php">./tests/legacy/unit-tests</directory>
<directory suffix=".php">./tests/php</directory>
</testsuite>
</testsuites>
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<coverage includeUncoveredFiles="true">
<include>
<directory suffix=".php">./includes</directory>
<file>woocommerce.php</file>
<file>uninstall.php</file>
<exclude>
<directory suffix=".php">./includes/admin/helper/views</directory>
<directory suffix=".php">./includes/admin/importers/views</directory>
<directory suffix=".php">./includes/admin/meta-boxes/views</directory>
<directory suffix=".php">./includes/admin/plugin-updates/views</directory>
<directory suffix=".php">./includes/admin/views</directory>
<directory suffix=".php">./includes/api/legacy</directory>
<directory suffix=".php">./includes/api/v1</directory>
<directory suffix=".php">./includes/legacy</directory>
<directory suffix=".php">./includes/libraries</directory>
<directory suffix=".php">./includes/shipping/legacy-flat-rate</directory>
<directory suffix=".php">./includes/shipping/legacy-free-shipping</directory>
<directory suffix=".php">./includes/shipping/legacy-international-delivery</directory>
<directory suffix=".php">./includes/shipping/legacy-local-delivery</directory>
<directory suffix=".php">./includes/shipping/legacy-local-pickup</directory>
<directory suffix=".php">./includes/updates</directory>
<directory suffix=".php">./includes/vendor</directory>
<directory suffix=".php">./includes/widgets</directory>
<directory suffix=".php">./packages</directory>
<directory suffix=".php">./src</directory>
<directory suffix=".php">./vendor</directory>
<file>./includes/wc-deprecated-functions.php</file>
<file>./includes/wc-template-hooks.php</file>
<file>./includes/wc-widget-functions.php</file>
</exclude>
</whitelist>
</filter>
<file>woocommerce.php</file>
<file>uninstall.php</file>
</include>
<exclude>
<directory suffix=".php">./includes/admin/helper/views</directory>
<directory suffix=".php">./includes/admin/importers/views</directory>
<directory suffix=".php">./includes/admin/meta-boxes/views</directory>
<directory suffix=".php">./includes/admin/plugin-updates/views</directory>
<directory suffix=".php">./includes/admin/views</directory>
<directory suffix=".php">./includes/api/legacy</directory>
<directory suffix=".php">./includes/api/v1</directory>
<directory suffix=".php">./includes/legacy</directory>
<directory suffix=".php">./includes/libraries</directory>
<directory suffix=".php">./includes/shipping/legacy-flat-rate</directory>
<directory suffix=".php">./includes/shipping/legacy-free-shipping</directory>
<directory suffix=".php">./includes/shipping/legacy-international-delivery</directory>
<directory suffix=".php">./includes/shipping/legacy-local-delivery</directory>
<directory suffix=".php">./includes/shipping/legacy-local-pickup</directory>
<directory suffix=".php">./includes/updates</directory>
<directory suffix=".php">./includes/vendor</directory>
<directory suffix=".php">./includes/widgets</directory>
<directory suffix=".php">./packages</directory>
<directory suffix=".php">./src</directory>
<directory suffix=".php">./vendor</directory>
<file>./includes/wc-deprecated-functions.php</file>
<file>./includes/wc-template-hooks.php</file>
<file>./includes/wc-widget-functions.php</file>
</exclude>
</coverage>
</phpunit>

View File

@ -20,6 +20,8 @@ use PHPUnit\Framework\Constraint\IsType;
*/
class WC_Unit_Test_Case extends WP_HTTP_TestCase {
public const DEFAULT_FLOAT_COMPARISON_DELTA = 1e-10;
/**
* Holds the WC_Unit_Test_Factory instance.
*
@ -390,6 +392,18 @@ class WC_Unit_Test_Case extends WP_HTTP_TestCase {
$this->assertEmpty( $events );
}
/**
* Assert that the difference between two floats is smaller than a given delta.
*
* @param float $expected The expected value.
* @param float $actual The actual value.
* @param float|null $delta The maximum allowed difference, defaults to DEFAULT_FLOAT_COMPARISON_DELTA.
* @param string $message An optional error message to use if the assertion fails.
*/
public function assertFloatEquals( $expected, $actual, ?float $delta = null, string $message = '' ) {
$this->assertEqualsWithDelta( $expected, $actual, $delta ?? self::DEFAULT_FLOAT_COMPARISON_DELTA, $message );
}
/**
* Mark test skipped when HPOS is enabled.
*

View File

@ -49,10 +49,10 @@ class WC_Tests_Admin_Dashboard extends WC_Unit_Test_Case {
$widget_output = $this->getActualOutput();
$this->assertRegExp( '/page\=wc-admin\&\#038\;path\=\%2Fanalytics\%2Frevenue/', $widget_output );
$this->assertRegExp( '/page\=wc-admin\&\#038\;filter\=single_product/', $widget_output );
$this->assertRegExp( '/page\=wc-admin\&\#038\;type\=lowstock/', $widget_output );
$this->assertRegExp( '/page\=wc-admin\&\#038\;type\=outofstock/', $widget_output );
$this->assertMatchesRegularExpression( '/page\=wc-admin\&\#038\;path\=\%2Fanalytics\%2Frevenue/', $widget_output );
$this->assertMatchesRegularExpression( '/page\=wc-admin\&\#038\;filter\=single_product/', $widget_output );
$this->assertMatchesRegularExpression( '/page\=wc-admin\&\#038\;type\=lowstock/', $widget_output );
$this->assertMatchesRegularExpression( '/page\=wc-admin\&\#038\;type\=outofstock/', $widget_output );
}
/**
@ -72,10 +72,10 @@ class WC_Tests_Admin_Dashboard extends WC_Unit_Test_Case {
( new WC_Admin_Dashboard() )->status_widget();
$widget_output = $this->getActualOutput();
$this->assertRegExp( '/page\=wc-reports\&\#038\;tab\=orders\&\#038\;range\=month/', $widget_output );
$this->assertRegExp( '/page\=wc-reports\&\#038\;tab\=orders\&\#038\;report\=sales_by_product/', $widget_output );
$this->assertRegExp( '/page\=wc-reports\&\#038\;tab\=stock\&\#038\;report\=low_in_stock/', $widget_output );
$this->assertRegExp( '/page\=wc-reports\&\#038\;tab\=stock\&\#038\;report\=out_of_stock/', $widget_output );
$this->assertMatchesRegularExpression( '/page\=wc-reports\&\#038\;tab\=orders\&\#038\;range\=month/', $widget_output );
$this->assertMatchesRegularExpression( '/page\=wc-reports\&\#038\;tab\=orders\&\#038\;report\=sales_by_product/', $widget_output );
$this->assertMatchesRegularExpression( '/page\=wc-reports\&\#038\;tab\=stock\&\#038\;report\=low_in_stock/', $widget_output );
$this->assertMatchesRegularExpression( '/page\=wc-reports\&\#038\;tab\=stock\&\#038\;report\=out_of_stock/', $widget_output );
remove_filter( 'woocommerce_admin_disabled', '__return_true' );
}

View File

@ -37,7 +37,7 @@ class WC_Test_WooCommerce extends WC_Unit_Test_Case {
* @since 2.2
*/
public function test_wc_instance() {
$this->assertClassHasStaticAttribute( '_instance', 'WooCommerce' );
$this->assertTrue( property_exists( WooCommerce::class, '_instance' ) );
}
/**

View File

@ -219,13 +219,13 @@ class WC_Tests_Formatting_Functions extends WC_Unit_Test_Case {
$this->assertEquals( 4.53592, wc_get_weight( 10, 'kg' ) );
$this->assertEquals( 4535.92, wc_get_weight( 10, 'g' ) );
$this->assertEquals( 10, wc_get_weight( 10, 'lbs' ) );
$this->assertEquals( 160.00004208, wc_get_weight( 10, 'oz' ) );
$this->assertFloatEquals( 160.00004208, wc_get_weight( 10, 'oz' ) );
// oz.
update_option( 'woocommerce_weight_unit', 'oz' );
$this->assertEquals( 0.283495, wc_get_weight( 10, 'kg' ) );
$this->assertEquals( 283.495, wc_get_weight( 10, 'g' ) );
$this->assertEquals( 0.6249987469, wc_get_weight( 10, 'lbs' ) );
$this->assertFloatEquals( 0.6249987469, wc_get_weight( 10, 'lbs' ) );
$this->assertEquals( 10, wc_get_weight( 10, 'oz' ) );
// Custom from unit.

View File

@ -184,7 +184,8 @@ class WC_Tests_Log_Handler_Email extends WC_Unit_Test_Case {
$handler->handle( time(), 'notice', '', array() );
$handler->send_log_email();
$this->assertObjectHasAttribute( 'body', $mailer->get_sent( 0 ) );
$this->assertTrue( property_exists( $mailer->get_sent( 0 ), 'body' ) );
}
/**
@ -206,7 +207,7 @@ class WC_Tests_Log_Handler_Email extends WC_Unit_Test_Case {
$handler->handle( time(), 'info', '', array() );
$handler->send_log_email();
$this->assertObjectHasAttribute( 'body', $mailer->get_sent( 0 ) );
$this->assertTrue( property_exists( $mailer->get_sent( 0 ), 'body' ) );
}
/**

View File

@ -1,4 +1,9 @@
<?php
/**
* Class WC_Tests_Log_Handler_File file.
*
* @package WooCommerce\Tests
*/
/**
* Class WC_Tests_Log_Handler_File
@ -7,6 +12,11 @@
*/
class WC_Tests_Log_Handler_File extends WC_Unit_Test_Case {
/**
* Runs after each test.
*
* @return void
*/
public function tearDown(): void {
$log_files = array(
'unit-tests',
@ -35,7 +45,14 @@ class WC_Tests_Log_Handler_File extends WC_Unit_Test_Case {
parent::tearDown();
}
/**
* Get the entire contents of a file.
*
* @param string $handle File path.
* @return false|string Contents of the file, or false on error.
*/
public function read_content( $handle ) {
// phpcs:ignore WordPress.WP.AlternativeFunctions
return file_get_contents( WC_Log_Handler_File::get_log_file_path( $handle ) );
}
@ -84,7 +101,7 @@ class WC_Tests_Log_Handler_File extends WC_Unit_Test_Case {
$log_name = '_test_remove';
$handler->handle( time(), 'debug', 'debug', array( 'source' => $log_name ) );
$handler->remove( wc_get_log_file_name( $log_name ) );
$this->assertFileNotExists( WC_Log_Handler_File::get_log_file_path( $log_name ) );
$this->assertFileDoesNotExist( WC_Log_Handler_File::get_log_file_path( $log_name ) );
}
/**
@ -165,20 +182,21 @@ class WC_Tests_Log_Handler_File extends WC_Unit_Test_Case {
* @since 3.0.0
*/
public function test_log_rotate() {
// phpcs:disable WordPress.WP.AlternativeFunctions
// Handler with log size limit of 5mb
// Handler with log size limit of 5mb.
$handler = new WC_Log_Handler_File( 5 * 1024 * 1024 );
$time = time();
$log_name = '_test_log_rotate';
$base_log_file = WC_Log_Handler_File::get_log_file_path( $log_name );
// Create log file larger than 5mb to ensure log is rotated
// Create log file larger than 5mb to ensure log is rotated.
$handle = fopen( $base_log_file, 'w' );
fseek( $handle, 5 * 1024 * 1024 );
fwrite( $handle, '_base_log_file_contents_' );
fclose( $handle );
// Write some files to ensure they've rotated correctly
// Write some files to ensure they've rotated correctly.
for ( $i = 0; $i < 10; $i++ ) {
file_put_contents( WC_Log_Handler_File::get_log_file_path( $log_name . ".{$i}" ), $i ); // phpcs:ignore WordPress.VIP.FileSystemWritesDisallow.file_ops_file_put_contents
}
@ -188,14 +206,16 @@ class WC_Tests_Log_Handler_File extends WC_Unit_Test_Case {
$this->assertFileExists( WC_Log_Handler_File::get_log_file_path( $log_name ) );
// Ensure the handled log is correct
// Ensure the handled log is correct.
$this->assertStringEndsWith( 'EMERGENCY emergency' . PHP_EOL, $this->read_content( $log_name ) );
// Ensure other logs have rotated correctly
// Ensure other logs have rotated correctly.
$this->assertEquals( '_base_log_file_contents_', trim( $this->read_content( $log_name . '.0' ) ) );
for ( $i = 1; $i < 10; $i++ ) {
$this->assertEquals( $i - 1, $this->read_content( $log_name . ".{$i}" ) );
}
// phpcs:enable WordPress.WP.AlternativeFunctions
}
/**
@ -205,7 +225,7 @@ class WC_Tests_Log_Handler_File extends WC_Unit_Test_Case {
*/
public function test_get_log_file_path() {
$log_dir = trailingslashit( WC_LOG_DIR );
$date_suffix = date( 'Y-m-d', time() );
$date_suffix = gmdate( 'Y-m-d', time() );
$hash_name = sanitize_file_name( wp_hash( 'unit-tests' ) );
$this->assertEquals( $log_dir . 'unit-tests-' . $date_suffix . '-' . $hash_name . '.log', WC_Log_Handler_File::get_log_file_path( 'unit-tests' ) );
}

View File

@ -1,4 +1,9 @@
<?php
/**
* Class WC_Tests_Logger file.
*
* @package WooCommerce\Tests
*/
/**
* Class WC_Tests_Logger
@ -43,11 +48,13 @@ class WC_Tests_Logger extends WC_Unit_Test_Case {
* @since 2.4
*/
public function test_clear() {
// phpcs:disable WordPress.WP.AlternativeFunctions
$file = wc_get_log_file_path( 'unit-tests' );
file_put_contents( $file, 'Test file content.' ); // @codingStandardsIgnoreLine.
file_put_contents( $file, 'Test file content.' );
$log = new WC_Logger();
$log->clear( 'unit-tests' );
$this->assertEquals( '', file_get_contents( $file ) );
// phpcs:enable WordPress.WP.AlternativeFunctions
}
/**
@ -67,6 +74,8 @@ class WC_Tests_Logger extends WC_Unit_Test_Case {
* @since 3.0.0
*/
public function test_log() {
$this->expectNotToPerformAssertions();
$handler = $this->create_mock_handler();
$log = new WC_Logger( array( $handler ), 'debug' );
$log->log( 'debug', 'debug message' );
@ -121,6 +130,8 @@ class WC_Tests_Logger extends WC_Unit_Test_Case {
* @since 3.0.0
*/
public function test_level_methods() {
$this->expectNotToPerformAssertions();
$handler = $this->create_mock_handler();
$log = new WC_Logger( array( $handler ), 'debug' );
$log->debug( 'debug message' );
@ -160,29 +171,27 @@ class WC_Tests_Logger extends WC_Unit_Test_Case {
public function test_threshold_defaults() {
$time = time();
// Test no filtering by default
// Test no filtering by default.
delete_option( 'woocommerce_log_threshold' );
$handler = $this
->getMockBuilder( 'WC_Log_Handler_Interface' )
->setMethods( array( 'handle' ) )
->getMock();
$handler
->expects( $this->at( 0 ) )
->method( 'handle' )
->with(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'bad-level' ),
$this->equalTo( 'bad-level message' ),
$this->equalTo( array() )
);
$handler
->expects( $this->at( 1 ) )
->method( 'handle' )
->with(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'debug' ),
$this->equalTo( 'debug message' ),
$this->equalTo( array() )
->withConsecutive(
array(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'bad-level' ),
$this->equalTo( 'bad-level message' ),
$this->equalTo( array() ),
),
array(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'debug' ),
$this->equalTo( 'debug message' ),
$this->equalTo( array() ),
)
);
$log = new WC_Logger( array( $handler ) );
@ -192,7 +201,7 @@ class WC_Tests_Logger extends WC_Unit_Test_Case {
// Bad level also complains.
$this->setExpectedIncorrectUsage( 'WC_Logger::log' );
// Debug is lowest recognized level
// Debug is lowest recognized level.
$log->debug( 'debug message' );
}
@ -251,76 +260,56 @@ class WC_Tests_Logger extends WC_Unit_Test_Case {
->getMock();
$handler
->expects( $this->at( 0 ) )
->method( 'handle' )
->with(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'debug' ),
$this->equalTo( 'debug message' ),
$this->equalTo( array() )
);
$handler
->expects( $this->at( 1 ) )
->method( 'handle' )
->with(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'info' ),
$this->equalTo( 'info message' ),
$this->equalTo( array() )
);
$handler
->expects( $this->at( 2 ) )
->method( 'handle' )
->with(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'notice' ),
$this->equalTo( 'notice message' ),
$this->equalTo( array() )
);
$handler
->expects( $this->at( 3 ) )
->method( 'handle' )
->with(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'warning' ),
$this->equalTo( 'warning message' ),
$this->equalTo( array() )
);
$handler
->expects( $this->at( 4 ) )
->method( 'handle' )
->with(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'error' ),
$this->equalTo( 'error message' ),
$this->equalTo( array() )
);
$handler
->expects( $this->at( 5 ) )
->method( 'handle' )
->with(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'critical' ),
$this->equalTo( 'critical message' ),
$this->equalTo( array() )
);
$handler
->expects( $this->at( 6 ) )
->method( 'handle' )
->with(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'alert' ),
$this->equalTo( 'alert message' ),
$this->equalTo( array() )
);
$handler
->expects( $this->at( 7 ) )
->method( 'handle' )
->with(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'emergency' ),
$this->equalTo( 'emergency message' ),
$this->equalTo( array() )
->withConsecutive(
array(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'debug' ),
$this->equalTo( 'debug message' ),
$this->equalTo( array() ),
),
array(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'info' ),
$this->equalTo( 'info message' ),
$this->equalTo( array() ),
),
array(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'notice' ),
$this->equalTo( 'notice message' ),
$this->equalTo( array() ),
),
array(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'warning' ),
$this->equalTo( 'warning message' ),
$this->equalTo( array() ),
),
array(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'error' ),
$this->equalTo( 'error message' ),
$this->equalTo( array() ),
),
array(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'critical' ),
$this->equalTo( 'critical message' ),
$this->equalTo( array() ),
),
array(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'alert' ),
$this->equalTo( 'alert message' ),
$this->equalTo( array() ),
),
array(
$this->greaterThanOrEqual( $time ),
$this->equalTo( 'emergency' ),
$this->equalTo( 'emergency message' ),
$this->equalTo( array() ),
)
);
return $handler;

View File

@ -130,7 +130,7 @@ class WC_Tests_Order_Item_Product extends WC_Unit_Test_Case {
$product_item->set_order_id( $order->get_id() );
$expected_regex = '/download_file=.*&order=wc_order_.*&email=test%40woocommerce.com&key=100/';
$this->assertRegexp( $expected_regex, $product_item->get_item_download_url( 100 ) );
$this->assertMatchesRegularExpression( $expected_regex, $product_item->get_item_download_url( 100 ) );
}
/**

View File

@ -253,7 +253,7 @@ class WC_Tests_Order_Coupons extends WC_Unit_Test_Case {
$order->apply_coupon( 'test-coupon-2' );
$this->assertEquals( 401, $order->get_discount_total(), $order->get_discount_total() );
$this->assertEquals( ( 1000 - 401 ) * 1.1, $order->get_total(), $order->get_total() );
$this->assertFloatEquals( ( 1000 - 401 ) * 1.1, $order->get_total(), $order->get_total() );
}
/**

View File

@ -545,6 +545,7 @@ class WC_Tests_Product_Data_Store extends WC_Unit_Test_Case {
$sale_products = $product_store->get_on_sale_products();
$sale_product_ids = wp_list_pluck( $sale_products, 'id' );
$sale_product_ids = array_map( 'absint', $sale_product_ids );
$this->assertContains( $sale_product->get_id(), $sale_product_ids );
$this->assertNotContains( $not_sale_product->get_id(), $sale_product_ids );

View File

@ -5,6 +5,8 @@
* @package WooCommerce\Tests\Product
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* Data Functions.
*
@ -13,6 +15,8 @@
*/
class WC_Tests_Product_Data extends WC_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Test product setters and getters
*
@ -79,16 +83,15 @@ class WC_Tests_Product_Data extends WC_Unit_Test_Case {
$this->assertEquals( $value, $product->{"get_{$function}"}(), $function );
}
$this->assertCount( 1, $product->get_attributes() );
$this->assertContains(
current( $product->get_attributes() )->get_data(),
$this->assertArraySubset(
array(
'attribute_id' => 0,
'name' => 'Test Attribute',
'options' => array( 'Fish', 'Fingers' ),
'position' => 0,
'visible' => true,
'variation' => false,
)
'name' => 'Test Attribute',
'options' => array( 'Fish', 'Fingers' ),
'position' => 0,
'visible' => true,
'variation' => false,
),
current( $product->get_attributes() )->get_data()
);
$this->assertEquals( $product->get_date_on_sale_from()->getTimestamp(), 1475798400 );
$this->assertEquals( $product->get_date_on_sale_to()->getTimestamp(), 1477267200 );

View File

@ -4,9 +4,9 @@
* @package WooCommerce\Tests\Queue
*/
/**
* WC_Tests_Discounts.
*/
/**
* WC_Tests_Discounts.
*/
class WC_Tests_Queue extends WC_Unit_Test_Case {
/**
@ -35,21 +35,24 @@ class WC_Tests_Queue extends WC_Unit_Test_Case {
// Test that the action can be found.
$action_ids = $queue->search(
array(
'hook' => $hook,
'args' => $args,
'hook' => $hook,
'args' => $args,
'group' => $group,
),
'ids'
);
$action_ids = array_map( 'absint', $action_ids );
$this->assertContains( $single, $action_ids );
$action_ids = $queue->search(
array(
'hook' => $hook,
'hook' => $hook,
'search' => $unique_hash,
'group' => $group,
'group' => $group,
),
'ids'
);
$action_ids = array_map( 'absint', $action_ids );
$this->assertContains( $single, $action_ids );
// Schedule a recurring action.
@ -63,21 +66,24 @@ class WC_Tests_Queue extends WC_Unit_Test_Case {
// Test that the action can be found.
$action_ids = $queue->search(
array(
'hook' => $hook,
'args' => $args,
'hook' => $hook,
'args' => $args,
'group' => $group,
),
'ids'
);
$action_ids = array_map( 'absint', $action_ids );
$this->assertContains( $recurring, $action_ids );
$action_ids = $queue->search(
array(
'hook' => $hook,
'hook' => $hook,
'search' => $unique_hash,
'group' => $group,
'group' => $group,
),
'ids'
);
$action_ids = array_map( 'absint', $action_ids );
$this->assertContains( $recurring, $action_ids );
// Schedule a cron action on a daily midnight schedule starting at the next midnight.
@ -93,21 +99,24 @@ class WC_Tests_Queue extends WC_Unit_Test_Case {
// Test that the action can be found.
$action_ids = $queue->search(
array(
'hook' => $hook,
'args' => $args,
'hook' => $hook,
'args' => $args,
'group' => $group,
),
'ids'
);
$action_ids = array_map( 'absint', $action_ids );
$this->assertContains( $cron_action, $action_ids );
$action_ids = $queue->search(
array(
'hook' => $hook,
'hook' => $hook,
'search' => $unique_hash,
'group' => $group,
'group' => $group,
),
'ids'
);
$action_ids = array_map( 'absint', $action_ids );
$this->assertContains( $cron_action, $action_ids );
// Test wildcard search.

View File

@ -1,11 +1,25 @@
<?php
/**
* Tests for the coupons REST API.
*
* @package WooCommerce\Tests\API
* @since 3.0.0
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* Coupon API Tests
* @package WooCommerce\Tests\API
* @since 3.0.0
*/
class WC_Tests_API_Coupons_V2 extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Endpoint to use for the tests.
* @var WC_REST_Coupons_Controller
*/
protected $endpoint;
/**
@ -49,7 +63,18 @@ class WC_Tests_API_Coupons_V2 extends WC_REST_Unit_Test_Case {
$this->assertEquals( 200, $response->get_status() );
$this->assertEquals( 2, count( $coupons ) );
$this->assertContains(
$matching_coupon_data = current(
array_filter(
$coupons,
function( $coupon ) use ( $coupon_1 ) {
return $coupon['id'] === $coupon_1->get_id();
}
)
);
$this->assertIsArray( $matching_coupon_data );
$this->assertArraySubset(
array(
'id' => $coupon_1->get_id(),
'code' => 'dummycoupon-1',
@ -92,7 +117,7 @@ class WC_Tests_API_Coupons_V2 extends WC_REST_Unit_Test_Case {
),
),
),
$coupons
$matching_coupon_data
);
}

View File

@ -6,6 +6,8 @@
* @since 3.0.0
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* Tests for the Customers REST API.
*
@ -13,6 +15,7 @@
* @extends WC_REST_Unit_Test_Case
*/
class Customers_V2 extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Setup our test server, endpoints, and user info.
@ -58,7 +61,17 @@ class Customers_V2 extends WC_REST_Unit_Test_Case {
$this->assertEquals( 200, $response->get_status() );
$this->assertEquals( 2, count( $customers ) );
$this->assertContains(
$matching_customer_data = current(
array_filter(
$customers,
function( $customer ) use ( $customer_1 ) {
return $customer['id'] === $customer_1->get_id();
}
)
);
$this->assertIsArray( $matching_customer_data );
$this->assertArraySubset(
array(
'id' => $customer_1->get_id(),
'date_created' => wc_rest_prepare_date_response( $customer_1->get_date_created(), false ),
@ -113,7 +126,7 @@ class Customers_V2 extends WC_REST_Unit_Test_Case {
),
),
),
$customers
$matching_customer_data
);
}

View File

@ -6,10 +6,13 @@
* @since 3.0.0
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* Payment gateway test class.
*/
class Payment_Gateways_V2 extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Setup our test server, endpoints, and user info.
@ -47,7 +50,18 @@ class Payment_Gateways_V2 extends WC_REST_Unit_Test_Case {
$gateways = $response->get_data();
$this->assertEquals( 200, $response->get_status() );
$this->assertContains(
$matching_gateway_data = current(
array_filter(
$gateways,
function( $gateway ) {
return 'cheque' === $gateway['id'];
}
)
);
$this->assertIsArray( $matching_gateway_data );
$this->assertArraySubset(
array(
'id' => 'cheque',
'title' => 'Check payments',
@ -82,7 +96,7 @@ class Payment_Gateways_V2 extends WC_REST_Unit_Test_Case {
),
),
),
$gateways
$matching_gateway_data
);
}

View File

@ -6,10 +6,14 @@
* @since 3.0.0
*/
use Automattic\WooCommerce\RestApi\UnitTests\Helpers\ProductHelper;
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* Products_API_V2 class.
*/
class Products_API_V2 extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Setup our test server, endpoints, and user info.
@ -77,19 +81,20 @@ class Products_API_V2 extends WC_REST_Unit_Test_Case {
*/
public function test_get_product() {
wp_set_current_user( $this->user );
$simple = \Automattic\WooCommerce\RestApi\UnitTests\Helpers\ProductHelper::create_external_product();
$simple = ProductHelper::create_external_product();
$response = $this->server->dispatch( new WP_REST_Request( 'GET', '/wc/v2/products/' . $simple->get_id() ) );
$product = $response->get_data();
$this->assertEquals( 200, $response->get_status() );
$this->assertContains(
$this->assertArraySubset(
array(
'id' => $simple->get_id(),
'name' => 'Dummy External Product',
'type' => 'simple',
'type' => 'external',
'status' => 'publish',
'sku' => 'DUMMY EXTERNAL SKU',
'regular_price' => 10,
'regular_price' => '10',
),
$product
);

View File

@ -6,10 +6,13 @@
* @since 3.0.0
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* Class Settings_V2.
*/
class Settings_V2 extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Setup our test server, endpoints, and user info.
@ -50,7 +53,18 @@ class Settings_V2 extends WC_REST_Unit_Test_Case {
$this->assertEquals( 200, $response->get_status() );
$this->assertContains(
$this->assertEquals( 200, $response->get_status() );
$matching_settings_data = current(
array_filter(
$data,
function( $settings ) {
return 'test' === $settings['id'];
}
)
);
$this->assertIsArray( $matching_settings_data );
$this->assertArraySubset(
array(
'id' => 'test',
'label' => 'Test extension',
@ -65,10 +79,20 @@ class Settings_V2 extends WC_REST_Unit_Test_Case {
),
),
),
$data
$matching_settings_data
);
$this->assertContains(
$matching_settings_data = current(
array_filter(
$data,
function( $settings ) {
return 'sub-test' === $settings['id'];
}
)
);
$this->assertIsArray( $matching_settings_data );
$this->assertArraySubset(
array(
'id' => 'sub-test',
'label' => 'Sub test',
@ -83,7 +107,7 @@ class Settings_V2 extends WC_REST_Unit_Test_Case {
),
),
),
$data
$matching_settings_data
);
}

View File

@ -5,6 +5,8 @@
* @package Automattic/WooCommerce/Tests
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* System Status REST Tests.
*
@ -12,6 +14,7 @@
* @since 3.0
*/
class WC_Tests_REST_System_Status_V2 extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Setup our test server.
@ -251,7 +254,18 @@ class WC_Tests_REST_System_Status_V2 extends WC_REST_Unit_Test_Case {
$this->assertEquals( 200, $response->get_status() );
$this->assertEquals( count( $raw_tools ), count( $data ) );
$this->assertContains(
$matching_tool_data = current(
array_filter(
$data,
function( $tool ) {
return 'regenerate_thumbnails' === $tool['id'];
}
)
);
$this->assertIsArray( $matching_tool_data );
$this->assertArraySubset(
array(
'id' => 'regenerate_thumbnails',
'name' => 'Regenerate shop thumbnails',
@ -266,7 +280,7 @@ class WC_Tests_REST_System_Status_V2 extends WC_REST_Unit_Test_Case {
),
),
),
$data
$matching_tool_data
);
}

View File

@ -5,6 +5,8 @@
* @package WooCommerce\Tests\API
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
// phpcs:ignore Squiz.Commenting.FileComment.Missing
require_once __DIR__ . '/date-filtering.php';
@ -14,6 +16,7 @@ require_once __DIR__ . '/date-filtering.php';
* @since 3.5.0
*/
class WC_Tests_API_Coupons extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
use DateFilteringForCrudControllers;
/**
@ -62,7 +65,18 @@ class WC_Tests_API_Coupons extends WC_REST_Unit_Test_Case {
$this->assertEquals( 200, $response->get_status() );
$this->assertEquals( 2, count( $coupons ) );
$this->assertContains(
$matching_coupon_data = current(
array_filter(
$coupons,
function( $coupon ) use ( $coupon_1 ) {
return $coupon['id'] === $coupon_1->get_id();
}
)
);
$this->assertIsArray( $matching_coupon_data );
$this->assertArraySubset(
array(
'id' => $coupon_1->get_id(),
'code' => 'dummycoupon-1',
@ -105,7 +119,7 @@ class WC_Tests_API_Coupons extends WC_REST_Unit_Test_Case {
),
),
),
$coupons
$matching_coupon_data
);
}

View File

@ -6,6 +6,8 @@
* @since 3.5.0
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* Tests for the Customers REST API.
*
@ -13,6 +15,7 @@
* @extends WC_REST_Unit_Test_Case
*/
class Customers extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Setup our test server, endpoints, and user info.
@ -59,7 +62,17 @@ class Customers extends WC_REST_Unit_Test_Case {
$this->assertEquals( 200, $response->get_status() );
$this->assertEquals( 2, count( $customers ) );
$this->assertContains(
$matching_customer_data = current(
array_filter(
$customers,
function( $customer ) use ( $customer_1 ) {
return $customer['id'] === $customer_1->get_id();
}
)
);
$this->assertIsArray( $matching_customer_data );
$this->assertArraySubset(
array(
'id' => $customer_1->get_id(),
'date_created' => wc_rest_prepare_date_response( $date_created, false ),
@ -112,7 +125,7 @@ class Customers extends WC_REST_Unit_Test_Case {
),
),
),
$customers
$matching_customer_data
);
update_option( 'timezone_tring', 'America/New York' );
@ -130,7 +143,17 @@ class Customers extends WC_REST_Unit_Test_Case {
$this->assertEquals( 200, $response->get_status() );
$this->assertContains(
$matching_customer_data = current(
array_filter(
$customers,
function( $customer ) use ( $customer_3 ) {
return $customer['id'] === $customer_3->get_id();
}
)
);
$this->assertIsArray( $matching_customer_data );
$this->assertArraySubset(
array(
'id' => $customer_3->get_id(),
'date_created' => wc_rest_prepare_date_response( $date_created, false ),
@ -183,9 +206,8 @@ class Customers extends WC_REST_Unit_Test_Case {
),
),
),
$customers
$matching_customer_data
);
}
/**

View File

@ -6,10 +6,13 @@
* @since 3.5.0
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* Payment gateway test class.
*/
class Payment_Gateways extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Setup our test server, endpoints, and user info.
@ -47,7 +50,18 @@ class Payment_Gateways extends WC_REST_Unit_Test_Case {
$gateways = $response->get_data();
$this->assertEquals( 200, $response->get_status() );
$this->assertContains(
$matching_gateway_data = current(
array_filter(
$gateways,
function( $gateway ) {
return 'cheque' === $gateway['id'];
}
)
);
$this->assertIsArray( $matching_gateway_data );
$this->assertArraySubset(
array(
'id' => 'cheque',
'title' => 'Check payments',
@ -85,7 +99,7 @@ class Payment_Gateways extends WC_REST_Unit_Test_Case {
),
),
),
$gateways
$matching_gateway_data
);
}

View File

@ -6,6 +6,8 @@
* @since 3.5.0
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
// phpcs:ignore Squiz.Commenting.FileComment.Missing
require_once __DIR__ . '/date-filtering.php';
@ -13,8 +15,9 @@ require_once __DIR__ . '/date-filtering.php';
* WC_Tests_API_Product class.
*/
class WC_Tests_API_Product extends WC_REST_Unit_Test_Case {
use WC_REST_API_Complex_Meta;
use ArraySubsetAsserts;
use DateFilteringForCrudControllers;
use WC_REST_API_Complex_Meta;
/**
* Setup our test server, endpoints, and user info.
@ -140,14 +143,14 @@ class WC_Tests_API_Product extends WC_REST_Unit_Test_Case {
$product = $response->get_data();
$this->assertEquals( 200, $response->get_status() );
$this->assertContains(
$this->assertArraySubset(
array(
'id' => $simple->get_id(),
'name' => 'Dummy External Product',
'type' => 'simple',
'type' => 'external',
'status' => 'publish',
'sku' => 'DUMMY EXTERNAL SKU',
'regular_price' => 10,
'regular_price' => '10',
),
$product
);

View File

@ -6,10 +6,13 @@
* @since 3.5.0
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* Class Settings.
*/
class Settings extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Setup our test server, endpoints, and user info.
@ -49,8 +52,17 @@ class Settings extends WC_REST_Unit_Test_Case {
$data = $response->get_data();
$this->assertEquals( 200, $response->get_status() );
$matching_settings_data = current(
array_filter(
$data,
function( $settings ) {
return 'test' === $settings['id'];
}
)
);
$this->assertIsArray( $matching_settings_data );
$this->assertContains(
$this->assertArraySubset(
array(
'id' => 'test',
'label' => 'Test extension',
@ -65,10 +77,20 @@ class Settings extends WC_REST_Unit_Test_Case {
),
),
),
$data
$matching_settings_data
);
$this->assertContains(
$matching_settings_data = current(
array_filter(
$data,
function( $settings ) {
return 'sub-test' === $settings['id'];
}
)
);
$this->assertIsArray( $matching_settings_data );
$this->assertArraySubset(
array(
'id' => 'sub-test',
'label' => 'Sub test',
@ -83,7 +105,7 @@ class Settings extends WC_REST_Unit_Test_Case {
),
),
),
$data
$matching_settings_data
);
}

View File

@ -5,6 +5,8 @@
* @package Automattic/WooCommerce/Tests
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* System Status REST Tests.
*
@ -12,6 +14,7 @@
* @since 3.5.0
*/
class WC_Tests_REST_System_Status extends WC_REST_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* User variable.
@ -117,8 +120,8 @@ class WC_Tests_REST_System_Status extends WC_REST_Unit_Test_Case {
}
$expected_data = array(
'environment' => array(
'version' => WC()->version
)
'version' => WC()->version,
),
);
$request = new WP_REST_Request( 'GET', '/wc/v3/system_status' );
@ -178,7 +181,8 @@ class WC_Tests_REST_System_Status extends WC_REST_Unit_Test_Case {
$theme = (array) $data['theme'];
$this->assertEquals( 13, count( $theme ) );
$this->assertEquals( $active_theme->Name, $theme['name'] ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.NotSnakeCaseMemberVar
// phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
$this->assertEquals( $active_theme->Name, $theme['name'] );
}
/**
@ -264,7 +268,18 @@ class WC_Tests_REST_System_Status extends WC_REST_Unit_Test_Case {
$this->assertEquals( 200, $response->get_status() );
$this->assertEquals( count( $raw_tools ), count( $data ) );
$this->assertContains(
$matching_tool_data = current(
array_filter(
$data,
function( $tool ) {
return 'regenerate_thumbnails' === $tool['id'];
}
)
);
$this->assertIsArray( $matching_tool_data );
$this->assertArraySubset(
array(
'id' => 'regenerate_thumbnails',
'name' => 'Regenerate shop thumbnails',
@ -279,7 +294,7 @@ class WC_Tests_REST_System_Status extends WC_REST_Unit_Test_Case {
),
),
),
$data
$matching_tool_data
);
$query_params = array(
@ -292,12 +307,23 @@ class WC_Tests_REST_System_Status extends WC_REST_Unit_Test_Case {
$this->assertEquals( 200, $response->get_status() );
$this->assertEquals( count( $raw_tools ), count( $data ) );
$this->assertContains(
$matching_tool_data = current(
array_filter(
$data,
function( $tool ) {
return 'regenerate_thumbnails' === $tool['id'];
}
)
);
$this->assertIsArray( $matching_tool_data );
$this->assertArraySubset(
array(
'id' => 'regenerate_thumbnails',
'name' => 'Regenerate shop thumbnails',
),
$data
$matching_tool_data
);
foreach ( $data as $item ) {
// Fields that are not requested are not returned in response.

View File

@ -6,10 +6,13 @@
* @since 3.3.0
*/
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
/**
* WC_Query tests.
*/
class WC_Tests_WC_Query extends WC_Unit_Test_Case {
use ArraySubsetAsserts;
/**
* Test WC_Query gets initialized properly.
@ -353,8 +356,17 @@ class WC_Tests_WC_Query extends WC_Unit_Test_Case {
// phpcs:enable WordPress.DB.SlowDBQuery
WC()->query->product_query( new WP_Query( $query_args ) );
$tax_queries = WC_Query::get_main_tax_query();
$this->assertContains( $tax_query, $tax_queries );
$tax_queries = WC_Query::get_main_tax_query();
$matching_tax_data = current(
array_filter(
$tax_queries,
function( $tax ) {
return 'product_tag' === $tax['taxonomy'];
}
)
);
$this->assertIsArray( $matching_tax_data );
$this->assertArraySubset( $tax_query, $matching_tax_data );
}
/**

View File

@ -260,13 +260,13 @@ class WC_Admin_Tests_OnboardingTasks_TaskList extends WC_Unit_Test_Case {
)
);
$json = $this->list->get_json();
$this->assertContains( 'id', $json );
$this->assertContains( 'title', $json );
$this->assertContains( 'isHidden', $json );
$this->assertContains( 'isVisible', $json );
$this->assertContains( 'isComplete', $json );
$this->assertContains( 'tasks', $json );
$this->assertContains( 'isComplete', $json['tasks'][0] );
$this->assertArrayHasKey( 'id', $json );
$this->assertArrayHasKey( 'title', $json );
$this->assertArrayHasKey( 'isHidden', $json );
$this->assertArrayHasKey( 'isVisible', $json );
$this->assertArrayHasKey( 'isComplete', $json );
$this->assertArrayHasKey( 'tasks', $json );
$this->assertArrayHasKey( 'isComplete', $json['tasks'][0] );
}
/**

View File

@ -18,7 +18,7 @@ class WC_Admin_Tests_ProductForm_Form_Factory extends WC_Unit_Test_Case {
$field = Form::add_field( 'id', 'woocommerce', array() );
$this->assertInstanceOf( 'WP_Error', $field );
$this->assertContains( 'You are missing required arguments of WooCommerce ProductForm Field: type, section, properties.name, properties.label', $field->get_error_message() );
$this->assertStringContainsString( 'You are missing required arguments of WooCommerce ProductForm Field: type, section, properties.name, properties.label', $field->get_error_message() );
}
/**
@ -51,7 +51,7 @@ class WC_Admin_Tests_ProductForm_Form_Factory extends WC_Unit_Test_Case {
)
);
$this->assertInstanceOf( 'WP_Error', $field_duplicate );
$this->assertContains( 'You have attempted to register a duplicate form field with WooCommerce Form: `id`', $field_duplicate->get_error_message() );
$this->assertStringContainsString( 'You have attempted to register a duplicate form field with WooCommerce Form: `id`', $field_duplicate->get_error_message() );
}
/**

View File

@ -165,7 +165,7 @@ class WC_Admin_Dashboard_Setup_Test extends WC_Unit_Test_Case {
);
foreach ( $required_strings as $required_string ) {
$this->assertRegexp( "/{$required_string}/", $html );
$this->assertMatchesRegularExpression( "/{$required_string}/", $html );
}
}
@ -191,7 +191,7 @@ class WC_Admin_Dashboard_Setup_Test extends WC_Unit_Test_Case {
if ( $completed_tasks_count === $tasks_count ) {
$this->assertEmpty( $this->get_widget_output() );
} else {
$this->assertRegexp( "/Step {$step_number} of 6/", $this->get_widget_output() );
$this->assertMatchesRegularExpression( "/Step {$step_number} of 6/", $this->get_widget_output() );
}
}
}

View File

@ -187,6 +187,6 @@ class WC_Cart_Test extends \WC_Unit_Test_Case {
$this->assertArrayHasKey( 'error', $notices );
$this->assertCount( 1, $notices['error'] );
$this->assertRegExp( '/Please choose product options by visiting/', $notices['error'][0]['notice'] );
$this->assertMatchesRegularExpression( '/Please choose product options by visiting/', $notices['error'][0]['notice'] );
}
}

View File

@ -97,7 +97,7 @@ class WC_Core_Functions_Test extends \WC_Unit_Test_Case {
);
$actual = wc_add_number_precision( $value, $round );
$this->assertEquals( $expected, $actual );
$this->assertFloatEquals( $expected, $actual );
remove_all_filters( 'wc_get_price_decimals' );
}

View File

@ -9,7 +9,7 @@
* Text Domain: woocommerce
* Domain Path: /i18n/languages/
* Requires at least: 5.9
* Requires PHP: 7.2
* Requires PHP: 7.3
*
* @package WooCommerce
*/