diff --git a/facebook-commerce.php b/facebook-commerce.php index f983f6608..fd7f878dc 100644 --- a/facebook-commerce.php +++ b/facebook-commerce.php @@ -1230,7 +1230,7 @@ public function on_variable_product_publish( $wp_id, $woo_product = null ) { $this->update_product_group( $woo_product ); } else { $retailer_id = WC_Facebookcommerce_Utils::get_fb_retailer_id( $woo_product->woo_product ); - $this->create_product_group( $woo_product, $retailer_id, true ); + $this->create_product_group( $woo_product, $retailer_id ); } $variation_ids = []; @@ -1275,29 +1275,9 @@ public function on_simple_product_publish( $wp_id, $woo_product = null, &$parent if ( $fb_product_item_id ) { $woo_product->fb_visibility = Products::is_product_visible( $woo_product->woo_product ); $this->update_product_item_batch_api( $woo_product, $fb_product_item_id ); - return $fb_product_item_id; } else { - // Check if this is a new product item for an existing product group - if ( $woo_product->get_parent_id() ) { - $fb_product_group_id = $this->get_product_fbid( - self::FB_PRODUCT_GROUP_ID, - $woo_product->get_parent_id(), - $woo_product - ); - // New variant added - if ( $fb_product_group_id ) { - return $this->create_product_simple( $woo_product, $fb_product_group_id ); - } else { - WC_Facebookcommerce_Utils::fblog( - 'Wrong! simple_product_publish called without group ID for a variable product!', - [], - true - ); - } - } else { - return $this->create_product_simple( $woo_product ); // new product - } + return $this->create_product_simple( $woo_product ); // new product } } @@ -1327,18 +1307,9 @@ public function product_should_be_synced( WC_Product $product ): bool { * * @return string */ - public function create_product_simple( WC_Facebook_Product $woo_product, string $fb_product_group_id = null ): string { + public function create_product_simple( WC_Facebook_Product $woo_product): string { $retailer_id = WC_Facebookcommerce_Utils::get_fb_retailer_id( $woo_product ); - - if ( ! $fb_product_group_id ) { - $fb_product_group_id = $this->create_product_group( $woo_product, $retailer_id ); - } - - if ( $fb_product_group_id ) { - return $this->create_product_item_batch_api( $woo_product, $retailer_id, $fb_product_group_id ); - } - - return ''; + return $this->create_product_item_batch_api( $woo_product, $retailer_id ); } /** @@ -1348,13 +1319,11 @@ public function create_product_simple( WC_Facebook_Product $woo_product, string * * @return ?string */ - public function create_product_group( WC_Facebook_Product $woo_product, string $retailer_id, bool $variants = false ): ?string { + public function create_product_group( WC_Facebook_Product $woo_product, string $retailer_id ): ?string { $product_group_data = [ 'retailer_id' => $retailer_id, ]; - if ( $variants ) { - $product_group_data['variants'] = $woo_product->prepare_variants_for_group(); - } + $product_group_data['variants'] = $woo_product->prepare_variants_for_group(); try { $create_product_group_result = $this->facebook_for_woocommerce->get_api()->create_product_group( @@ -1454,7 +1423,7 @@ public function update_product_group( WC_Facebook_Product $woo_product ) { * @param string $retailer_id **@since 3.1.7 */ - public function create_product_item_batch_api( $woo_product, $retailer_id, $product_group_id ): string { + public function create_product_item_batch_api( $woo_product, $retailer_id ): string { try { $product_data = $woo_product->prepare_product( $retailer_id, \WC_Facebook_Product::PRODUCT_PREP_TYPE_ITEMS_BATCH ); $requests = WC_Facebookcommerce_Utils::prepare_product_requests_items_batch( $product_data ); diff --git a/tests/Unit/WCFacebookCommerceIntegrationTest.php b/tests/Unit/WCFacebookCommerceIntegrationTest.php index a4ee1584f..b18236d83 100644 --- a/tests/Unit/WCFacebookCommerceIntegrationTest.php +++ b/tests/Unit/WCFacebookCommerceIntegrationTest.php @@ -1061,55 +1061,6 @@ public function test_on_simple_product_publish_existing_product_updates_product( $this->assertEquals( 'facebook-simple-product-item-id', $facebook_product_item_id ); } - /** - * Tests on simple product publish update callback/hook creates new product. - * - * @return void - */ - public function test_on_simple_product_publish_existing_product_creates_product() { - add_option( WC_Facebookcommerce_Integration::OPTION_PRODUCT_CATALOG_ID, '1234567891011121314' ); - - $product = WC_Helper_Product::create_simple_product(); - $facebook_product = new WC_Facebook_Product( $product->get_id() ); - $facebook_product_data = $facebook_product->prepare_product(null, \WC_Facebook_Product::PRODUCT_PREP_TYPE_ITEMS_BATCH ); - $requests = WC_Facebookcommerce_Utils::prepare_product_requests_items_batch($facebook_product_data); - - /* Product should be synced with all its variations. So seven calls expected. */ - $validator = $this->createMock( ProductValidator::class ); - $validator->expects( $this->once() ) - ->method( 'validate' ); - $this->facebook_for_woocommerce->expects( $this->once() ) - ->method( 'get_product_sync_validator' ) - ->with( $facebook_product->woo_product ) - ->willReturn( $validator ); - - update_option( 'woocommerce_hide_out_of_stock_items', 'yes' ); - $facebook_product->woo_product->set_stock_status( 'instock' ); - add_post_meta( $product->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_ITEM_ID, '' ); - - $this->api->expects( $this->once() ) - ->method( 'create_product_group' ) - ->with( - '1234567891011121314', - [ 'retailer_id' => WC_Facebookcommerce_Utils::get_fb_retailer_id( $facebook_product ) ] - ) - ->willReturn( new API\ProductCatalog\ProductGroups\Create\Response( '{"id":"facebook-simple-product-group-item-id"}' ) ); - $this->api->expects( $this->once() ) - ->method( 'send_item_updates' ) - ->with( - $this->integration->get_product_catalog_id(), - $requests - ) - ->willReturn( new API\ProductCatalog\ItemsBatch\Create\Response( '{"handles":"abcxyz"}' ) ); - - $this->integration->on_simple_product_publish( $product->get_id(), $facebook_product ); - - $this->assertEquals( - 'facebook-simple-product-group-item-id', - get_post_meta( $facebook_product->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_GROUP_ID, true ) - ); - } - /** * Tests product should be synced calls to return success. * @@ -1153,41 +1104,6 @@ public function test_product_should_be_synced_calls_facebook_api_with_exception( $this->assertFalse( $output ); } - /** - * Tests create simple product creates product group and the product itself. - * - * @return void - */ - public function test_create_product_simple_creates_product_group_before_creating_product_item() { - add_option( WC_Facebookcommerce_Integration::OPTION_PRODUCT_CATALOG_ID, '123456789101112' ); - - $product = WC_Helper_Product::create_simple_product(); - $facebook_product = new WC_Facebook_Product( $product->get_id() ); - $facebook_product_data = $facebook_product->prepare_product(null, \WC_Facebook_Product::PRODUCT_PREP_TYPE_ITEMS_BATCH ); - $requests = WC_Facebookcommerce_Utils::prepare_product_requests_items_batch($facebook_product_data); - $retailer_id = WC_Facebookcommerce_Utils::get_fb_retailer_id( $facebook_product ); - - $data = [ - 'retailer_id' => $retailer_id, - ]; - $this->api->expects( $this->once() ) - ->method( 'create_product_group' ) - ->with( '123456789101112', $data ) - ->willReturn( new API\ProductCatalog\ProductGroups\Create\Response( '{"id":"facebook-simple-product-group-id"}' ) ); - - $this->api->expects( $this->once() ) - ->method( 'send_item_updates' ) - ->with( - $this->integration->get_product_catalog_id(), - $requests - ) - ->willReturn( new API\ProductCatalog\ItemsBatch\Create\Response( '{"handles":"abcxyz"}' ) ); - - $this->integration->create_product_simple( $facebook_product ); - - $this->assertEquals( 'facebook-simple-product-group-id', get_post_meta( $facebook_product->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_GROUP_ID, true ) ); - } - /** * Tests create simple product with provided product group id. * @@ -1212,57 +1128,6 @@ public function test_create_product_simple_creates_product_with_provided_product $facebook_product_item_id = $this->integration->create_product_simple( $facebook_product, 'facebook-simple-product-group-id' ); } - /** - * Tests create simple product fails to create product group and returns empty product item id. - * - * @return void - */ - public function test_create_product_simple_with_failed_create_product_group_returns_empty_product_item() { - add_option( WC_Facebookcommerce_Integration::OPTION_PRODUCT_CATALOG_ID, '123456789101112' ); - - $product = WC_Helper_Product::create_simple_product(); - $facebook_product = new WC_Facebook_Product( $product->get_id() ); - $retailer_id = WC_Facebookcommerce_Utils::get_fb_retailer_id( $facebook_product ); - $data = [ - 'retailer_id' => $retailer_id, - ]; - $this->api->expects( $this->once() ) - ->method( 'create_product_group' ) - ->with( '123456789101112', $data ) - ->willReturn( new API\ProductCatalog\ProductGroups\Create\Response( '{"error":{"message":"Unsupported post request. Object with ID \'4964146013695812\' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at https:\/\/developers.facebook.com\/docs\/graph-api","type":"GraphMethodException","code":100,"error_subcode":33,"fbtrace_id":"AtmMkt0H2dwNBhdRfcYqzVY"}}' ) ); - - $facebook_product_item_id = $this->integration->create_product_simple( $facebook_product ); - - $this->assertEquals( '', get_post_meta( $facebook_product->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_GROUP_ID, true ) ); - $this->assertEquals( '', get_post_meta( $facebook_product->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_ITEM_ID, true ) ); - $this->assertEquals( '', $facebook_product_item_id ); - } - - /** - * Tests create product group fpr product w/o variants. - * - * @return void - */ - public function test_create_product_group_creates_group_no_variants() { - add_option( WC_Facebookcommerce_Integration::OPTION_PRODUCT_CATALOG_ID, '123456789101112' ); - - $product = WC_Helper_Product::create_simple_product(); - $facebook_product = new WC_Facebook_Product( $product->get_id() ); - $retailer_id = 'product-retailer-id'; - $data = [ - 'retailer_id' => $retailer_id, - ]; - $this->api->expects( $this->once() ) - ->method( 'create_product_group' ) - ->with( '123456789101112', $data ) - ->willReturn( new API\ProductCatalog\ProductGroups\Create\Response( '{"id":"facebook-product-group-id"}' ) ); - - $facebook_product_group_id = $this->integration->create_product_group( $facebook_product, $retailer_id ); - - $this->assertEquals( 'facebook-product-group-id', $facebook_product_group_id ); - $this->assertEquals( 'facebook-product-group-id', get_post_meta( $facebook_product->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_GROUP_ID, true ) ); - } - /** * Tests create product group for product with variants. * @@ -1297,11 +1162,13 @@ public function test_create_product_group_creates_group_with_variants() { public function test_create_product_group_fails_to_create_group() { add_option( WC_Facebookcommerce_Integration::OPTION_PRODUCT_CATALOG_ID, '123456789101112' ); - $product = WC_Helper_Product::create_simple_product(); + $product = WC_Helper_Product::create_variation_product(); $facebook_product = new WC_Facebook_Product( $product->get_id() ); + add_post_meta( $facebook_product->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_GROUP_ID, 'facebook-product-group-id' ); $retailer_id = 'product-retailer-id'; $data = [ 'retailer_id' => $retailer_id, + 'variants' => $facebook_product->prepare_variants_for_group(), ]; $this->api->expects( $this->once() ) ->method( 'create_product_group' )