408 lines
8.1 KiB
PHP
Executable File
408 lines
8.1 KiB
PHP
Executable File
<?php
|
|
|
|
class TermObjectQueriesTest extends \Codeception\TestCase\WPTestCase {
|
|
|
|
public function setUp() {
|
|
parent::setUp();
|
|
}
|
|
|
|
public function tearDown() {
|
|
parent::tearDown();
|
|
}
|
|
|
|
public function createTermObject( $args = [] ) {
|
|
/**
|
|
* Create the term
|
|
*/
|
|
$term_id = $this->factory->term->create( $args );
|
|
|
|
/**
|
|
* Return the $id of the term_object that was created
|
|
*/
|
|
return $term_id;
|
|
|
|
}
|
|
|
|
public function testTermObjectConnectionQuery() {
|
|
|
|
$term_id1 = $this->createTermObject( [
|
|
'name' => 'AAA1 Term',
|
|
'taxonomy' => 'category',
|
|
'description' => 'just a description',
|
|
] );
|
|
|
|
$term_id2 = $this->createTermObject( [
|
|
'name' => 'AAA2 Term',
|
|
'taxonomy' => 'category',
|
|
'description' => 'just a description',
|
|
] );
|
|
|
|
$term_id3 = $this->createTermObject( [
|
|
'name' => 'AAA3 Term',
|
|
'taxonomy' => 'category',
|
|
'description' => 'just a description',
|
|
] );
|
|
|
|
$query = '
|
|
{
|
|
categories(where:{hideEmpty:false}) {
|
|
edges {
|
|
node {
|
|
id
|
|
categoryId
|
|
name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
';
|
|
|
|
$actual = do_graphql_request( $query );
|
|
|
|
$this->assertNotEmpty( $actual['data']['categories']['edges'][0]['node'] );
|
|
$this->assertNotEmpty( $actual['data']['categories']['edges'][0]['node']['categoryId'], $term_id1 );
|
|
|
|
$query = '
|
|
query getCategoriesBefore($beforeCursor:String){
|
|
categories(last:1 before:$beforeCursor where:{hideEmpty:false}){
|
|
edges{
|
|
node{
|
|
id
|
|
categoryId
|
|
name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
';
|
|
|
|
/**
|
|
* Create a cursor for the first term ID
|
|
*/
|
|
$cursor = \GraphQLRelay\Connection\ArrayConnection::offsetToCursor( $term_id2 );
|
|
|
|
/**
|
|
* Use the cursor in our variables
|
|
*/
|
|
$variables = wp_json_encode( [
|
|
'beforeCursor' => $cursor,
|
|
] );
|
|
|
|
/**
|
|
* Do the request
|
|
*/
|
|
$actual = do_graphql_request( $query, 'getCategoriesBefore', $variables );
|
|
|
|
/**
|
|
* Assert that we should have received just 1 node, $term_id2
|
|
*/
|
|
$this->assertCount( 1, $actual['data']['categories']['edges'] );
|
|
$this->assertEquals( $actual['data']['categories']['edges'][0]['node']['categoryId'], $term_id1 );
|
|
|
|
$query = '
|
|
query getCategoriesAfter($afterCursor:String){
|
|
categories(first:1 after:$afterCursor where:{hideEmpty:false}){
|
|
edges{
|
|
node{
|
|
id
|
|
categoryId
|
|
name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
';
|
|
|
|
/**
|
|
* Create a cursor for the first term ID
|
|
*/
|
|
$cursor = \GraphQLRelay\Connection\ArrayConnection::offsetToCursor( $term_id2 );
|
|
|
|
/**
|
|
* Use the cursor in our variables
|
|
*/
|
|
$variables = wp_json_encode( [
|
|
'afterCursor' => $cursor,
|
|
] );
|
|
|
|
/**
|
|
* Do the request
|
|
*/
|
|
$actual = do_graphql_request( $query, 'getCategoriesAfter', $variables );
|
|
|
|
/**
|
|
* Assert that we should have received just 1 node, $term_id2
|
|
*/
|
|
$this->assertCount( 1, $actual['data']['categories']['edges'] );
|
|
$this->assertEquals( $actual['data']['categories']['edges'][0]['node']['categoryId'], $term_id3 );
|
|
|
|
}
|
|
|
|
/**
|
|
* testTermQuery
|
|
*
|
|
* This tests creating a single term with data and retrieving said term via a GraphQL query
|
|
*
|
|
* @since 0.0.5
|
|
*/
|
|
public function testTermQuery() {
|
|
|
|
/**
|
|
* Create a term
|
|
*/
|
|
$term_id = $this->createTermObject( [
|
|
'name' => 'A Category',
|
|
'taxonomy' => 'category',
|
|
'description' => 'just a description',
|
|
] );
|
|
|
|
$taxonomy = 'category';
|
|
|
|
/**
|
|
* Create the global ID based on the term_type and the created $id
|
|
*/
|
|
$global_id = \GraphQLRelay\Relay::toGlobalId( $taxonomy, $term_id );
|
|
|
|
/**
|
|
* Create the query string to pass to the $query
|
|
*/
|
|
$query = "
|
|
query {
|
|
category(id: \"{$global_id}\") {
|
|
categoryId
|
|
count
|
|
description
|
|
id
|
|
link
|
|
name
|
|
posts {
|
|
edges {
|
|
node {
|
|
postId
|
|
}
|
|
}
|
|
}
|
|
slug
|
|
taxonomy {
|
|
name
|
|
}
|
|
termGroupId
|
|
termTaxonomyId
|
|
}
|
|
}";
|
|
|
|
/**
|
|
* Run the GraphQL query
|
|
*/
|
|
$actual = do_graphql_request( $query );
|
|
|
|
/**
|
|
* Establish the expectation for the output of the query
|
|
*/
|
|
$expected = [
|
|
'data' => [
|
|
'category' => [
|
|
'categoryId' => $term_id,
|
|
'count' => null,
|
|
'description' => 'just a description',
|
|
'id' => $global_id,
|
|
'link' => "http://wpgraphql.test/?cat={$term_id}",
|
|
'name' => 'A Category',
|
|
'posts' => [
|
|
'edges' => [],
|
|
],
|
|
'slug' => 'a-category',
|
|
'taxonomy' => [
|
|
'name' => 'category',
|
|
],
|
|
'termGroupId' => null,
|
|
'termTaxonomyId' => $term_id,
|
|
],
|
|
],
|
|
];
|
|
|
|
$this->assertEquals( $expected, $actual );
|
|
|
|
}
|
|
|
|
/**
|
|
* testTermQueryWithAssociatedPostObjects
|
|
*
|
|
* Tests a term with associated post objects.
|
|
*
|
|
* @since 0.0.5
|
|
*/
|
|
public function testTermQueryWithAssociatedPostObjects() {
|
|
|
|
/**
|
|
* Create a term
|
|
*/
|
|
$term_id = $this->createTermObject( [ 'name' => 'A category', 'taxonomy' => 'category' ] );
|
|
|
|
// Create a comment and assign it to term.
|
|
$post_id = $this->factory->post->create( [ 'post_type' => 'post' ] );
|
|
$page_id = $this->factory->post->create( [ 'post_type' => 'page' ] );
|
|
$media_id = $this->factory->post->create( [ 'post_type' => 'attachment' ] );
|
|
|
|
wp_set_object_terms( $post_id, $term_id, 'category' );
|
|
wp_set_object_terms( $page_id, $term_id, 'category' );
|
|
wp_set_object_terms( $media_id, $term_id, 'category' );
|
|
|
|
$taxonomy = 'category';
|
|
|
|
/**
|
|
* Create the global ID based on the term_type and the created $id
|
|
*/
|
|
$global_id = \GraphQLRelay\Relay::toGlobalId( $taxonomy, $term_id );
|
|
|
|
/**
|
|
* Create the query string to pass to the $query
|
|
*/
|
|
$query = "
|
|
query {
|
|
category(id: \"{$global_id}\") {
|
|
posts {
|
|
edges {
|
|
node {
|
|
postId
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}";
|
|
|
|
/**
|
|
* Run the GraphQL query
|
|
*/
|
|
$actual = do_graphql_request( $query );
|
|
|
|
/**
|
|
* Establish the expectation for the output of the query
|
|
*/
|
|
$expected = [
|
|
'data' => [
|
|
'category' => [
|
|
'posts' => [
|
|
'edges' => [
|
|
[
|
|
'node' => [
|
|
'postId' => $post_id,
|
|
],
|
|
],
|
|
],
|
|
],
|
|
],
|
|
],
|
|
];
|
|
|
|
$this->assertEquals( $expected, $actual );
|
|
}
|
|
|
|
public function testTermQueryWithParentTerm() {
|
|
|
|
$parent_id = $this->createTermObject( [
|
|
'name' => 'Parent Category',
|
|
'taxonomy' => 'category',
|
|
] );
|
|
|
|
$child_id = $this->createTermObject( [
|
|
'name' => 'Child category',
|
|
'taxonomy' => 'category',
|
|
'parent' => $parent_id,
|
|
] );
|
|
|
|
$global_parent_id = \GraphQLRelay\Relay::toGlobalId( 'category', $parent_id );
|
|
$global_child_id = \GraphQLRelay\Relay::toGlobalId( 'category', $child_id );
|
|
|
|
$query = "
|
|
query {
|
|
category(id: \"{$global_child_id}\"){
|
|
id
|
|
categoryId
|
|
ancestors{
|
|
id
|
|
categoryId
|
|
}
|
|
}
|
|
}
|
|
";
|
|
|
|
$actual = do_graphql_request( $query );
|
|
|
|
$expected = [
|
|
'data' => [
|
|
'category' => [
|
|
'id' => $global_child_id,
|
|
'categoryId' => $child_id,
|
|
'ancestors' => [
|
|
[
|
|
'id' => $global_parent_id,
|
|
'categoryId' => $parent_id,
|
|
],
|
|
],
|
|
],
|
|
],
|
|
];
|
|
|
|
$this->assertEquals( $expected, $actual );
|
|
|
|
}
|
|
|
|
/**
|
|
* testTermQueryWhereTermDoesNotExist
|
|
*
|
|
* Tests a query for non existant term.
|
|
*
|
|
* @since 0.0.5
|
|
*/
|
|
public function testTermQueryWhereTermDoesNotExist() {
|
|
$taxonomy = 'category';
|
|
|
|
/**
|
|
* Create the global ID based on the term_type and the created $id
|
|
*/
|
|
$global_id = \GraphQLRelay\Relay::toGlobalId( $taxonomy, 'doesNotExist' );
|
|
|
|
/**
|
|
* Create the query string to pass to the $query
|
|
*/
|
|
$query = "
|
|
query {
|
|
category(id: \"{$global_id}\") {
|
|
categoryId
|
|
}
|
|
}";
|
|
|
|
/**
|
|
* Run the GraphQL query
|
|
*/
|
|
$actual = do_graphql_request( $query );
|
|
|
|
/**
|
|
* Establish the expectation for the output of the query
|
|
*/
|
|
$expected = [
|
|
'data' => [
|
|
'category' => null,
|
|
],
|
|
'errors' => [
|
|
[
|
|
'message' => 'No category was found with the ID: doesNotExist',
|
|
'locations' => [
|
|
[
|
|
'line' => 3,
|
|
'column' => 4,
|
|
],
|
|
],
|
|
'path' => [
|
|
'category',
|
|
],
|
|
'category' => 'user',
|
|
],
|
|
],
|
|
];
|
|
|
|
$this->assertEquals( $expected, $actual );
|
|
}
|
|
|
|
} |