diff --git a/tests/unit-tests/reader-activation-sync-woocommerce.php b/tests/unit-tests/reader-activation-sync-woocommerce.php index cee7fd30dd..bdde9c52f3 100644 --- a/tests/unit-tests/reader-activation-sync-woocommerce.php +++ b/tests/unit-tests/reader-activation-sync-woocommerce.php @@ -13,6 +13,14 @@ * Tests Reader Activation Sync WooCommerce. */ class Newspack_Test_RAS_Sync_WooCommerce extends WP_UnitTestCase { + + /** + * The current order that will be returned in the filter + * + * @var ?WC_Order + */ + public static $current_order = false; + const USER_DATA = [ 'user_login' => 'test_user', 'user_email' => 'test@example.com', @@ -37,6 +45,32 @@ public function set_up() { // phpcs:ignore Squiz.Commenting.FunctionComment.Miss // Reset the user. wp_delete_user( self::$user_id ); self::$user_id = wp_insert_user( self::USER_DATA ); + + add_filter( + 'newspack_reader_activation_get_current_product_order_for_sync', + [ __CLASS__, 'get_current_order' ] + ); + } + + /** + * Tear down the test. + * + * @return void + */ + public function tear_down() { + remove_filter( + 'newspack_reader_activation_get_current_product_order_for_sync', + [ __CLASS__, 'get_current_order' ] + ); + } + + /** + * Get the current order for the test. + * + * @return ?WC_Order + */ + public static function get_current_order() { + return self::$current_order; } /** @@ -57,13 +91,7 @@ public function test_payment_metadata_basic() { ], ]; $order = \wc_create_order( $order_data ); - - add_filter( - 'newspack_reader_activation_get_current_product_order_for_sync', - function() use ( $order ) { - return $order; - } - ); + self::$current_order = $order; $payment_page_url = 'https://example.com/donate'; $contact_data = Sync\WooCommerce::get_contact_from_order( $order, $payment_page_url ); @@ -117,14 +145,7 @@ public function test_payment_metadata_utm() { ], ]; $order = \wc_create_order( $order_data ); - - - add_filter( - 'newspack_reader_activation_get_current_product_order_for_sync', - function() use ( $order ) { - return $order; - } - ); + self::$current_order = $order; $contact_data = Sync\WooCommerce::get_contact_from_order( $order ); $this->assertEquals( 'test_source', $contact_data['metadata']['payment_page_utm_source'] ); @@ -143,13 +164,7 @@ public function test_payment_metadata_with_failed_order() { ] ); - - add_filter( - 'newspack_reader_activation_get_current_product_order_for_sync', - function() use ( $order ) { - return $order; - } - ); + self::$current_order = $order; $contact_data = Sync\WooCommerce::get_contact_from_order( $order ); $this->assertEmpty( $contact_data['metadata']['last_payment_date'] ); @@ -167,12 +182,7 @@ public function test_payment_metadata_from_customer() { ]; $order = \wc_create_order( $order_data ); - add_filter( - 'newspack_reader_activation_get_current_product_order_for_sync', - function() use ( $order ) { - return $order; - } - ); + self::$current_order = $order; $contact_data = Sync\WooCommerce::get_contact_from_customer( self::$user_id ); $this->assertEquals( '$' . $order_data['total'], $contact_data['metadata']['last_payment_amount'] ); @@ -191,12 +201,7 @@ public function test_payment_metadata_from_customer_with_last_order_failed() { ]; $order = \wc_create_order( $completed_order_data ); - add_filter( - 'newspack_reader_activation_get_current_product_order_for_sync', - function() use ( $order ) { - return $order; - } - ); + self::$current_order = $order; // A more recent, but failed, order. $failed_order_data = [