mirror of
https://github.com/wp-graphql/wp-graphql-woocommerce.git
synced 2026-08-14 12:53:44 +02:00
397 lines
12 KiB
PHP
397 lines
12 KiB
PHP
<?php
|
|
|
|
class DownloadableItemQueriesTest extends \Codeception\TestCase\WPTestCase
|
|
{
|
|
|
|
public function setUp() {
|
|
// before
|
|
parent::setUp();
|
|
|
|
// your set up methods here
|
|
$this->customers = $this->getModule('\Helper\Wpunit')->customer();
|
|
$this->orders = $this->getModule('\Helper\Wpunit')->order();
|
|
$this->products = $this->getModule('\Helper\Wpunit')->product();
|
|
|
|
update_option( 'woocommerce_downloads_grant_access_after_payment', 'yes' );
|
|
$this->customer = $this->customers->create();
|
|
}
|
|
|
|
public function tearDown() {
|
|
// your tear down methods here
|
|
|
|
// then
|
|
parent::tearDown();
|
|
}
|
|
|
|
public function set_user( $user ) {
|
|
wp_set_current_user( $user );
|
|
WC()->customer = new WC_Customer( get_current_user_id(), true );
|
|
}
|
|
|
|
// tests
|
|
public function testOrderToDownloadableItemsQuery() {
|
|
$downloadable_product = $this->products->create_simple(
|
|
array(
|
|
'downloadable' => true,
|
|
'downloads' => array( $this->products->create_download() )
|
|
)
|
|
);
|
|
$order_id = $this->orders->create(
|
|
array(
|
|
'status' => 'completed',
|
|
'customer_id' => $this->customer,
|
|
),
|
|
array(
|
|
'line_items' => array(
|
|
array(
|
|
'product' => $downloadable_product,
|
|
'qty' => 1,
|
|
),
|
|
),
|
|
)
|
|
);
|
|
|
|
// Force download permission updated.
|
|
wc_downloadable_product_permissions( $order_id, true );
|
|
|
|
$query = '
|
|
query {
|
|
customer {
|
|
orders {
|
|
nodes {
|
|
downloadableItems(first: 1) {
|
|
nodes {
|
|
url
|
|
accessExpires
|
|
downloadId
|
|
downloadsRemaining
|
|
name
|
|
product {
|
|
databaseId
|
|
}
|
|
download {
|
|
downloadId
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
';
|
|
|
|
/**
|
|
* Assertion One
|
|
*
|
|
* tests query results
|
|
*/
|
|
$this->set_user( $this->customer );
|
|
$actual = graphql( array( 'query' => $query ) );
|
|
$expected = array(
|
|
'data' => array(
|
|
'customer' => array(
|
|
'orders' => array(
|
|
'nodes' => array(
|
|
array(
|
|
'downloadableItems' => array( 'nodes' => $this->orders->print_downloadables( $order_id ) ),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
// use --debug flag to view.
|
|
codecept_debug( $actual );
|
|
|
|
$this->assertEquals( $expected, $actual );
|
|
}
|
|
|
|
|
|
public function testOrderToDownloadableItemsQueryArgs() {
|
|
$valid_product = $this->products->create_simple(
|
|
array(
|
|
'downloadable' => true,
|
|
'downloads' => array( $this->products->create_download() )
|
|
)
|
|
);
|
|
$downloadable_product = $this->products->create_simple(
|
|
array(
|
|
'download_expiry' => 5,
|
|
'download_limit' => 3,
|
|
'downloadable' => true,
|
|
'downloads' => array( $this->products->create_download() )
|
|
)
|
|
);
|
|
$downloaded_product = $this->products->create_simple(
|
|
array(
|
|
'download_limit' => 0,
|
|
'downloadable' => true,
|
|
'downloads' => array( $this->products->create_download() )
|
|
)
|
|
);
|
|
|
|
$order_id = $this->orders->create(
|
|
array(
|
|
'status' => 'completed',
|
|
'customer_id' => $this->customer,
|
|
),
|
|
array(
|
|
'line_items' => array(
|
|
array(
|
|
'product' => $valid_product,
|
|
'qty' => 1,
|
|
),
|
|
array(
|
|
'product' => $downloadable_product,
|
|
'qty' => 1,
|
|
),
|
|
array(
|
|
'product' => $downloaded_product,
|
|
'qty' => 1,
|
|
),
|
|
),
|
|
)
|
|
);
|
|
|
|
// Force download permission updated.
|
|
wc_downloadable_product_permissions( $order_id, true );
|
|
|
|
$query = '
|
|
query($input: OrderToDownloadableItemConnectionWhereArgs) {
|
|
customer {
|
|
orders {
|
|
nodes {
|
|
downloadableItems(where: $input) {
|
|
nodes {
|
|
product {
|
|
databaseId
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
';
|
|
|
|
/**
|
|
* Assertion One
|
|
*
|
|
* tests "active" whereArg
|
|
*/
|
|
$this->set_user( $this->customer );
|
|
$actual = graphql(
|
|
array(
|
|
'query' => $query,
|
|
'variables' => array( 'input' => array( 'active' => true ) ),
|
|
)
|
|
);
|
|
$expected = array(
|
|
'data' => array(
|
|
'customer' => array(
|
|
'orders' => array(
|
|
'nodes' => array(
|
|
array(
|
|
'downloadableItems' => array(
|
|
'nodes' => array_map(
|
|
function( $product_id ) {
|
|
return array( 'product' => array( 'databaseId' => $product_id ) );
|
|
},
|
|
array( $valid_product, $downloadable_product )
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
// use --debug flag to view.
|
|
codecept_debug( $actual );
|
|
|
|
$this->assertEquals( $expected, $actual );
|
|
|
|
/**
|
|
* Assertion Two
|
|
*
|
|
* tests "active" whereArg reversed
|
|
*/
|
|
$actual = graphql(
|
|
array(
|
|
'query' => $query,
|
|
'variables' => array( 'input' => array( 'active' => false ) ),
|
|
)
|
|
);
|
|
$expected = array(
|
|
'data' => array(
|
|
'customer' => array(
|
|
'orders' => array(
|
|
'nodes' => array(
|
|
array(
|
|
'downloadableItems' => array(
|
|
'nodes' => array_map(
|
|
function( $product_id ) {
|
|
return array( 'product' => array( 'databaseId' => $product_id ) );
|
|
},
|
|
array( $downloaded_product )
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
// use --debug flag to view.
|
|
codecept_debug( $actual );
|
|
|
|
$this->assertEquals( $expected, $actual );
|
|
|
|
/**
|
|
* Assertion Three
|
|
*
|
|
* tests "hasDownloadsRemaining" whereArg
|
|
*/
|
|
$actual = graphql(
|
|
array(
|
|
'query' => $query,
|
|
'variables' => array( 'input' => array( 'hasDownloadsRemaining' => true ) )
|
|
)
|
|
);
|
|
$expected = array(
|
|
'data' => array(
|
|
'customer' => array(
|
|
'orders' => array(
|
|
'nodes' => array(
|
|
array(
|
|
'downloadableItems' => array(
|
|
'nodes' => array_map(
|
|
function( $product_id ) {
|
|
return array( 'product' => array( 'databaseId' => $product_id ) );
|
|
},
|
|
array( $valid_product, $downloadable_product )
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
// use --debug flag to view.
|
|
codecept_debug( $actual );
|
|
|
|
$this->assertEquals( $expected, $actual );
|
|
|
|
/**
|
|
* Assertion Four
|
|
*
|
|
* tests "hasDownloadsRemaining" whereArg reversed
|
|
*/
|
|
$actual = graphql(
|
|
array(
|
|
'query' => $query,
|
|
'variables' => array( 'input' => array( 'hasDownloadsRemaining' => false ) )
|
|
)
|
|
);
|
|
$expected = array(
|
|
'data' => array(
|
|
'customer' => array(
|
|
'orders' => array(
|
|
'nodes' => array(
|
|
array(
|
|
'downloadableItems' => array(
|
|
'nodes' => array_map(
|
|
function( $product_id ) {
|
|
return array( 'product' => array( 'databaseId' => $product_id ) );
|
|
},
|
|
array( $downloaded_product )
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
// use --debug flag to view.
|
|
codecept_debug( $actual );
|
|
|
|
$this->assertEquals( $expected, $actual );
|
|
}
|
|
|
|
public function testCustomerToDownloadableItemsQuery() {
|
|
$downloadable_product = $this->products->create_simple(
|
|
array(
|
|
'downloadable' => true,
|
|
'downloads' => array( $this->products->create_download() )
|
|
)
|
|
);
|
|
$order_id = $this->orders->create(
|
|
array(
|
|
'status' => 'completed',
|
|
'customer_id' => $this->customer,
|
|
),
|
|
array(
|
|
'line_items' => array(
|
|
array(
|
|
'product' => $downloadable_product,
|
|
'qty' => 1,
|
|
),
|
|
),
|
|
)
|
|
);
|
|
|
|
// Force download permission updated.
|
|
wc_downloadable_product_permissions( $order_id, true );
|
|
|
|
$query = '
|
|
query {
|
|
customer {
|
|
downloadableItems(first: 1) {
|
|
nodes {
|
|
url
|
|
accessExpires
|
|
downloadId
|
|
downloadsRemaining
|
|
name
|
|
product {
|
|
databaseId
|
|
}
|
|
download {
|
|
downloadId
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
';
|
|
|
|
/**
|
|
* Assertion One
|
|
*
|
|
* tests query results
|
|
*/
|
|
$this->set_user( $this->customer );
|
|
$actual = graphql( array( 'query' => $query ) );
|
|
$expected = array(
|
|
'data' => array(
|
|
'customer' => array(
|
|
'downloadableItems' => array( 'nodes' => $this->customers->print_downloadables( $this->customer ) ),
|
|
),
|
|
),
|
|
);
|
|
|
|
// use --debug flag to view.
|
|
codecept_debug( $actual );
|
|
|
|
$this->assertEquals( $expected, $actual );
|
|
}
|
|
|
|
}
|