mirror of
https://github.com/wp-graphql/wp-graphql-woocommerce.git
synced 2026-08-14 12:53:44 +02:00
restoreCartItem changed to restoreCartItems. CartMutationTests updated.
This commit is contained in:
@@ -61,7 +61,7 @@ use WPGraphQL\Extensions\WooCommerce\Mutation\Customer_Update;
|
||||
use WPGraphQL\Extensions\WooCommerce\Mutation\Cart_Add_Item;
|
||||
use WPGraphQL\Extensions\WooCommerce\Mutation\Cart_Update_Item_Quantity;
|
||||
use WPGraphQL\Extensions\WooCommerce\Mutation\Cart_Remove_Items;
|
||||
use WPGraphQL\Extensions\WooCommerce\Mutation\Cart_Restore_Item;
|
||||
use WPGraphQL\Extensions\WooCommerce\Mutation\Cart_Restore_Items;
|
||||
use WPGraphQL\Extensions\WooCommerce\Mutation\Cart_Empty;
|
||||
use WPGraphQL\Extensions\WooCommerce\Mutation\Cart_Apply_Coupon;
|
||||
use WPGraphQL\Extensions\WooCommerce\Mutation\Cart_Remove_Coupon;
|
||||
@@ -148,7 +148,7 @@ class Actions {
|
||||
Cart_Add_Item::register_mutation();
|
||||
Cart_Update_Item_Quantity::register_mutation();
|
||||
Cart_Remove_Items::register_mutation();
|
||||
Cart_Restore_Item::register_mutation();
|
||||
Cart_Restore_Items::register_mutation();
|
||||
Cart_Empty::register_mutation();
|
||||
Cart_Apply_Coupon::register_mutation();
|
||||
Cart_Remove_Coupon::register_mutation();
|
||||
|
||||
+20
-27
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
/**
|
||||
* Mutation - restoreCartItem
|
||||
* Mutation - restoreCartItems
|
||||
*
|
||||
* Registers mutation for restoring a removed cart item to the cart.
|
||||
* Registers mutation for restoring removed cart item(s) to the cart.
|
||||
*
|
||||
* @package WPGraphQL\Extensions\WooCommerce\Mutation
|
||||
* @since 0.1.0
|
||||
@@ -13,17 +13,18 @@ namespace WPGraphQL\Extensions\WooCommerce\Mutation;
|
||||
use GraphQL\Error\UserError;
|
||||
use GraphQL\Type\Definition\ResolveInfo;
|
||||
use WPGraphQL\AppContext;
|
||||
use WPGraphQL\Extensions\WooCommerce\Data\Mutation\Cart_Mutation;
|
||||
|
||||
/**
|
||||
* Class - Cart_Restore_Item
|
||||
* Class - Cart_Restore_Items
|
||||
*/
|
||||
class Cart_Restore_Item {
|
||||
class Cart_Restore_Items {
|
||||
/**
|
||||
* Registers mutation
|
||||
*/
|
||||
public static function register_mutation() {
|
||||
register_graphql_mutation(
|
||||
'restoreCartItem',
|
||||
'restoreCartItems',
|
||||
array(
|
||||
'inputFields' => self::get_input_fields(),
|
||||
'outputFields' => self::get_output_fields(),
|
||||
@@ -39,8 +40,8 @@ class Cart_Restore_Item {
|
||||
*/
|
||||
public static function get_input_fields() {
|
||||
$input_fields = array(
|
||||
'key' => array(
|
||||
'type' => array( 'non_null' => 'ID' ),
|
||||
'keys' => array(
|
||||
'type' => array( 'list_of' => 'ID' ),
|
||||
'description' => __( 'Cart item key of the item being removed', 'wp-graphql-woocommerce' ),
|
||||
),
|
||||
);
|
||||
@@ -54,14 +55,7 @@ class Cart_Restore_Item {
|
||||
* @return array
|
||||
*/
|
||||
public static function get_output_fields() {
|
||||
return array(
|
||||
'cartItem' => array(
|
||||
'type' => 'CartItem',
|
||||
'resolve' => function ( $payload ) {
|
||||
return WC()->cart->get_cart_item( $payload['id'] );
|
||||
},
|
||||
),
|
||||
);
|
||||
return Cart_Remove_Items::get_output_fields();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -71,23 +65,22 @@ class Cart_Restore_Item {
|
||||
*/
|
||||
public static function mutate_and_get_payload() {
|
||||
return function( $input, AppContext $context, ResolveInfo $info ) {
|
||||
// Retrieve product database ID if relay ID provided.
|
||||
if ( empty( $input['key'] ) ) {
|
||||
throw new UserError( __( 'No cart item key provided', 'wp-graphql-woocommerce' ) );
|
||||
if ( empty( $input['keys'] ) ) {
|
||||
throw new UserError( __( 'No cart item keys provided', 'wp-graphql-woocommerce' ) );
|
||||
}
|
||||
|
||||
// Get WC_Cart instance.
|
||||
$cart = WC()->cart;
|
||||
|
||||
// Restore cart item.
|
||||
$success = $cart->restore_cart_item( $input['key'] );
|
||||
if ( false === $success ) {
|
||||
/* translators: Cart item not found message */
|
||||
throw new UserError( sprintf( __( 'Failed to restore cart item with the key: %s', 'wp-graphql-woocommerce' ), $input['key'] ) );
|
||||
// Restore cart items.
|
||||
foreach ( $input['keys'] as $key ) {
|
||||
$success = \WC()->cart->restore_cart_item( $key );
|
||||
if ( false === $success ) {
|
||||
/* translators: Cart item not found message */
|
||||
throw new UserError( sprintf( __( 'Failed to restore cart item with the key: %s', 'wp-graphql-woocommerce' ), $key ) );
|
||||
}
|
||||
}
|
||||
$cart_items = Cart_Mutation::retrieve_cart_items( $input, $context, $info, 'restore' );
|
||||
|
||||
// Return payload.
|
||||
return array( 'id' => $input['key'] );
|
||||
return array( 'items' => $cart_items );
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -91,6 +91,40 @@ class CartMutationsTest extends \Codeception\TestCase\WPTestCase {
|
||||
return $actual;
|
||||
}
|
||||
|
||||
private function restoreItems( $input ) {
|
||||
$mutation = '
|
||||
mutation restoreCartItems( $input: RestoreCartItemsInput! ) {
|
||||
restoreCartItems( input: $input ) {
|
||||
clientMutationId
|
||||
cartItems {
|
||||
key
|
||||
product {
|
||||
id
|
||||
}
|
||||
variation {
|
||||
id
|
||||
}
|
||||
quantity
|
||||
subtotal
|
||||
subtotalTax
|
||||
total
|
||||
tax
|
||||
}
|
||||
}
|
||||
}
|
||||
';
|
||||
|
||||
$actual = graphql(
|
||||
array(
|
||||
'query' => $mutation,
|
||||
'operation_name' => 'restoreCartItems',
|
||||
'variables' => array( 'input' => $input ),
|
||||
)
|
||||
);
|
||||
|
||||
return $actual;
|
||||
}
|
||||
|
||||
// tests
|
||||
public function testAddToCartMutationWithProduct() {
|
||||
$product_id = $this->product->create_simple();
|
||||
@@ -411,53 +445,38 @@ class CartMutationsTest extends \Codeception\TestCase\WPTestCase {
|
||||
$this->assertTrue( \WC()->cart->is_empty() );
|
||||
}
|
||||
|
||||
public function testRestoreCartItemMutation() {
|
||||
$cart = WC()->cart;
|
||||
|
||||
// Create products.
|
||||
public function testRestoreCartItemsMutation() {
|
||||
// Create products
|
||||
$ids = $this->variation->create( $this->product->create_variable() );
|
||||
|
||||
// Create cart item.
|
||||
$cart_item = $cart->get_cart_item(
|
||||
$cart->add_to_cart( $ids['product'], 2, $ids['variations'][0] )
|
||||
);
|
||||
|
||||
// Remove cart item.
|
||||
$cart->remove_cart_item( $cart_item['key'] );
|
||||
|
||||
$mutation = '
|
||||
mutation restoreCartItem( $input: RestoreCartItemInput! ) {
|
||||
restoreCartItem( input: $input ) {
|
||||
clientMutationId
|
||||
cartItem {
|
||||
key
|
||||
product {
|
||||
id
|
||||
}
|
||||
variation {
|
||||
id
|
||||
}
|
||||
quantity
|
||||
subtotal
|
||||
subtotalTax
|
||||
total
|
||||
tax
|
||||
}
|
||||
}
|
||||
}
|
||||
';
|
||||
|
||||
$variables = array(
|
||||
'input' => array(
|
||||
'clientMutationId' => 'someId',
|
||||
'key' => $cart_item['key'],
|
||||
),
|
||||
);
|
||||
$actual = graphql(
|
||||
// Add item.
|
||||
$addToCart = $this->addToCart(
|
||||
array(
|
||||
'query' => $mutation,
|
||||
'operation_name' => 'restoreCartItem',
|
||||
'variables' => $variables,
|
||||
'clientMutationId' => 'someId',
|
||||
'productId' => $ids['product'],
|
||||
'quantity' => 2,
|
||||
'variationId' => $ids['variations'][0],
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertArrayHasKey('data', $addToCart );
|
||||
$this->assertArrayHasKey('addToCart', $addToCart['data'] );
|
||||
$this->assertArrayHasKey('cartItem', $addToCart['data']['addToCart'] );
|
||||
$cartItem = $addToCart['data']['addToCart']['cartItem'];
|
||||
$key = $cartItem['key'];
|
||||
|
||||
// Remove item.
|
||||
$this->removeItemsFromCart(
|
||||
array(
|
||||
'clientMutationId' => 'someId',
|
||||
'all' => true
|
||||
)
|
||||
);
|
||||
|
||||
$actual = $this->restoreItems(
|
||||
array(
|
||||
'clientMutationId' => 'someId',
|
||||
'keys' => array( $key ),
|
||||
)
|
||||
);
|
||||
|
||||
@@ -466,28 +485,83 @@ class CartMutationsTest extends \Codeception\TestCase\WPTestCase {
|
||||
|
||||
$expected = array(
|
||||
'data' => array(
|
||||
'restoreCartItem' => array(
|
||||
'restoreCartItems' => array(
|
||||
'clientMutationId' => 'someId',
|
||||
'cartItem' => array(
|
||||
'key' => $cart_item['key'],
|
||||
'product' => array(
|
||||
'id' => $this->product->to_relay_id( $cart_item['product_id'] ),
|
||||
),
|
||||
'variation' => array(
|
||||
'id' => $this->variation->to_relay_id( $cart_item['variation_id'] ),
|
||||
),
|
||||
'quantity' => $cart_item['quantity'],
|
||||
'subtotal' => floatval( $cart_item['line_subtotal'] ),
|
||||
'subtotalTax' => floatval( $cart_item['line_subtotal_tax'] ),
|
||||
'total' => floatval( $cart_item['line_total'] ),
|
||||
'tax' => floatval( $cart_item['line_tax'] ),
|
||||
),
|
||||
'cartItems' => array( $cartItem ),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEqualSets( $expected, $actual );
|
||||
$this->assertNotEmpty( \WC()->cart->get_cart_item( $cart_item['key'] ) );
|
||||
$this->assertNotEmpty( \WC()->cart->get_cart_item( $key ) );
|
||||
}
|
||||
|
||||
public function testRestoreCartItemsMutationWithMultipleItems() {
|
||||
// Create products
|
||||
$ids = $this->variation->create( $this->product->create_variable() );
|
||||
|
||||
// Add item 1.
|
||||
$addToCart = $this->addToCart(
|
||||
array(
|
||||
'clientMutationId' => 'someId',
|
||||
'productId' => $ids['product'],
|
||||
'quantity' => 2,
|
||||
'variationId' => $ids['variations'][0],
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertArrayHasKey('data', $addToCart );
|
||||
$this->assertArrayHasKey('addToCart', $addToCart['data'] );
|
||||
$this->assertArrayHasKey('cartItem', $addToCart['data']['addToCart'] );
|
||||
$cartItem1 = $addToCart['data']['addToCart']['cartItem'];
|
||||
$key1 = $cartItem1['key'];
|
||||
|
||||
// Add item 2.
|
||||
$addToCart = $this->addToCart(
|
||||
array(
|
||||
'clientMutationId' => 'someId',
|
||||
'productId' => $ids['product'],
|
||||
'quantity' => 1,
|
||||
'variationId' => $ids['variations'][1],
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertArrayHasKey('data', $addToCart );
|
||||
$this->assertArrayHasKey('addToCart', $addToCart['data'] );
|
||||
$this->assertArrayHasKey('cartItem', $addToCart['data']['addToCart'] );
|
||||
$cartItem2 = $addToCart['data']['addToCart']['cartItem'];
|
||||
$key2 = $cartItem2['key'];
|
||||
|
||||
// Remove items.
|
||||
$this->removeItemsFromCart(
|
||||
array(
|
||||
'clientMutationId' => 'someId',
|
||||
'all' => true
|
||||
)
|
||||
);
|
||||
|
||||
$actual = $this->restoreItems(
|
||||
array(
|
||||
'clientMutationId' => 'someId',
|
||||
'keys' => array( $key1, $key2 ),
|
||||
)
|
||||
);
|
||||
|
||||
// use --debug flag to view.
|
||||
codecept_debug( $actual );
|
||||
|
||||
$expected = array(
|
||||
'data' => array(
|
||||
'restoreCartItems' => array(
|
||||
'clientMutationId' => 'someId',
|
||||
'cartItems' => array( $cartItem1, $cartItem2 ),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEqualSets( $expected, $actual );
|
||||
$this->assertNotEmpty( \WC()->cart->get_cart_item( $key1 ) );
|
||||
$this->assertNotEmpty( \WC()->cart->get_cart_item( $key2 ) );
|
||||
}
|
||||
|
||||
public function testEmptyCartMutation() {
|
||||
|
||||
Vendored
+1
-1
@@ -4,4 +4,4 @@
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInitc0b9c25b0e0e6597e0a2526e78def682::getLoader();
|
||||
return ComposerAutoloaderInit000da6d626ad7439f4c7712f5e605082::getLoader();
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ return array(
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Empty' => $baseDir . '/src/mutation/class-cart-empty.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Remove_Coupon' => $baseDir . '/src/mutation/class-cart-remove-coupon.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Remove_Items' => $baseDir . '/src/mutation/class-cart-remove-items.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Restore_Item' => $baseDir . '/src/mutation/class-cart-restore-item.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Restore_Items' => $baseDir . '/src/mutation/class-cart-restore-items.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Update_Item_Quantity' => $baseDir . '/src/mutation/class-cart-update-item-quantity.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Customer_Register' => $baseDir . '/src/mutation/class-customer-register.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Customer_Update' => $baseDir . '/src/mutation/class-customer-update.php',
|
||||
|
||||
Vendored
+4
-4
@@ -2,7 +2,7 @@
|
||||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInitc0b9c25b0e0e6597e0a2526e78def682
|
||||
class ComposerAutoloaderInit000da6d626ad7439f4c7712f5e605082
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitc0b9c25b0e0e6597e0a2526e78def682
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInitc0b9c25b0e0e6597e0a2526e78def682', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInit000da6d626ad7439f4c7712f5e605082', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInitc0b9c25b0e0e6597e0a2526e78def682', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit000da6d626ad7439f4c7712f5e605082', 'loadClassLoader'));
|
||||
|
||||
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
||||
if ($useStaticLoader) {
|
||||
require_once __DIR__ . '/autoload_static.php';
|
||||
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInitc0b9c25b0e0e6597e0a2526e78def682::getInitializer($loader));
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit000da6d626ad7439f4c7712f5e605082::getInitializer($loader));
|
||||
} else {
|
||||
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||
foreach ($map as $namespace => $path) {
|
||||
|
||||
Vendored
+5
-5
@@ -4,7 +4,7 @@
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInitc0b9c25b0e0e6597e0a2526e78def682
|
||||
class ComposerStaticInit000da6d626ad7439f4c7712f5e605082
|
||||
{
|
||||
public static $prefixLengthsPsr4 = array (
|
||||
'W' =>
|
||||
@@ -73,7 +73,7 @@ class ComposerStaticInitc0b9c25b0e0e6597e0a2526e78def682
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Empty' => __DIR__ . '/../..' . '/src/mutation/class-cart-empty.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Remove_Coupon' => __DIR__ . '/../..' . '/src/mutation/class-cart-remove-coupon.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Remove_Items' => __DIR__ . '/../..' . '/src/mutation/class-cart-remove-items.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Restore_Item' => __DIR__ . '/../..' . '/src/mutation/class-cart-restore-item.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Restore_Items' => __DIR__ . '/../..' . '/src/mutation/class-cart-restore-items.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Cart_Update_Item_Quantity' => __DIR__ . '/../..' . '/src/mutation/class-cart-update-item-quantity.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Customer_Register' => __DIR__ . '/../..' . '/src/mutation/class-customer-register.php',
|
||||
'WPGraphQL\\Extensions\\WooCommerce\\Mutation\\Customer_Update' => __DIR__ . '/../..' . '/src/mutation/class-customer-update.php',
|
||||
@@ -115,9 +115,9 @@ class ComposerStaticInitc0b9c25b0e0e6597e0a2526e78def682
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInitc0b9c25b0e0e6597e0a2526e78def682::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInitc0b9c25b0e0e6597e0a2526e78def682::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInitc0b9c25b0e0e6597e0a2526e78def682::$classMap;
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit000da6d626ad7439f4c7712f5e605082::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit000da6d626ad7439f4c7712f5e605082::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit000da6d626ad7439f4c7712f5e605082::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user