From e87d1521ddc04b94356d6d7e150a96c57c572366 Mon Sep 17 00:00:00 2001 From: Almira Krdzic Date: Sun, 2 Dec 2018 22:18:09 +0100 Subject: [PATCH 1/2] Fix assigment order issues --- .../class-wiaas-access-management.php | 56 ++++- .../wiaas/includes/class-wiaas-countries.php | 10 +- .../wiaas/includes/class-wiaas-pricing.php | 2 +- .../class-wiaas-order-fields.php | 12 + backend/app/plugins/wiaas/tests/bootstrap.php | 6 + .../tests/class-wiaas-unit-test-factory.php | 28 +++ .../class-wiaas-unit-test-order-factory.php | 139 +++++++++++ ...s-wiaas-unit-test-organization-factory.php | 70 ++++++ .../class-wiaas-unit-test-product-factory.php | 218 ++++++++++++++++++ .../package/test-wiaas-package-addon.php | 6 +- .../test-wiaas-package-option-groups.php | 10 +- ...atus.php => test-wiaas-package-status.php} | 48 ++-- .../package/test-wiaas-package-type.php | 2 +- .../pricing/test-wiaas-package-cl-pricing.php | 18 +- .../pricing/test-wiaas-package-pricing.php | 2 +- .../test-wiaas-access-management.php | 196 ++++++++++++++++ .../tests/unit-tests/test-wiaas-countries.php | 33 +-- .../tests/unit-tests/test-wiaas-order.php | 69 +----- .../tests/unit-tests/test-wiaas-pricing.php | 132 +++++------ .../tests/unit-tests/test-wiaas-templates.php | 9 +- .../test-wiaas-user-organization.php | 37 +-- .../wiaas/tests/wiaas-unit-test-case.php | 9 +- .../wiaas/tests/wiaas-unit-test-factory.php | 17 -- 23 files changed, 873 insertions(+), 256 deletions(-) create mode 100644 backend/app/plugins/wiaas/tests/class-wiaas-unit-test-factory.php create mode 100644 backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-order-factory.php create mode 100644 backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-organization-factory.php create mode 100644 backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-product-factory.php rename backend/app/plugins/wiaas/tests/unit-tests/package/{class-wiaas-package-status.php => test-wiaas-package-status.php} (71%) create mode 100644 backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-access-management.php delete mode 100644 backend/app/plugins/wiaas/tests/wiaas-unit-test-factory.php diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php b/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php index 4e9eb53..1e323dc 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php @@ -16,8 +16,10 @@ class Wiaas_Access_Management { add_action( 'save_post', array( __CLASS__, 'maybe_handle_product_access' ), 999, 2 ); - add_action('woocommerce_new_order', array( __CLASS__, 'assign_order_to_organization' )); - add_action('woocommerce_payment_complete', array( __CLASS__, 'assign_order_to_suppliers'),20,1 ); + add_action('woocommerce_checkout_order_processed', array( __CLASS__, 'assign_order_to_customer_organization' )); + add_action('woocommerce_checkout_order_processed', array( __CLASS__, 'assign_order_to_commercial_lead_organization' )); + add_action('woocommerce_checkout_order_processed', array( __CLASS__, 'assign_order_to_supplier_organizations')); + add_action('wiaas_order_item_installation_assigned', array(__CLASS__, 'assign_order_to_installation_organization'), 10, 3); } /** @@ -43,6 +45,7 @@ class Wiaas_Access_Management { empty(Wiaas_Package_Pricing::get_package_prices($product))) { $access_group = Groups_Group::read_by_name('admin'); + } else { $access_group = Groups_Group::read_by_name('Registered'); @@ -64,13 +67,20 @@ class Wiaas_Access_Management { * * @param int $order_id */ - public static function assign_order_to_organization($order_id) { + public static function assign_order_to_customer_organization($order_id) { // assign order to customer organization $customer_id = wiaas_get_current_user_organization_id(); Wiaas_User_Organization::assign_post_to_organization($order_id, $customer_id); + } + + /** + * Assign order to commercial lead organization + * + * @param int $order_id + */ + public static function assign_order_to_commercial_lead_organization($order_id) { $order = wc_get_order($order_id); - // assign order to commercial lead organization $commercial_lead_id = absint($order->get_meta('_wiaas_commercial_lead_id', true)); if ($commercial_lead_id) { Wiaas_User_Organization::assign_post_to_organization($order_id, $commercial_lead_id); @@ -79,24 +89,46 @@ class Wiaas_Access_Management { } /** - * Assignees order to supplier organizations extracted from ordered items when order payment is complete. + * Assignees order to supplier organizations extracted from ordered items except installation + * + * Order will be assigned to corresponding installation company during delivery process * * @param int $order_id */ - public static function assign_order_to_suppliers($order_id){ + public static function assign_order_to_supplier_organizations($order_id) { - $order = wc_get_order($order_id); - $product_from_order = $order->get_items('line_item'); + $order = wc_get_order($order_id); - foreach ($product_from_order as $product_item) { + $order_items = $order->get_items('line_item'); - $supplier_organisation_id = Wiaas_Product_Supplier - ::get_supplier_organisation_id_from_product($product_item->get_product_id()); + foreach ($order_items as $key => $order_item) { - Wiaas_User_Organization::assign_post_to_organization($order_id, $supplier_organisation_id); + $supplier_organisation_id = $order_item->get_meta('_wiaas_supplier_organization_id'); + + if (! empty($supplier_organisation_id) && $order_item->get_meta('_wiaas_category') !== 'installation') { + + Wiaas_User_Organization::assign_post_to_organization($order_id, $supplier_organisation_id); + } } } + + /** + * Assign order to installation organization that handles installation of corresponding ordered bundle item + * + * @param WC_Order $order + * @param WC_Order_Item $bundle_item + * @param WC_Order_Item $installation_item + */ + public static function assign_order_to_installation_organization($order, $bundle_item, $installation_item) { + + $supplier_organisation_id = $installation_item->get_meta('_wiaas_supplier_organization_id'); + + if (! empty($supplier_organisation_id) ) { + + Wiaas_User_Organization::assign_post_to_organization($order->get_id(), $supplier_organisation_id); + } + } } Wiaas_Access_Management::init(); diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-countries.php b/backend/app/plugins/wiaas/includes/class-wiaas-countries.php index bf67897..7d2cbfe 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-countries.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-countries.php @@ -175,15 +175,17 @@ class Wiaas_Countries { } $name = $choices[$code]; - $result = wp_insert_term($name, 'product_country'); + $result = wp_insert_term($name, 'product_country', array( + 'slug' => $code + )); if (is_wp_error($result)) { continue; } - update_term_meta($result->term_id, '_wiaas_country_code', $code); - update_term_meta($result->term_id, '_wiaas_country_currency', $info['currency']); - update_term_meta($result->term_id, '_wiaas_country_vat', $info['vat']); + update_term_meta($result['term_id'], '_wiaas_country_code', $code); + update_term_meta($result['term_id'], '_wiaas_country_currency', $info['currency']); + update_term_meta($result['term_id'], '_wiaas_country_vat', $info['vat']); } } diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-pricing.php b/backend/app/plugins/wiaas/includes/class-wiaas-pricing.php index 2555030..d50e3a0 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-pricing.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-pricing.php @@ -48,7 +48,7 @@ class Wiaas_Pricing { $bundled_items = $package->get_bundled_items(); foreach ($bundled_items as $bundled_item) { - $product = $bundled_item->product; + $product = wc_get_product($bundled_item->get_product_id()); $product_cat = Wiaas_Product_Category::get_category($product); if (!isset($total_cost_per_category[$product_cat])) { diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-order-fields.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-order-fields.php index fea6b52..710e99e 100644 --- a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-order-fields.php +++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-order-fields.php @@ -228,6 +228,12 @@ class Wiaas_Order_Fields { $bundle_item->update_meta_data('_wiaas_installation', $selected_installation->get_id()); $bundle_item->save_meta_data(); + + /** + * Apply actions related to order item installation + * (ex. make order visible to corresponding installation company) + */ + do_action('wiaas_order_item_installation_assigned', $order, $bundle_item, $selected_installation); } } } @@ -448,6 +454,12 @@ class Wiaas_Order_Fields { $entry[(string) $field->id] = 'wiaas_installation_' . $order->get_id() . '|' . $installation_item->get_id(); + /** + * Apply actions related to order item installation + * (ex. make order visible to corresponding installation company) + */ + do_action('wiaas_order_item_installation_assigned', $order, $bundle_item, $installation_item); + } else if (count($installation_items) > 1) { // force admin to select installation diff --git a/backend/app/plugins/wiaas/tests/bootstrap.php b/backend/app/plugins/wiaas/tests/bootstrap.php index c6cc935..a33225e 100644 --- a/backend/app/plugins/wiaas/tests/bootstrap.php +++ b/backend/app/plugins/wiaas/tests/bootstrap.php @@ -25,6 +25,12 @@ tests_add_filter( 'pre_option_active_plugins', 'load_active_plugins_list'); # Start up the WP testing environment. require $_tests_dir . '/includes/bootstrap.php'; +// Require Wiaas test case factories +require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-organization-factory.php'; +require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-product-factory.php'; +require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-order-factory.php'; +require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/class-wiaas-unit-test-factory.php'; + # Require Wiaas Unit Test case class require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/wiaas-unit-test-case.php'; require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/wiaas-api-unit-test-case.php'; diff --git a/backend/app/plugins/wiaas/tests/class-wiaas-unit-test-factory.php b/backend/app/plugins/wiaas/tests/class-wiaas-unit-test-factory.php new file mode 100644 index 0000000..11a2ee6 --- /dev/null +++ b/backend/app/plugins/wiaas/tests/class-wiaas-unit-test-factory.php @@ -0,0 +1,28 @@ +product = new Wiaas_Unit_Test_Product_Factory(); + + $this->organization = new Wiaas_Unit_Test_Organization_Factory(); + + $this->order = new Wiaas_Unit_Test_Order_Factory(); + } +} \ No newline at end of file diff --git a/backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-order-factory.php b/backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-order-factory.php new file mode 100644 index 0000000..53f28cf --- /dev/null +++ b/backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-order-factory.php @@ -0,0 +1,139 @@ + $customer_id + )); + + return $order; + } + + /** + * @param WC_Order|int $order + * @param int $customer_organization_id + */ + public function add_customer_organization_info($order, $customer_organization_id) { + + if (is_numeric($order)) { + + $order = wc_get_order($order); + } + + $order->add_meta_data('_wiaas_customer', $customer_organization_id); + + $order->add_meta_data('_wiaas_customer_info', wiaas_get_organization_info($customer_organization_id)); + + $order->save_meta_data(); + } + + + /** + * @param array $args + * @param WC_Order_Item_Product|null $bundle_item + * @param WC_Order|null $order + * + * @return WC_Order_Item_Product + */ + public function create_new_simple_product_order_item($args = array(), $bundle_item = null, $order = null) { + + $defaults = array( + 'quantity' => 1, + 'total' => 0 + ); + + $args = wp_parse_args($args, $defaults); + + $item = new WC_Order_Item_Product(); + + $item->set_props( + array( + 'quantity' => $args['quantity'], + 'total' => $args['total'], + ) + ); + + if (! empty($args['category']) ) { + + $item->add_meta_data('_wiaas_category', $args['category']); + } + + if (! empty($args['supplier_organization_id']) ) { + + $item->add_meta_data('_wiaas_supplier_organization_id', $args['supplier_organization_id']); + } + + $item->set_backorder_meta(); + + if (! empty($order) ) { + + $order->add_item($item); + + $order->save(); + } + + return $item; + } + + /** + * @param array $args + * @param WC_Order|null $order + * + * @return WC_Order_Item_Product + */ + public function create_new_bundle_order_item($args = array(), $order = null) { + + $defaults = array( + 'quantity' => 1, + 'total' => 0 + ); + + $args = wp_parse_args($args, $defaults); + + $item = new WC_Order_Item_Product(); + + $item->set_props( + array( + 'quantity' => $args['quantity'], + 'total' => $args['total'], + ) + ); + + $item->set_backorder_meta(); + + if (! empty($order) ) { + + $order->add_item($item); + + $order->save(); + } + + return $item; + } + + /** + * @param WC_Order $order + * @param array $items + */ + public function add_order_items($order, $items) { + + foreach ( $items as $item ) { + + $order->add_item($item); + } + + $order->save(); + } +} \ No newline at end of file diff --git a/backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-organization-factory.php b/backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-organization-factory.php new file mode 100644 index 0000000..a483b15 --- /dev/null +++ b/backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-organization-factory.php @@ -0,0 +1,70 @@ + 'organization' + ); + + $args = wp_parse_args($args, $defaults); + + $term_args = array(); + + if (! empty($args['parent_id'])) { + + $term_args['parent'] = $args['parent_id']; + } + + $result = wp_insert_term( + $args['name'], + Wiaas_User_Organization::TAXONOMY_NAME, + $term_args + ); + + if (! is_wp_error($result) ) { + + return $result['term_id']; + } + + return 0; + } + + public function assign_user_to_organization($user_id, $organization_id) { + wp_set_object_terms( + $user_id, + $organization_id, + Wiaas_User_Organization::TAXONOMY_NAME); + + update_user_meta($user_id, '_wiaas_organization_id', $organization_id); + } + + public function delete_organization($organization_id) { + wp_delete_term( + $organization_id, + Wiaas_User_Organization::TAXONOMY_NAME); + } + + public function delete_organizations() { + + $terms = get_terms(array( + 'taxonomy' => Wiaas_User_Organization::TAXONOMY_NAME, + 'hide_empty' => false + )); + + foreach ($terms as $term) { + + wp_delete_term($term->term_id, Wiaas_User_Organization::TAXONOMY_NAME); + } + } +} \ No newline at end of file diff --git a/backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-product-factory.php b/backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-product-factory.php new file mode 100644 index 0000000..d7a14b7 --- /dev/null +++ b/backend/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-product-factory.php @@ -0,0 +1,218 @@ + 10, + 'is_recurring' => false, + 'pay_period' => 0 + ); + + $args = wp_parse_args($args, $defaults); + + $post_id = wp_insert_post(array( + 'post_type' => 'product', + 'post_status' => 'publish', + 'post_name' => 'product', + 'post_title' => 'Product', + 'post_content' => 'Product', + 'post_excerpt' => 'Product' + ), true); + + $product = new WC_Product_Simple($post_id); + + $this->set_product_price($product, $args['price'], $args['is_recurring'], $args['pay_period']); + + $product->save(); + + if (! empty($args['category']) ) { + + $this->assign_product_to_category($product->get_id(), $args['category']); + } + + if (! empty($args['country']) ) { + + $this->assign_product_to_country($product->get_id(), $args['country']); + } + + if (! empty($args['supplier']) ) { + + $this->assign_product_to_supplier($product->get_id(), $args['supplier']); + } + + return $product; + } + + /** + * @param WC_Product_Simple|int $product Product or Product ID + * @param int $price + * @param bool $is_recurring + * @param int $pay_period + */ + public function set_product_price($product, $price = 10, $is_recurring = false, $pay_period = 0) { + + if (is_numeric($product)) { + + $product = wc_get_product($product); + } + + Wiaas_Product_Pricing::set_product_price($product, $price, $is_recurring, $pay_period); + + $product->save(); + + delete_transient('wc_bundled_product_data'); + + + } + + /** + * @param WC_Product_Simple|int $product Product or Product ID + * @param string|int $category + */ + public function assign_product_to_category($product, $category) { + + if (is_numeric($product)) { + $product_id = $product; + } else { + $product_id = $product->get_id(); + } + + wp_add_object_terms($product_id, $category, 'product_cat'); + } + + /** + * @param WC_Product_Simple|int $product Product or Product ID + * @param string|int $country + */ + public function assign_product_to_country($product, $country) { + + if (is_numeric($product)) { + $product_id = $product; + } else { + $product_id = $product->get_id(); + } + + wp_add_object_terms($product_id, $country, 'product_country'); + } + + /** + * @param WC_Product_Simple|int $product Product or Product ID + * @param string|int $supplier + */ + public function assign_product_to_supplier($product, $supplier) { + + if (is_numeric($product)) { + $product_id = $product; + } else { + $product_id = $product->get_id(); + } + + wp_add_object_terms($product_id, $supplier, 'supplier'); + } + + /** + * @param array $args { + * @type array $products Simple products + * @type array $product_quantities Quantities for corresponding products from $products ( ex: [10, 5, 7] ) + * } + * + * @return WC_Product_Bundle + */ + public function create_product_bundle($args = array()) { + + $post_id = wp_insert_post(array( + 'post_type' => 'product', + 'post_status' => 'publish', + 'post_name' => 'Bundle', + 'post_title' => 'Product Bundle', + 'post_content' => 'Product Bundle', + 'post_excerpt' => 'Product Bundle' + ), true); + + $bundle = new WC_Product_Bundle($post_id); + + if (! empty($args['products']) ) { + + if ( empty($args['product_quantities']) ) { + + $args['product_quantities'] = array_fill(0, count($args['products']), 1); + } + + if ( count($args['product_quantities']) < count($args['products'])) { + + $args['product_quantities'] = array_pad($args['product_quantities'], count($args['products']), 1); + } + + $args['product_quantities'] = array_map('absint', $args['product_quantities']); + + $bundled_data = array(); + + foreach ($args['products'] as $index => $product) { + + $bundled_data[] = array( + 'product_id' => $product->get_id(), + 'quantity_min' => $args['product_quantities'][$index], + 'quantity_max' => $args['product_quantities'][$index], + 'priced_individually' => true + ); + } + + $bundle->set_bundled_data_items($bundled_data); + + $bundle->sync(true); + } + + $bundle->save(); + + if (! empty($args['country']) ) { + + $this->assign_product_to_country($bundle->get_id(), $args['country']); + } + + return $bundle; + } + + /** + * @param WC_Product_Bundle $bundle + * @param array $pricing_rules + * @param int $commission + * @param int $cost_margin + */ + public function set_product_bundle_prices($bundle, $pricing_rules = null, $commission = 50, $cost_margin = 0) { + + if ( empty($pricing_rules) ) { + + $pricing_rules = array( + 'purchase' => array( + 'minimal_fixed_price' => 500, + 'principal_amount' => 0, + 'minimal_services_price' => 0 + ) + ); + } + + Wiaas_Package_Pricing::set_package_prices($bundle, $pricing_rules, $commission, $cost_margin); + } +} \ No newline at end of file diff --git a/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-addon.php b/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-addon.php index 5a289a2..6f26ef0 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-addon.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-addon.php @@ -16,10 +16,10 @@ class Wiaas_Package_Addon_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Package_Addon::get_package_addons() */ function test_adding_package_addons() { - $package = $this->create_new_package(); + $package = $this->factory->product->create_product_bundle(); - $addon1 = $this->create_new_package(); - $addon2 = $this->create_new_package(); + $addon1 = $this->factory->product->create_product_bundle(); + $addon2 = $this->factory->product->create_product_bundle(); $addons_ids = array( $addon1->get_id(), $addon2->get_id() diff --git a/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-option-groups.php b/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-option-groups.php index 448c5ad..4423b3e 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-option-groups.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-option-groups.php @@ -16,12 +16,12 @@ class Wiaas_Package_Option_Groups_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Package_Option_Groups::get_package_option_groups() */ function test_adding_package_option_group() { - $package = $this->create_new_package(); + $package = $this->factory->product->create_product_bundle(); - $option_package1 = $this->create_new_package(); + $option_package1 = $this->factory->product->create_product_bundle(); Wiaas_Package_Type::set_package_type($option_package1->get_id(), 'option'); - $option_package2 = $this->create_new_package(); + $option_package2 = $this->factory->product->create_product_bundle(); Wiaas_Package_Type::set_package_type($option_package2->get_id(), 'option'); $option_group1 = array( @@ -79,9 +79,9 @@ class Wiaas_Package_Option_Groups_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Package_Option_Groups::get_group_name_for_package_option() */ function test_get_group_name_for_package_option() { - $package = $this->create_new_package(); + $package = $this->factory->product->create_product_bundle(); - $option_package = $this->create_new_package(); + $option_package = $this->factory->product->create_product_bundle(); Wiaas_Package_Type::set_package_type($option_package->get_id(), 'option'); $option_group = array( diff --git a/backend/app/plugins/wiaas/tests/unit-tests/package/class-wiaas-package-status.php b/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-status.php similarity index 71% rename from backend/app/plugins/wiaas/tests/unit-tests/package/class-wiaas-package-status.php rename to backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-status.php index f722379..3ed02b0 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/package/class-wiaas-package-status.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-status.php @@ -16,6 +16,7 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case { $this->assertNotEmpty($package_statuses); $this->assertContains(Wiaas_Package_Status::AVAILABLE, $package_statuses); + $this->assertContains(Wiaas_Package_Status::INVALID_MARGIN, $package_statuses); } /** @@ -23,7 +24,7 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Package_Type::get_package_status() */ function test_adding_package_status() { - $package = $this->create_new_package(); + $package = $this->factory->product->create_product_bundle(); Wiaas_Package_Status::set_package_status($package->get_id(), Wiaas_Package_Status::AVAILABLE); @@ -37,15 +38,15 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case { * Test package status update on simple product price update */ function test_package_status_update_on_simple_product_price_update() { - $product1 = $this->create_new_product(20); - $this->add_product_category($product1, 'hardware'); - $product2 = $this->create_new_product(20); - $this->add_product_category($product2, 'software'); + $product1 = $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )); - $package = $this->create_new_package(); - - $this->add_products_to_package($package, array( $product1, $product2)); + $package = $this->factory->product->create_product_bundle(array( + 'products' => array( + $product1, + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'software' )) + ) + )); $pricing_rules = array( 'purchase' => array( @@ -68,10 +69,13 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case { $cost_margin = 100; Wiaas_Package_Pricing::set_package_prices($package, $pricing_rules, $commision, $cost_margin); - $this->assertEquals(Wiaas_Package_Status::get_package_status($package)->get_id(), Wiaas_Package_Status::AVAILABLE); + $this->assertEquals(Wiaas_Package_Status::get_package_status($package->get_id()), Wiaas_Package_Status::AVAILABLE); - $product1->set_price(1000); - $this->assertEquals(Wiaas_Package_Status::get_package_status($package)->get_id(), Wiaas_Package_Status::MARGIN_EXCEEDED); + $this->factory->product->set_product_price($product1, 1000); + + Wiaas_Package_Pricing::on_product_update($product1->get_id()); + + $this->assertEquals(Wiaas_Package_Status::get_package_status($package->get_id()), Wiaas_Package_Status::INVALID_MARGIN); } @@ -79,15 +83,12 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case { * Test package status update on cost margin update */ function test_package_status_update_on_margin_cost_update() { - $product1 = $this->create_new_product(20); - $this->add_product_category($product1, 'hardware'); - - $product2 = $this->create_new_product(20); - $this->add_product_category($product2, 'software'); - - $package = $this->create_new_package(); - - $this->add_products_to_package($package, array( $product1, $product2)); + $package = $this->factory->product->create_product_bundle(array( + 'products' => array( + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )), + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'software' )) + ) + )); $pricing_rules = array( 'purchase' => array( @@ -108,13 +109,14 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case { ); $commision = 50; $cost_margin = 0; - + Wiaas_Package_Pricing::set_package_prices($package, $pricing_rules, $commision, $cost_margin); - $this->assertEquals(Wiaas_Package_Status::get_package_status($package)->get_id(), Wiaas_Package_Status::AVAILABLE); + $this->assertEquals(Wiaas_Package_Status::get_package_status($package->get_id()), Wiaas_Package_Status::AVAILABLE); $cost_margin = 1; Wiaas_Package_Pricing::set_package_prices($package, $pricing_rules, $commision, $cost_margin); - $this->assertEquals(Wiaas_Package_Status::get_package_status($package)->get_id(), Wiaas_Package_Status::MARGIN_EXCEEDED); + + $this->assertEquals(Wiaas_Package_Status::get_package_status($package->get_id()), Wiaas_Package_Status::INVALID_MARGIN); } } \ No newline at end of file diff --git a/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-type.php b/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-type.php index a2e5fd0..3c66c06 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-type.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/package/test-wiaas-package-type.php @@ -23,7 +23,7 @@ class Wiaas__Package_Type_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Package_Type::get_package_type() */ function test_adding_package_type() { - $package = $this->create_new_package(); + $package = $this->factory->product->create_product_bundle(); Wiaas_Package_Type::set_package_type($package->get_id(), 'standard'); diff --git a/backend/app/plugins/wiaas/tests/unit-tests/pricing/test-wiaas-package-cl-pricing.php b/backend/app/plugins/wiaas/tests/unit-tests/pricing/test-wiaas-package-cl-pricing.php index 6dcfcf5..59849b0 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/pricing/test-wiaas-package-cl-pricing.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/pricing/test-wiaas-package-cl-pricing.php @@ -6,17 +6,17 @@ class Wiaas_Package_CL_Pricing_Test extends Wiaas_Unit_Test_Case { function setUp() { parent::setUp(); - $this->shop_owner_id = wp_insert_term( - 'Shop owner organization', - Wiaas_User_Organization::TAXONOMY_NAME)['term_id']; + $this->shop_owner_id = $this->factory->organization->create_new_organization( + array( 'name' => 'Shop owner organization' ) + ); - $this->customer_id = wp_insert_term( - 'Customer Organization', - Wiaas_User_Organization::TAXONOMY_NAME)['term_id']; + $this->customer_id = $this->factory->organization->create_new_organization( + array( 'name' => 'Customer Organization' ) + ); - $package = $this->create_new_package(); - - $this->add_products_to_package($package, array( $this->create_new_product())); + $package = $this->factory->product->create_product_bundle(array( + 'products' => array( $this->factory->product->create_simple_product() ) + )); $this->package_id = $package->get_id(); diff --git a/backend/app/plugins/wiaas/tests/unit-tests/pricing/test-wiaas-package-pricing.php b/backend/app/plugins/wiaas/tests/unit-tests/pricing/test-wiaas-package-pricing.php index 3c73c3f..292daed 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/pricing/test-wiaas-package-pricing.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/pricing/test-wiaas-package-pricing.php @@ -8,7 +8,7 @@ class Wiaas_Package_Pricing_Test extends Wiaas_Unit_Test_Case { */ function test_set_and_get_package_prices() { - $package = $this->create_new_package(); + $package = $this->factory->product->create_product_bundle(); $pricing_rules = array( 'purchase' => array( diff --git a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-access-management.php b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-access-management.php new file mode 100644 index 0000000..0cc93de --- /dev/null +++ b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-access-management.php @@ -0,0 +1,196 @@ +customer_user_id = wp_insert_user(array( + 'user_login' => 'test_customer', + 'user_pass' => 'test', + 'user_email' => 'test_customer@mail.com', + 'role' => 'customer', + )); + + $this->organization_id = $this->factory->organization->create_new_organization(); + + $this->factory->organization->assign_user_to_organization($this->customer_user_id, $this->organization_id); + + $this->order = $this->factory->order->create_new_order(); + } + + function tearDown() { + parent::tearDown(); + + wp_set_current_user(1); + + wp_delete_user($this->customer_user_id); + + $this->factory->organization->delete_organizations(); + } + + /** + * @covers Wiaas_Access_Management::maybe_handle_product_access() + */ + function test_simple_product_has_admin_access() { + + $simple_product = $this->factory->product->create_simple_product(); + + Wiaas_Access_Management::maybe_handle_product_access($simple_product->get_id(), get_post($simple_product->get_id())); + + $access_group_ids = Groups_Post_Access::get_read_group_ids( $simple_product->get_id() ); + $this->assertEquals(1, count($access_group_ids)); + $admin_access_group = Groups_Group::read_by_name('admin'); + $this->assertEquals($admin_access_group->group_id, $access_group_ids[0]); + } + + /** + * @covers Wiaas_Access_Management::maybe_handle_product_access() + */ + function test_bundle_with_no_price_has_admin_access() { + + $bundle_product = $this->factory->product->create_product_bundle(); + + Wiaas_Access_Management::maybe_handle_product_access($bundle_product->get_id(), get_post($bundle_product->get_id())); + + $access_group_ids = Groups_Post_Access::get_read_group_ids( $bundle_product->get_id() ); + $this->assertEquals(1, count($access_group_ids)); + $admin_access_group = Groups_Group::read_by_name('admin'); + $this->assertEquals($admin_access_group->group_id, $access_group_ids[0]); + } + + /** + * @covers Wiaas_Access_Management::maybe_handle_product_access() + */ + function test_bundle_with_prices_has_registered_access() { + + $bundle_product = $this->factory->product->create_product_bundle(); + $this->factory->product->set_product_bundle_prices($bundle_product); + + Wiaas_Access_Management::maybe_handle_product_access($bundle_product->get_id(), get_post($bundle_product->get_id())); + + $access_group_ids = Groups_Post_Access::get_read_group_ids( $bundle_product->get_id() ); + $this->assertEquals(1, count($access_group_ids)); + $registered_access_group = Groups_Group::read_by_name('Registered'); + $this->assertEquals($registered_access_group->group_id, $access_group_ids[0]); + } + + /** + * @covers Wiaas_Access_Management::assign_order_to_customer_organization() + */ + function test_order_assigned_to_customer_organization() { + + wp_set_current_user($this->customer_user_id); + + Wiaas_Access_Management::assign_order_to_customer_organization($this->order->get_id()); + + $organization_access_group = Groups_Group::read_by_name('organization'); + $access_group_ids = Groups_Post_Access::get_read_group_ids( $this->order->get_id() ); + + $this->assertEquals(1, count($access_group_ids)); + $this->assertNotNull($access_group_ids[0]); + $this->assertEquals($organization_access_group->group_id, $access_group_ids[0]); + + } + + /** + * @covers Wiaas_Access_Management::assign_order_to_commercial_lead_organization() + */ + function test_order_assigned_to_commercial_lead_organization() { + + $this->order->update_meta_data('_wiaas_commercial_lead_id', $this->organization_id); + $this->order->save_meta_data(); + + Wiaas_Access_Management::assign_order_to_commercial_lead_organization($this->order->get_id()); + + $organization_access_group = Groups_Group::read_by_name('organization'); + $access_group_ids = Groups_Post_Access::get_read_group_ids( $this->order->get_id() ); + + $this->assertEquals(1, count($access_group_ids)); + $this->assertNotNull($access_group_ids[0]); + $this->assertEquals($organization_access_group->group_id, $access_group_ids[0]); + } + + /** + * @covers Wiaas_Access_Management::assign_order_to_supplier_organizations() + */ + function test_order_assigned_to_supplier_organizations() { + + $items = array(); + $items[] = $this->factory->order->create_new_simple_product_order_item(array( + 'category' => 'hardware', + 'supplier_organization_id' => $this->factory->organization->create_new_organization( array( 'name' => 'hardware supplier')) + )); + $items[] = $this->factory->order->create_new_simple_product_order_item(array( + 'category' => 'software', + 'supplier_organization_id' => $this->factory->organization->create_new_organization( array( 'name' => 'software supplier')) + )); + $items[] = $this->factory->order->create_new_simple_product_order_item(array( + 'category' => 'service', + 'supplier_organization_id' => $this->factory->organization->create_new_organization( array( 'name' => 'service supplier')) + )); + $items[] = $this->factory->order->create_new_simple_product_order_item(array( + 'category' => 'installation', + 'supplier_organization_id' => $this->factory->organization->create_new_organization( array( 'name' => 'installation supplier')) + )); + + $this->factory->order->add_order_items($this->order, $items); + + Wiaas_Access_Management::assign_order_to_supplier_organizations($this->order->get_id()); + + $access_group_ids = Groups_Post_Access::get_read_group_ids( $this->order->get_id() ); + $this->assertEquals(3, count($access_group_ids)); + + $organization_access_group = Groups_Group::read_by_name('hardware supplier'); + $this->assertContains($organization_access_group->group_id, $access_group_ids); + + $organization_access_group = Groups_Group::read_by_name('software supplier'); + $this->assertContains($organization_access_group->group_id, $access_group_ids); + + $organization_access_group = Groups_Group::read_by_name('service supplier'); + $this->assertContains($organization_access_group->group_id, $access_group_ids); + + } + + /** + * @covers Wiaas_Access_Management::assign_order_to_installation_organization() + */ + function test_order_assigned_to_installation_organization() { + + $bundle_item = $this->factory->order->create_new_bundle_order_item(); + + $installation_item = $this->factory->order->create_new_simple_product_order_item(array( + 'category' => 'installation', + 'supplier_organization_id' => $this->organization_id + )); + + $this->order->add_item($bundle_item); + $this->order->add_item($installation_item); + + Wiaas_Access_Management::assign_order_to_installation_organization($this->order, $bundle_item, $installation_item); + + $organization_access_group = Groups_Group::read_by_name('organization'); + $access_group_ids = Groups_Post_Access::get_read_group_ids( $this->order->get_id() ); + + $this->assertEquals(1, count($access_group_ids)); + $this->assertNotNull($access_group_ids[0]); + $this->assertEquals($organization_access_group->group_id, $access_group_ids[0]); + } +} \ No newline at end of file diff --git a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-countries.php b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-countries.php index be4b538..6b45bdc 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-countries.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-countries.php @@ -5,7 +5,7 @@ */ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case { - var $product, $package, $current_country = 'Sweden'; + var $product, $package, $current_country = 'se'; public function setUp() { parent::setUp(); @@ -13,14 +13,10 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case { # set admin as current user wp_set_current_user(1); - $this->product = $this->create_new_product(); - wp_set_object_terms($this->product->get_id(), $this->current_country, 'product_country', false); - clean_object_term_cache( $this->product->get_id(), 'product_country' ); + $this->product = $this->factory->product->create_simple_product(array( 'country' => $this->current_country )); - $this->package = $this->create_new_package(); - wp_set_object_terms($this->package->get_id(), $this->current_country, 'product_country', false); - clean_object_term_cache( $this->package->get_id(), 'product_country' ); + $this->package = $this->factory->product->create_product_bundle(array( 'country' => $this->current_country )); } @@ -33,15 +29,20 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case { $this->assertInstanceOf(WP_Taxonomy::class, $taxonomy); - $country_names = array_map(function($term) { - return $term->name; - }, get_terms(array( 'taxonomy' => 'product_country', 'hide_empty' => false ))); + $countries = get_terms( + array( + 'taxonomy' => 'product_country', + 'hide_empty' => false, + 'fields' => 'id=>slug' + ) + ); + $country_codes = array_values($countries); - $this->assertNotEmpty($country_names); + $this->assertNotEmpty($country_codes); - $this->assertContains('Sweden', $country_names); - $this->assertContains('Denmark', $country_names); - $this->assertContains('Finland', $country_names); + $this->assertContains('se', $country_codes); + $this->assertContains('fi', $country_codes); + $this->assertContains('dk', $country_codes); } /** @@ -53,7 +54,7 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case { $this->assertNotNull($retrieved_country, 'Product has not country!'); - $this->assertEquals($retrieved_country['name'], $this->current_country, 'Retrieved product country is incorrect!'); + $this->assertEquals($retrieved_country['code'], $this->current_country, 'Retrieved product country is incorrect!'); } @@ -65,7 +66,7 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case { $this->assertNotNull($retrieved_country, 'Package has not country!'); - $this->assertEquals($retrieved_country['name'], $this->current_country, 'Retrieved package country is incorrect!'); + $this->assertEquals($retrieved_country['code'], $this->current_country, 'Retrieved package country is incorrect!'); } } \ No newline at end of file diff --git a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-order.php b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-order.php index a789e8c..1bcb655 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-order.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-order.php @@ -6,7 +6,7 @@ class Wiaas_Order_Test extends Wiaas_Unit_Test_Case { - var $customer_id, $customer_organization_id, $customer_organization_name, $order_id; + var $customer_id, $customer_organization_id, $customer_organization_name, $order; public function setUp() { parent::setUp(); @@ -23,26 +23,15 @@ class Wiaas_Order_Test extends Wiaas_Unit_Test_Case { $this->customer_organization_name = 'test-customer-organization'; # create customer organization - $this->customer_organization_id = wp_insert_term( - $this->customer_organization_name, - Wiaas_User_Organization::TAXONOMY_NAME - )['term_id']; + $this->customer_organization_id = $this->factory->organization->create_new_organization( + array( 'name' => $this->customer_organization_name ) + ); - update_user_meta($this->customer_id, '_wiaas_organization_id', $this->customer_organization_id); - - # add customer to organization - wp_set_terms_for_user( - $this->customer_id, - Wiaas_User_Organization::TAXONOMY_NAME, - [$this->customer_organization_name]); + $this->factory->organization->assign_user_to_organization($this->customer_id, $this->customer_organization_id); wp_set_current_user($this->customer_id); - $order = wc_create_order(array( - 'customer_id' => $this->customer_id - )); - - $this->order_id = $order->get_id(); + $this->order = $this->factory->order->create_new_order(); } function tearDown() { @@ -57,46 +46,6 @@ class Wiaas_Order_Test extends Wiaas_Unit_Test_Case { Wiaas_User_Organization::TAXONOMY_NAME); } - /** - * @covers Wiaas_Order::assign_order_to_organization() - */ - function test_order_assigned_to_customer_organization() { - - $organization_access_group = Groups_Group::read_by_name($this->customer_organization_name); - $access_group_ids = Groups_Post_Access::get_read_group_ids( $this->order_id ); - - $this->assertEquals(1, count($access_group_ids)); - $this->assertNotNull($access_group_ids[0]); - $this->assertEquals($organization_access_group->group_id, $access_group_ids[0]); - } - - /** - * @covers Wiaas_Order::check_order_access() - */ - function test_order_customer_can_access_order() { - - $has_access = Wiaas_Order::check_order_access(true, 'view', $this->order_id, 'shop_order'); - - $this->assertTrue($has_access); - } - - /** - * @covers Wiaas_Order::check_order_access() - */ - function test_customer_cannot_access_order_when_not_in_organization() { - $customer_id = wc_create_new_customer( - 'test_customer1@mail.com', - 'test_customer1', - 'test1'); - wp_set_current_user($customer_id); - - $this->assertTrue(Groups_Post_Access::handles_post_type('shop_order')); - - $has_access = Wiaas_Order::check_order_access(true, 'view', $this->order_id, 'shop_order'); - - $this->assertFalse($has_access); - } - /** * @covers Wiaas_Order::wiaas_prepare_rest_orders_query() */ @@ -139,10 +88,12 @@ class Wiaas_Order_Test extends Wiaas_Unit_Test_Case { 'line_items' => array() ); + $this->factory->order->add_customer_organization_info($this->order, $this->customer_organization_id); + $order_rest_response = Wiaas_Order::transform_rest_order( new WP_REST_Response($order_response), - wc_get_order($this->order_id), - array( 'id' => $this->order_id)); + $this->order, + array( 'id' => $this->order->get_id() )); $transformed_order_response = $order_rest_response->get_data(); diff --git a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-pricing.php b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-pricing.php index a8d766c..6f81118 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-pricing.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-pricing.php @@ -3,15 +3,16 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case { private function _create_package_to_sell() { - $product1 = $this->create_new_product(20); - $this->add_product_category($product1, 'hardware'); - - $product2 = $this->create_new_product(20, true, 2); - $this->add_product_category($product2, 'installation'); - - $package = $this->create_new_package(); - - $this->add_products_to_package($package, array( $product1, $product2)); + $package = $this->factory->product->create_product_bundle(array( + 'products' => array( + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )), + $this->factory->product->create_simple_product(array( + 'price' => 20, + 'is_recurring' => true, + 'pay_period' => 2, + 'category' => 'installation' )) + ) + )); $pricing_rules = array( 'purchase' => array( @@ -32,17 +33,16 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case { ); $commision = 50; $cost_margin = 0; - Wiaas_Package_Pricing::set_package_prices($package, $pricing_rules, $commision, $cost_margin); - $customer_id = wp_create_term( - 'Customer', - Wiaas_User_Organization::TAXONOMY_NAME - )['term_id']; + $this->factory->product->set_product_bundle_prices($package, $pricing_rules, $commision, $cost_margin); - $commercial_lead_id = wp_create_term( - 'Commercial Lead', - Wiaas_User_Organization::TAXONOMY_NAME - )['term_id']; + $customer_id = $this->factory->organization->create_new_organization( + array( 'name' => 'Customer' ) + ); + + $commercial_lead_id = $this->factory->organization->create_new_organization( + array( 'name' => 'Commercial Lead' ) + ); self::_set_package_default_extras($commercial_lead_id, $package->get_id()); @@ -97,7 +97,7 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Pricing::get_product_total_cost() */ function test_get_fixed_product_total_cost() { - $product = $this->create_new_product(); + $product = $this->factory->product->create_simple_product(); $total_cost = Wiaas_Pricing::get_product_total_cost($product); @@ -108,7 +108,11 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Pricing::get_product_total_cost() */ function test_get_recurring_product_total_cost() { - $product = $this->create_new_product(10, true, 2); + $product = $this->factory->product->create_simple_product(array( + 'price' => 10, + 'is_recurring' => true, + 'pay_period' => 2 + )); $total_cost = Wiaas_Pricing::get_product_total_cost($product); @@ -119,15 +123,12 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Pricing::get_package_total_cost() */ function test_get_package_with_fixed_products_total_cost() { - $product1 = $this->create_new_product(20); - $this->add_product_category($product1, 'hardware'); - - $product2 = $this->create_new_product(20); - $this->add_product_category($product2, 'software'); - - $package = $this->create_new_package(); - - $this->add_products_to_package($package, array( $product1, $product2)); + $package = $this->factory->product->create_product_bundle(array( + 'products' => array( + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )), + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'software' )) + ) + )); $expected_total_price = 40; @@ -140,15 +141,12 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Pricing::get_package_total_cost() */ function test_get_package_with_recurring_products_total_cost() { - $product1 = $this->create_new_product(20); - $this->add_product_category($product1, 'hardware'); - - $product2 = $this->create_new_product(20, true, 2); - $this->add_product_category($product2, 'software'); - - $package = $this->create_new_package(); - - $this->add_products_to_package($package, array( $product1, $product2)); + $package = $this->factory->product->create_product_bundle(array( + 'products' => array( + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )), + $this->factory->product->create_simple_product(array( 'price' => 20, 'is_recurring' => true, 'pay_period' => 2, 'category' => 'software' )) + ) + )); $expected_total_price = 60; @@ -161,15 +159,12 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Pricing::get_package_total_cost() */ function test_package_with_single_installation_product_total_cost() { - $product1 = $this->create_new_product(20); - $this->add_product_category($product1, 'hardware'); - - $product2 = $this->create_new_product(20, true, 2); - $this->add_product_category($product2, 'installation'); - - $package = $this->create_new_package(); - - $this->add_products_to_package($package, array( $product1, $product2)); + $package = $this->factory->product->create_product_bundle(array( + 'products' => array( + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )), + $this->factory->product->create_simple_product(array( 'price' => 20, 'is_recurring' => true, 'pay_period' => 2, 'category' => 'installation' )) + ) + )); $expected_total_price = 60; @@ -182,20 +177,13 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case { * @covers Wiaas_Pricing::get_package_total_cost() */ function test_package_with_multiple_installation_products_total_cost() { - $product1 = $this->create_new_product(20); - $this->add_product_category($product1, 'hardware'); - - $product2 = $this->create_new_product(10, true, 2); - $this->add_product_category($product2, 'installation'); - - $this->assertTrue(Wiaas_Product_Category::is_installation($product2)); - - $product3 = $this->create_new_product(20, true, 2); - $this->add_product_category($product3, 'installation'); - - $package = $this->create_new_package(); - - $this->add_products_to_package($package, array( $product1, $product2, $product3)); + $package = $this->factory->product->create_product_bundle(array( + 'products' => array( + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )), + $this->factory->product->create_simple_product(array( 'price' => 20, 'is_recurring' => true, 'pay_period' => 2, 'category' => 'installation' )), + $this->factory->product->create_simple_product(array( 'price' => 20, 'is_recurring' => true, 'pay_period' => 2, 'category' => 'installation' )) + ) + )); // price will be 20 + 20*2 , more expensive installation will be applied $expected_total_price = 60; @@ -246,12 +234,11 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case { function test_get_addon_package_customer_price() { list( $package, $expected_prices, $customer_id, $commercial_lead_id ) = $this->_create_package_to_sell(); - $addon_product = $this->create_new_product(20); - $this->add_product_category($addon_product, 'hardware'); - - $addon_package = $this->create_new_package(); - - $this->add_products_to_package($addon_package, array($addon_product)); + $addon_package = $this->factory->product->create_product_bundle(array( + 'products' => array( + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )), + ) + )); $pricing_rules = array( 'purchase' => array( @@ -330,12 +317,11 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case { function test_get_option_package_customer_price() { list( $package, $customer_id, $commercial_lead_id ) = $this->_create_package_to_sell(); - $option_product = $this->create_new_product(20); - $this->add_product_category($option_product, 'hardware'); - - $option_package = $this->create_new_package(); - - $this->add_products_to_package($option_package, array($option_product)); + $option_package = $this->factory->product->create_product_bundle(array( + 'products' => array( + $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )), + ) + )); $pricing_rules = array( 'purchase' => array( diff --git a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-templates.php b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-templates.php index e3f008d..3ff3d18 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-templates.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-templates.php @@ -19,11 +19,10 @@ class Wiaas_Templates_Test extends Wiaas_Unit_Test_Case { ); $this->template = $this->create_new_wiaas_template(); - $this->product = $this->create_new_product(); - $this->package = $this->create_new_package(); - $this->add_products_to_package($this->package, $this->product); - - + $this->product = $this->factory->product->create_simple_product(); + $this->package = $this->factory->product->create_product_bundle(array( + 'products' => $this->product + )); } public function test_template_category_taxonomy_created() { diff --git a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-user-organization.php b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-user-organization.php index 8bb9718..fada82a 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-user-organization.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-user-organization.php @@ -22,28 +22,18 @@ class Wiaas_User_Organization_Test extends Wiaas_Unit_Test_Case { $this->user_department_name = 'test_department'; - # create organization - $this->user_organization_id = wp_insert_term( - $this->user_organization_name, - Wiaas_User_Organization::TAXONOMY_NAME - )['term_id']; + // create organization + $this->user_organization_id = $this->factory->organization->create_new_organization( + array( 'name' => $this->user_organization_name ) + ); - update_user_meta($this->user_id, '_wiaas_organization_id', $this->user_organization_id); + // create department + $this->user_department_id = $this->factory->organization->create_new_organization( + array( 'name' => $this->user_department_name, 'parent_id' => $this->user_organization_id ) + ); - # create department - $this->user_department_id = wp_insert_term( - $this->user_department_name, - Wiaas_User_Organization::TAXONOMY_NAME, - array( - 'parent' => $this->user_organization_id - ) - )['term_id']; - - # assign user to organization - wp_set_terms_for_user( - $this->user_id, - Wiaas_User_Organization::TAXONOMY_NAME, - [$this->user_organization_name]); + // assign user to organization + $this->factory->organization->assign_user_to_organization($this->user_id, $this->user_organization_id); } function tearDown() { @@ -53,12 +43,7 @@ class Wiaas_User_Organization_Test extends Wiaas_Unit_Test_Case { wp_delete_user($this->user_id); - wp_delete_term( - $this->user_organization_id, - Wiaas_User_Organization::TAXONOMY_NAME); - wp_delete_term( - $this->user_department_id, - Wiaas_User_Organization::TAXONOMY_NAME); + $this->factory->organization->delete_organizations(); } /** diff --git a/backend/app/plugins/wiaas/tests/wiaas-unit-test-case.php b/backend/app/plugins/wiaas/tests/wiaas-unit-test-case.php index f83ff95..a9ba184 100644 --- a/backend/app/plugins/wiaas/tests/wiaas-unit-test-case.php +++ b/backend/app/plugins/wiaas/tests/wiaas-unit-test-case.php @@ -2,13 +2,18 @@ class Wiaas_Unit_Test_Case extends WP_UnitTestCase { + public $factory; + /** * Executes any db migrations that are done to * `wp_options` table since it is deleted on every execution */ function setUp() { parent::setUp(); - wp_set_current_user(1); + + $this->factory = new Wiaas_Unit_Test_Factory(); + + wp_set_current_user(1); # Setup Gravity info since options table is deleted after each test gf_upgrade()->install(); @@ -28,6 +33,8 @@ class Wiaas_Unit_Test_Case extends WP_UnitTestCase { Wiaas_Order_Project::register_order_project_taxonomy(); Wiaas_Product_Supplier::register_supplier_taxonomy(); + + Wiaas_Package_Status::register_package_status_taxonomy(); define('WP_TEST_IN_PROGRESS',true); } diff --git a/backend/app/plugins/wiaas/tests/wiaas-unit-test-factory.php b/backend/app/plugins/wiaas/tests/wiaas-unit-test-factory.php deleted file mode 100644 index 4933eae..0000000 --- a/backend/app/plugins/wiaas/tests/wiaas-unit-test-factory.php +++ /dev/null @@ -1,17 +0,0 @@ - Date: Sun, 2 Dec 2018 22:59:20 +0100 Subject: [PATCH 2/2] Fix countries --- .../wiaas/includes/class-wiaas-countries.php | 4 +-- .../tests/unit-tests/test-wiaas-countries.php | 25 ++++++------------- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-countries.php b/backend/app/plugins/wiaas/includes/class-wiaas-countries.php index 7d2cbfe..7d14ff3 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-countries.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-countries.php @@ -175,9 +175,7 @@ class Wiaas_Countries { } $name = $choices[$code]; - $result = wp_insert_term($name, 'product_country', array( - 'slug' => $code - )); + $result = wp_insert_term($name, 'product_country'); if (is_wp_error($result)) { continue; diff --git a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-countries.php b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-countries.php index 6b45bdc..a352811 100644 --- a/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-countries.php +++ b/backend/app/plugins/wiaas/tests/unit-tests/test-wiaas-countries.php @@ -5,7 +5,7 @@ */ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case { - var $product, $package, $current_country = 'se'; + var $product, $package; public function setUp() { parent::setUp(); @@ -13,10 +13,10 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case { # set admin as current user wp_set_current_user(1); - $this->product = $this->factory->product->create_simple_product(array( 'country' => $this->current_country )); + $this->product = $this->factory->product->create_simple_product(array( 'country' => 'sweden' )); - $this->package = $this->factory->product->create_product_bundle(array( 'country' => $this->current_country )); + $this->package = $this->factory->product->create_product_bundle(array( 'country' => 'sweden' )); } @@ -25,20 +25,9 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case { */ function test_available_countries_created() { // test taxonomy is available - $taxonomy = get_taxonomy('product_country'); + $countries = Wiaas_Countries::get_available_countries(); - $this->assertInstanceOf(WP_Taxonomy::class, $taxonomy); - - $countries = get_terms( - array( - 'taxonomy' => 'product_country', - 'hide_empty' => false, - 'fields' => 'id=>slug' - ) - ); - $country_codes = array_values($countries); - - $this->assertNotEmpty($country_codes); + $country_codes = wp_list_pluck($countries, 'code'); $this->assertContains('se', $country_codes); $this->assertContains('fi', $country_codes); @@ -54,7 +43,7 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case { $this->assertNotNull($retrieved_country, 'Product has not country!'); - $this->assertEquals($retrieved_country['code'], $this->current_country, 'Retrieved product country is incorrect!'); + $this->assertEquals($retrieved_country['name'], 'Sweden', 'Retrieved product country is incorrect!'); } @@ -66,7 +55,7 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case { $this->assertNotNull($retrieved_country, 'Package has not country!'); - $this->assertEquals($retrieved_country['code'], $this->current_country, 'Retrieved package country is incorrect!'); + $this->assertEquals($retrieved_country['name'], 'Sweden', 'Retrieved package country is incorrect!'); } } \ No newline at end of file