From 2819fadd7f4f8d3436d250b94d506935b975d56f Mon Sep 17 00:00:00 2001 From: Mike Jolley Date: Tue, 18 Oct 2016 18:38:48 +0100 Subject: [PATCH] Tests --- .../helpers/class-wc-helper-product.php | 31 +++++++- tests/unit-tests/product/crud.php | 77 +++++++++++++++++-- 2 files changed, 99 insertions(+), 9 deletions(-) diff --git a/tests/framework/helpers/class-wc-helper-product.php b/tests/framework/helpers/class-wc-helper-product.php index ea7d5989354..202a48b26d8 100644 --- a/tests/framework/helpers/class-wc-helper-product.php +++ b/tests/framework/helpers/class-wc-helper-product.php @@ -32,13 +32,14 @@ class WC_Helper_Product { * * @return WC_Product_Simple */ - public static function create_simple_product() { + public static function create_simple_product( $parent = 0 ) { // Create the product $product = wp_insert_post( array( 'post_title' => 'Dummy Product', 'post_type' => 'product', 'post_status' => 'publish', + 'post_parent' => $parent, ) ); update_post_meta( $product, '_price', '10' ); update_post_meta( $product, '_regular_price', '10' ); @@ -47,13 +48,39 @@ class WC_Helper_Product { update_post_meta( $product, '_manage_stock', 'no' ); update_post_meta( $product, '_tax_status', 'taxable' ); update_post_meta( $product, '_downloadable', 'no' ); - update_post_meta( $product, '_virtual', 'taxable' ); + update_post_meta( $product, '_virtual', 'no' ); update_post_meta( $product, '_visibility', 'visible' ); update_post_meta( $product, '_stock_status', 'instock' ); return new WC_Product_Simple( $product ); } + /** + * Create grouped product. + * + * @since 2.7.0 + * + * @return WC_Product_Grouped + */ + public static function create_grouped_product() { + // Create the product + $product = wp_insert_post( array( + 'post_title' => 'Dummy Grouped Product', + 'post_type' => 'product', + 'post_status' => 'publish', + ) ); + $simple_product_1 = self::create_simple_product( $product->ID ); + $simple_product_2 = self::create_simple_product( $product->ID ); + update_post_meta( $product, '_sku', 'DUMMY GROUPED SKU' ); + update_post_meta( $product, '_manage_stock', 'no' ); + update_post_meta( $product, '_tax_status', 'taxable' ); + update_post_meta( $product, '_downloadable', 'no' ); + update_post_meta( $product, '_virtual', 'no' ); + update_post_meta( $product, '_visibility', 'visible' ); + update_post_meta( $product, '_stock_status', 'instock' ); + return new WC_Product_Grouped( $product ); + } + /** * Create a dummy variation product. * diff --git a/tests/unit-tests/product/crud.php b/tests/unit-tests/product/crud.php index e8285f8316b..010c123f9a6 100644 --- a/tests/unit-tests/product/crud.php +++ b/tests/unit-tests/product/crud.php @@ -104,13 +104,76 @@ class WC_Tests_Product_CRUD extends WC_Unit_Test_Case { 'purchase_note' => 'A note', 'menu_order' => 2, ); - $product = new WC_Product; - foreach ( $getters_and_setters as $function => $value ) { - $product->{"set_{$function}"}( $value ); - } - $product->create(); - $product = new WC_Product_Simple( $product->get_id() ); - foreach ( $getters_and_setters as $function => $value ) { + $product = new WC_Product; + foreach ( $getters_and_setters as $function => $value ) { + $product->{"set_{$function}"}( $value ); + } + $product->create(); + $product = new WC_Product_Simple( $product->get_id() ); + foreach ( $getters_and_setters as $function => $value ) { + $this->assertEquals( $value, $product->{"get_{$function}"}(), $function ); + } + } + + /** + * Test creating a new grouped product. + * + * @since 2.7.0 + */ + function test_grouped_product_create() { + $simple_product = WC_Helper_Product::create_simple_product(); + $product = new WC_Product_Grouped; + $product->set_children( array( $simple_product->get_id() ) ); + $product->set_name( 'My Grouped Product' ); + $product->create(); + $read_product = new WC_Product_Grouped( $product->get_id() ); + $this->assertEquals( 'My Grouped Product', $read_product->get_name() ); + $this->assertEquals( array( $simple_product->get_id() ), $read_product->get_children() ); + } + + /** + * Test getting / reading an grouped product. + * + * @since 2.7.0 + */ + function test_grouped_product_read() { + $product = WC_Helper_Product::create_grouped_product(); + $product = new WC_Product_Grouped( $product->get_id() ); + $this->assertEquals( 'Dummy Grouped Product', $read_product->get_name() ); + $this->assertEquals( 2, count( $product->get_children() ) ); + } + /** + * Test updating an grouped product. + * + * @since 2.7.0 + */ + function test_grouped_product_update() { + $product = WC_Helper_Product::create_grouped_product(); + $simple_product = WC_Helper_Product::create_simple_product(); + $this->assertEquals( 'My Grouped Product', $product->get_name() ); + $this->assertEquals( array( $simple_product->get_id() ), $product->get_children() ); + $children = $product->get_children(); + $children[] = $simple_product->get_id(); + $product->set_children( $children ); + $product->set_name( 'My Grouped Product 2' ); + $product->save(); + // Reread from database + $product = new WC_Product_Grouped( $product->get_id() ); + $this->assertEquals( 3, count( $product->get_children() ) ); + $this->assertEquals( 'My Grouped Product 2', $read_product->get_name() ); + } + /** + * Test grouped product setters and getters + * + * @since 2.7.0 + */ + public function test_grouped_product_getters_and_setters() { + $getters_and_setters = array( + 'children' => array( 1, 2, 3 ), + ); + $product = new WC_Product_Grouped; + foreach ( $getters_and_setters as $function => $value ) { + $product->{"set_{$function}"}( $value ); $this->assertEquals( $value, $product->{"get_{$function}"}(), $function ); } }