Refresh order to account for DB changes from post hooks.
This commit is contained in:
parent
221a0768cc
commit
294a3f19b9
|
@ -571,7 +571,6 @@ class OrdersTableDataStore extends \Abstract_WC_Order_Data_Store_CPT implements
|
||||||
|
|
||||||
self::$backfilling_order_ids[] = $order->get_id();
|
self::$backfilling_order_ids[] = $order->get_id();
|
||||||
$cpt_data_store->update_order_from_object( $order );
|
$cpt_data_store->update_order_from_object( $order );
|
||||||
self::$backfilling_order_ids = array_diff( self::$backfilling_order_ids, array( $order->get_id() ) );
|
|
||||||
foreach ( $cpt_data_store->get_internal_data_store_key_getters() as $key => $getter_name ) {
|
foreach ( $cpt_data_store->get_internal_data_store_key_getters() as $key => $getter_name ) {
|
||||||
if (
|
if (
|
||||||
is_callable( array( $cpt_data_store, "set_$getter_name" ) ) &&
|
is_callable( array( $cpt_data_store, "set_$getter_name" ) ) &&
|
||||||
|
@ -589,6 +588,7 @@ class OrdersTableDataStore extends \Abstract_WC_Order_Data_Store_CPT implements
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
self::$backfilling_order_ids = array_diff( self::$backfilling_order_ids, array( $order->get_id() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1668,7 +1668,8 @@ FROM $order_meta_table
|
||||||
'post_type' => $data_sync->data_sync_is_enabled() ? $order->get_type() : $data_sync::PLACEHOLDER_ORDER_POST_TYPE,
|
'post_type' => $data_sync->data_sync_is_enabled() ? $order->get_type() : $data_sync::PLACEHOLDER_ORDER_POST_TYPE,
|
||||||
'post_status' => 'draft',
|
'post_status' => 'draft',
|
||||||
'post_parent' => $order->get_changes()['parent_id'] ?? $order->get_data()['parent_id'] ?? 0,
|
'post_parent' => $order->get_changes()['parent_id'] ?? $order->get_data()['parent_id'] ?? 0,
|
||||||
'post_date_gmt' => current_time( 'mysql', 1 ), // We set the date to prevent invalid date errors when using MySQL strict mode.
|
'post_date' => gmdate( 'Y-m-d H:i:s', $order->get_date_created( 'edit' )->getOffsetTimestamp() ),
|
||||||
|
'post_date_gmt' => gmdate( 'Y-m-d H:i:s', $order->get_date_created( 'edit' )->getTimestamp() ),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -2309,7 +2310,10 @@ FROM $order_meta_table
|
||||||
$order->apply_changes();
|
$order->apply_changes();
|
||||||
|
|
||||||
if ( $backfill ) {
|
if ( $backfill ) {
|
||||||
|
self::$backfilling_order_ids[] = $order->get_id();
|
||||||
|
$order = wc_get_order( $order->get_id() ); // Refresh order to account for DB changes from post hooks.
|
||||||
$this->maybe_backfill_post_record( $order );
|
$this->maybe_backfill_post_record( $order );
|
||||||
|
self::$backfilling_order_ids = array_diff( self::$backfilling_order_ids, array( $order->get_id() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->clear_caches( $order );
|
$this->clear_caches( $order );
|
||||||
|
|
|
@ -1276,6 +1276,7 @@ class OrdersTableDataStoreTests extends HposTestCase {
|
||||||
* @testDox Test that we are able to correctly detect when order and post are out of sync.
|
* @testDox Test that we are able to correctly detect when order and post are out of sync.
|
||||||
*/
|
*/
|
||||||
public function test_is_post_different_from_order() {
|
public function test_is_post_different_from_order() {
|
||||||
|
$this->toggle_cot_feature_and_usage( true );
|
||||||
$this->enable_cot_sync();
|
$this->enable_cot_sync();
|
||||||
$order = $this->create_complex_cot_order();
|
$order = $this->create_complex_cot_order();
|
||||||
$post_order_comparison_closure = function ( $order ) {
|
$post_order_comparison_closure = function ( $order ) {
|
||||||
|
@ -2564,6 +2565,28 @@ class OrdersTableDataStoreTests extends HposTestCase {
|
||||||
$order->save_meta_data();
|
$order->save_meta_data();
|
||||||
$order->add_meta_data( 'test_key_3', 'test_value_3' );
|
$order->add_meta_data( 'test_key_3', 'test_value_3' );
|
||||||
$order->save();
|
$order->save();
|
||||||
|
echo 'ehere';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testDox When creating a new order, test that we are not backfilling stale data when there is a postmeta hooks that modifies data on the order.
|
||||||
|
*/
|
||||||
|
public function test_backfill_does_not_trigger_when_creating_orders_with_filter() {
|
||||||
|
$this->toggle_cot_feature_and_usage( true );
|
||||||
|
$this->enable_cot_sync();
|
||||||
|
|
||||||
|
add_filter( 'added_post_meta', array( $this, 'add_meta_when_meta_added' ), 10, 4 );
|
||||||
|
$order = new WC_Order();
|
||||||
|
$order->set_customer_id( 1 );
|
||||||
|
$order->add_meta_data( 'test_key', 'test_value' );
|
||||||
|
$order->save();
|
||||||
|
|
||||||
|
$r_order = wc_get_order( $order->get_id() );
|
||||||
|
$this->assertEquals( 'test_value', $r_order->get_meta( 'test_key', true ) );
|
||||||
|
$this->assertEquals( 'test_value_2', $r_order->get_meta( 'test_key_2', true ) );
|
||||||
|
$this->assertEquals( 'test_value_3', $r_order->get_meta( 'test_key_3', true ) );
|
||||||
|
$this->assertEquals( 1, $r_order->get_customer_id() );
|
||||||
|
remove_filter( 'added_post_meta', array( $this, 'add_meta_when_meta_added' ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue