Add various Util methods to OrderUtil class (#34141)
Add method in utils to check whether posts and order tables are in sync. * Add changelog. * Fix Yoda condition Co-authored-by: Nestor Soriano <konamiman@konamiman.com>
This commit is contained in:
parent
fbb6bd1c53
commit
fe27a9a87c
|
@ -0,0 +1,4 @@
|
|||
Significance: patch
|
||||
Type: add
|
||||
|
||||
Add util methods to check whether tables are in sync and orders are migrated.
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
namespace Automattic\WooCommerce\Internal\DependencyManagement\ServiceProviders;
|
||||
|
||||
use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController;
|
||||
use Automattic\WooCommerce\Internal\DataStores\Orders\DataSynchronizer;
|
||||
use Automattic\WooCommerce\Internal\DependencyManagement\AbstractServiceProvider;
|
||||
use Automattic\WooCommerce\Internal\Utilities\COTMigrationUtil;
|
||||
use Automattic\WooCommerce\Internal\Utilities\DatabaseUtil;
|
||||
|
@ -35,6 +37,7 @@ class UtilsClassesServiceProvider extends AbstractServiceProvider {
|
|||
$this->share( DatabaseUtil::class );
|
||||
$this->share( HtmlSanitizer::class );
|
||||
$this->share( OrderUtil::class );
|
||||
$this->share( COTMigrationUtil::class );
|
||||
$this->share( COTMigrationUtil::class )
|
||||
->addArguments( array( CustomOrdersTableController::class, DataSynchronizer::class ) );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
namespace Automattic\WooCommerce\Internal\Utilities;
|
||||
|
||||
use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController;
|
||||
use Automattic\WooCommerce\Internal\DataStores\Orders\DataSynchronizer;
|
||||
use WC_Order;
|
||||
use WP_Post;
|
||||
|
||||
|
@ -13,6 +14,35 @@ use WP_Post;
|
|||
* Utility functions meant for helping in migration from posts tables to custom order tables.
|
||||
*/
|
||||
class COTMigrationUtil {
|
||||
|
||||
/**
|
||||
* Custom order table controller.
|
||||
*
|
||||
* @var CustomOrdersTableController
|
||||
*/
|
||||
private $table_controller;
|
||||
|
||||
/**
|
||||
* Data synchronizer.
|
||||
*
|
||||
* @var DataSynchronizer
|
||||
*/
|
||||
private $data_synchronizer;
|
||||
|
||||
/**
|
||||
* Initialize method, invoked by the DI container.
|
||||
*
|
||||
* @internal Automatically called by the container.
|
||||
* @param CustomOrdersTableController $table_controller Custom order table controller.
|
||||
* @param DataSynchronizer $data_synchronizer Data synchronizer.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
final public function init( CustomOrdersTableController $table_controller, DataSynchronizer $data_synchronizer ) {
|
||||
$this->table_controller = $table_controller;
|
||||
$this->data_synchronizer = $data_synchronizer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to get screen name of orders page in wp-admin.
|
||||
*
|
||||
|
@ -35,7 +65,17 @@ class COTMigrationUtil {
|
|||
* @return bool
|
||||
*/
|
||||
private function custom_orders_table_usage_is_enabled() : bool {
|
||||
return wc_get_container()->get( CustomOrdersTableController::class )->custom_orders_table_usage_is_enabled();
|
||||
return $this->table_controller->custom_orders_table_usage_is_enabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if posts and order custom table sync is enabled and there are no pending orders.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function is_custom_order_tables_in_sync() : bool {
|
||||
$sync_status = $this->data_synchronizer->get_sync_status();
|
||||
return $sync_status['current_pending_count'] === 0 && $this->data_synchronizer->data_sync_is_enabled();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -34,6 +34,15 @@ final class OrderUtil {
|
|||
return wc_get_container()->get( CustomOrdersTableController::class )->custom_orders_table_usage_is_enabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if posts and order custom table sync is enabled and there are no pending orders.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_custom_order_tables_in_sync() : bool {
|
||||
return wc_get_container()->get( COTMigrationUtil::class )->is_custom_order_tables_in_sync();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets value of a meta key from WC_Data object if passed, otherwise from the post object.
|
||||
* This helper function support backward compatibility for meta box functions, when moving from posts based store to custom tables.
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
* Tests for COTMigration utility.
|
||||
*/
|
||||
|
||||
use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController;
|
||||
use Automattic\WooCommerce\Internal\DataStores\Orders\DataSynchronizer;
|
||||
use Automattic\WooCommerce\Internal\Utilities\COTMigrationUtil;
|
||||
use Automattic\WooCommerce\RestApi\UnitTests\Helpers\OrderHelper;
|
||||
|
||||
|
@ -65,4 +67,38 @@ class COTMigrationUtilTest extends WC_Unit_Test_Case {
|
|||
$this->assertEquals( $order2->get_id(), $this->sut->get_post_or_order_id( $post_from_order2 ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @testDox `is_custom_order_tables_in_sync` should return true when Custom Order Tables are in sync.
|
||||
*/
|
||||
public function test_is_custom_order_tables_in_sync_is_true() {
|
||||
$data_sync_mock = $this->getMockBuilder( DataSynchronizer::class )
|
||||
->setMethods( array( 'get_sync_status', 'data_sync_is_enabled' ) )
|
||||
->getMock();
|
||||
|
||||
$data_sync_mock->method( 'get_sync_status' )->willReturn( array( 'current_pending_count' => 0 ) );
|
||||
$data_sync_mock->method( 'data_sync_is_enabled' )->willReturn( true );
|
||||
|
||||
$cot_controller = wc_get_container()->get( CustomOrdersTableController::class );
|
||||
$this->sut = new COTMigrationUtil();
|
||||
$this->sut->init( $cot_controller, $data_sync_mock );
|
||||
$this->assertTrue( $this->sut->is_custom_order_tables_in_sync() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @testDox `is_custom_order_tables_in_sync` should return false when Custom Order Tables are not in sync.
|
||||
*/
|
||||
public function test_is_custom_order_tables_in_sync_is_false() {
|
||||
$data_sync_mock = $this->getMockBuilder( DataSynchronizer::class )
|
||||
->setMethods( array( 'get_sync_status', 'data_sync_is_enabled' ) )
|
||||
->getMock();
|
||||
|
||||
$data_sync_mock->method( 'get_sync_status' )->willReturn( array( 'current_pending_count' => 0 ) );
|
||||
$data_sync_mock->method( 'data_sync_is_enabled' )->willReturn( false );
|
||||
|
||||
$cot_controller = wc_get_container()->get( CustomOrdersTableController::class );
|
||||
$this->sut = new COTMigrationUtil();
|
||||
$this->sut->init( $cot_controller, $data_sync_mock );
|
||||
$this->assertFalse( $this->sut->is_custom_order_tables_in_sync() );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue