save(); $variation_product = new WC_Product_Variation(); $variation_product->save(); $product_item = new WC_Order_Item_Product(); $product_item->set_quantity( 3 ); $this->assertEquals( 3, $product_item->get_quantity() ); $product_item->set_tax_class( 'reduced-rate' ); $this->assertEquals( 'reduced-rate', $product_item->get_tax_class() ); $product_item->set_product_id( $simple_product->get_id() ); $this->assertEquals( $simple_product->get_id(), $product_item->get_product_id() ); $product_item->set_variation_id( $variation_product->get_id() ); $this->assertEquals( $variation_product->get_id(), $product_item->get_variation_id() ); $product_item->set_subtotal( '12.00' ); $this->assertEquals( '12.00', $product_item->get_subtotal() ); $product_item->set_total( '10.00' ); $this->assertEquals( '10.00', $product_item->get_total() ); $product_item->set_subtotal_tax( '0.50' ); $this->assertEquals( '0.50', $product_item->get_subtotal_tax() ); $product_item->set_total_tax( '0.30' ); $this->assertEquals( '0.30', $product_item->get_total_tax() ); } /** * Test set_taxes and get_taxes for WC_Order_Item_Product. * * @since 3.2.0 */ public function test_set_get_taxes() { $product_item = new WC_Order_Item_Product(); $taxes = array( 'total' => array( '10', '2.4' ), 'subtotal' => array( '12', '3.1' ), ); $product_item->set_taxes( $taxes ); $this->assertEquals( $taxes, $product_item->get_taxes() ); $this->assertEquals( '12.4', $product_item->get_total_tax() ); $this->assertEquals( '15.1', $product_item->get_subtotal_tax() ); } /** * Test set_product and get_product for WC_Order_Item_Product. * * @since 3.2.0 */ public function test_set_get_product() { $simple_product = new WC_Product_Simple(); $simple_product->set_name( 'Test Simple' ); $simple_product->set_tax_class( 'reduced-rate' ); $simple_product->save(); $parent_product = new WC_Product_Variable(); $parent_product->set_name( 'Test Parent' ); $parent_product->save(); $variation_product = new WC_Product_Variation(); $variation_product->set_name( 'Test Variation' ); $variation_product->set_parent_id( $parent_product->get_id() ); $variation_product->set_attributes( array( 'color' => 'Green' ) ); $variation_product->save(); // Simple product. $product_item = new WC_Order_Item_Product(); $product_item->set_product( $simple_product ); $this->assertEquals( 'Test Simple', $product_item->get_name() ); $this->assertEquals( $simple_product->get_id(), $product_item->get_product_id() ); $this->assertEquals( 0, $product_item->get_variation_id() ); $this->assertEquals( 'reduced-rate', $product_item->get_tax_class() ); $retrieved = $product_item->get_product(); $this->assertEquals( $simple_product->get_id(), $retrieved->get_id() ); // Variation product. $product_item = new WC_Order_Item_Product(); $product_item->set_product( $variation_product ); $this->assertEquals( 'Test Parent - Green', $product_item->get_name() ); $this->assertEquals( $parent_product->get_id(), $product_item->get_product_id() ); $this->assertEquals( $variation_product->get_id(), $product_item->get_variation_id() ); $this->assertEquals( '', $product_item->get_tax_class() ); $this->assertEquals( 'Green', $product_item->get_meta( 'color' ) ); $retrieved = $product_item->get_product(); $this->assertEquals( $variation_product->get_id(), $retrieved->get_id() ); } /** * Test get_item_download_url method for WC_Order_Item_Product. * * @since 3.2.0 */ public function test_get_item_download_url() { $product = new WC_Product_Simple(); $product->save(); $order = new WC_Order(); $order->set_billing_email( 'test@woocommerce.com' ); $order->save(); $product_item = new WC_Order_Item_Product(); $product_item->set_product( $product ); $product_item->set_order_id( $order->get_id() ); $expected_regex = '/download_file=.*&order=wc_order_.*&email=test%40woocommerce.com&key=100/'; $this->assertRegexp( $expected_regex, $product_item->get_item_download_url( 100 ) ); } public function test_get_formatted_meta_data() { $parent_product = new WC_Product_Variable(); $parent_product->set_name( 'Test Parent' ); $parent_product->save(); $variation_product = new WC_Product_Variation(); $variation_product->set_name( 'Test Variation' ); $variation_product->set_parent_id( $parent_product->get_id() ); $variation_product->set_attributes( array( 'color' => 'Green', 'size' => 'Large' ) ); $variation_product->save(); $product_item = new WC_Order_Item_Product(); $product_item->set_product( $variation_product ); $product_item->add_meta_data( 'testkey', 'testval', true ); $product_item->save(); // Test with show_all on. $formatted = $product_item->get_formatted_meta_data( '_', true ); $formatted_as_array = array(); foreach ( $formatted as $f ) { $formatted_as_array[] = (array) $f; } $this->assertEquals( array( array( "key" => "color", "value" => "Green", "display_key" => "color", "display_value" => "

Green

\n", ), array( "key" => "size", "value" => "Large", "display_key" => "size", "display_value" => "

Large

\n", ), array( "key" => "testkey", "value" => "testval", "display_key" => "testkey", "display_value" => "

testval

\n", ), ), $formatted_as_array ); // Test with show_all off. $formatted = $product_item->get_formatted_meta_data( '_', false ); $formatted_as_array = array(); foreach ( $formatted as $f ) { $formatted_as_array[] = (array) $f; } $this->assertEquals( array( array( "key" => "testkey", "value" => "testval", "display_key" => "testkey", "display_value" => "

testval

\n", ), ), $formatted_as_array ); // Test with an exclude prefix. Should exclude everything since they're either in the title or in the exclude prefix. $formatted = $product_item->get_formatted_meta_data( 'test', false ); $this->assertEmpty( $formatted ); } public function test_offset_set_get_exists() { } }