set_sold_individually( true ); $product->save(); $variation = new WC_Product_Variation(); $variation->set_parent_id( $product->get_id() ); $variation->save(); $variation = wc_get_product( $variation->get_id() ); $this->assertTrue( $variation->is_sold_individually() ); } /** * Check get_tax_class against different parent child scenarios */ public function test_get_tax_class() { $product = new WC_Product_Variable(); $product->set_tax_class( 'standard' ); $product->save(); $variation = new WC_Product_Variation(); $variation->set_parent_id( $product->get_id() ); $variation->set_tax_class( 'parent' ); $variation->save(); $variation = wc_get_product( $variation->get_id() ); $this->assertEquals( '', $variation->get_tax_class( 'unfiltered' ) ); $this->assertEquals( 'parent', $variation->get_tax_class( 'edit' ) ); $this->assertEquals( '', $variation->get_tax_class( 'view' ) ); $variation->set_tax_class( 'standard' ); $variation->save(); $variation = wc_get_product( $variation->get_id() ); $this->assertEquals( '', $variation->get_tax_class( 'unfiltered' ) ); $this->assertEquals( '', $variation->get_tax_class( 'edit' ) ); $this->assertEquals( '', $variation->get_tax_class( 'view' ) ); $variation->set_tax_class( 'reduced-rate' ); $variation->save(); $variation = wc_get_product( $variation->get_id() ); $this->assertEquals( 'reduced-rate', $variation->get_tax_class( 'unfiltered' ) ); $this->assertEquals( 'reduced-rate', $variation->get_tax_class( 'edit' ) ); $this->assertEquals( 'reduced-rate', $variation->get_tax_class( 'view' ) ); $product->set_tax_class( 'zero-rate' ); $product->save(); $variation->set_tax_class( 'parent' ); $variation->save(); $variation = wc_get_product( $variation->get_id() ); $this->assertEquals( 'zero-rate', $variation->get_tax_class( 'unfiltered' ) ); $this->assertEquals( 'parent', $variation->get_tax_class( 'edit' ) ); $this->assertEquals( 'zero-rate', $variation->get_tax_class( 'view' ) ); } /** * Test that WC_Product_Variation throws an exception * when called with a product ID that belongs to a product * of a different type. * * Ticket: https://github.com/woocommerce/woocommerce/issues/24956 */ public function test_product_variation_should_throw_exception_when_instantiated_with_invalid_id() { $this->expectExceptionMessage( 'Invalid product type: passed ID does not correspond to a product variation.' ); $variable_product = WC_Helper_Product::create_variation_product(); new WC_Product_Variation( $variable_product->get_id() ); } }