Files

1141 lines
34 KiB
PHP
Raw Permalink Normal View History

2018-06-25 00:00:37 +02:00
<?php
class MediaItemMutationsTest extends \Codeception\TestCase\WPTestCase
{
public $altText;
public $authorId;
public $caption;
public $commentStatus;
public $current_date_gmt;
public $date;
public $dateGmt;
public $description;
public $filePath;
public $fileType;
public $slug;
public $status;
public $title;
public $pingStatus;
public $parentId;
public $clientMutationId;
public $updated_title;
public $updated_description;
public $updated_altText;
public $updated_caption;
public $updated_commentStatus;
public $updated_date;
public $updated_dateGmt;
public $updated_slug;
public $updated_status;
public $updated_pingStatus;
public $updated_clientMutationId;
public $create_variables;
public $update_variables;
public $delete_variables;
public $subscriber;
public $subscriber_name;
public $author;
public $author_name;
public $admin;
public $admin_name;
public $attachment_id;
public $media_item_id;
public function setUp()
{
// before
parent::setUp();
// We don't want this funking with our tests
remove_image_size( 'twentyseventeen-thumbnail-avatar' );
/**
* Set up different user roles for permissions testing
*/
$this->subscriber = $this->factory()->user->create( [
'role' => 'subscriber',
] );
$this->subscriber_name = 'User ' . $this->subscriber;
$this->author = $this->factory()->user->create( [
'role' => 'author',
] );
$this->author_name = 'User ' . $this->author;
$this->admin = $this->factory()->user->create( [
'role' => 'administrator',
] );
$this->admin_name = 'User ' . $this->admin;
/**
* Populate the mediaItem input fields
*/
$this->altText = 'A gif of Shia doing Magic.';
$this->authorId = \GraphQLRelay\Relay::toGlobalId( 'user', $this->admin );
$this->caption = 'Shia shows off some magic in this caption.';
$this->commentStatus = 'closed';
$this->date = '2017-08-01 15:00:00';
$this->dateGmt = '2017-08-01T21:00:00';
$this->description = 'This is a magic description.';
$this->filePath = 'http://www.reactiongifs.com/r/mgc.gif';
$this->fileType = 'IMAGE_GIF';
$this->slug = 'magic-shia';
$this->status = 'INHERIT';
$this->title = 'Magic Shia Gif';
$this->pingStatus = 'closed';
$this->parentId = null;
$this->clientMutationId = 'someUniqueId';
/**
* Set up the updateMediaItem variables
*/
$this->updated_title = 'Updated Magic Shia Gif';
$this->updated_description = 'This is an updated magic description.';
$this->updated_altText = 'Some updated alt text';
$this->updated_caption = 'Shia shows off some magic in this updated caption.';
$this->updated_commentStatus = 'open';
$this->updated_date = '2017-08-01 16:00:00';
$this->updated_dateGmt = '2017-08-01T22:00:00';
$this->updated_slug = 'updated-shia-magic';
$this->updated_status = 'INHERIT';
$this->updated_pingStatus = 'open';
$this->updated_clientMutationId = 'someUpdatedUniqueId';
/**
* Create a mediaItem to update and store it's WordPress post ID
* and it's WPGraphQL ID for using in our updateMediaItem mutation
*/
$this->attachment_id = $this->factory()->attachment->create( ['post_mime_type' => 'image/gif', 'post_author' => $this->admin] );
$this->media_item_id = \GraphQLRelay\Relay::toGlobalId( 'attachment', $this->attachment_id );
/**
* Set the createMediaItem mutation input variables
*/
$this->create_variables = [
'input' => [
'filePath' => $this->filePath,
'fileType' => $this->fileType,
'clientMutationId' => $this->clientMutationId,
'title' => $this->title,
'description' => $this->description,
'altText' => $this->altText,
'parentId' => $this->parentId,
'caption' => $this->caption,
'commentStatus' => $this->commentStatus,
'date' => $this->date,
'dateGmt' => $this->dateGmt,
'slug' => $this->slug,
'status' => $this->status,
'pingStatus' => $this->pingStatus,
'authorId' => $this->authorId,
],
];
/**
* Set the updateMediaItem mutation input variables
*/
$this->update_variables = [
'input' => [
'id' => $this->media_item_id,
'clientMutationId' => $this->updated_clientMutationId,
'title' => $this->updated_title,
'description' => $this->updated_description,
'altText' => $this->updated_altText,
'caption' => $this->updated_caption,
'commentStatus' => $this->updated_commentStatus,
'date' => $this->updated_date,
'dateGmt' => $this->updated_dateGmt,
'slug' => $this->updated_slug,
'status' => $this->updated_status,
'pingStatus' => $this->updated_pingStatus,
'fileType' => $this->fileType,
]
];
/**
* Set the deleteMediaItem input variables
*/
$this->delete_variables = [
'input' => [
'id' => $this->media_item_id,
'clientMutationId' => $this->clientMutationId,
'forceDelete' => true,
]
];
}
public function tearDown()
{
// your tear down methods here
// then
parent::tearDown();
}
/**
* This function tests the createMediaItem mutation
* and is reused throughout the createMediaItem tests
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemCreate.php
* @access public
* @return array $actual
*/
public function createMediaItemMutation() {
/**
* Set up the createMediaItem mutation
*/
$mutation = '
mutation createMediaItem( $input: CreateMediaItemInput! ){
createMediaItem(input: $input){
clientMutationId
mediaItem{
id
mediaItemId
mediaType
date
dateGmt
slug
status
title
commentStatus
pingStatus
altText
caption
description
mimeType
parent {
... on Post {
id
}
}
sourceUrl
mediaDetails {
file
height
meta {
aperture
credit
camera
caption
createdTimestamp
copyright
focalLength
iso
shutterSpeed
title
orientation
}
width
sizes {
name
file
width
height
mimeType
sourceUrl
}
}
}
}
}
';
$actual = do_graphql_request( $mutation, 'createMediaItem', $this->create_variables );
return $actual;
}
/**
* Set the current user to subscriber (someone who can't create posts)
* and test whether they can create posts
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemCreate.php:54
* @access public
* @return void
*/
public function testCreateMediaItemAsSubscriber() {
wp_set_current_user( $this->subscriber );
$actual = $this->createMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
}
/**
* Test with a local file path. This is going to fail because the file
* does not exist on the test server.
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemCreate.php:89
* @access public
* @return void
*/
public function testCreateMediaItemFilePath() {
wp_set_current_user( $this->admin );
$this->create_variables['input']['filePath'] = 'file:///Users/hdevore/Desktop/Current/colorado_lake.jpeg';
$actual = $this->createMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
$this->create_variables['input']['filePath'] = $this->filePath;
}
/**
* Set the input variables to an empty array and then
* make the request with those empty input variables. We should
* get an error back from the source because they are required.
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemCreate.php:211
* @access public
* @return void
*/
public function testCreateMediaItemNoInput() {
/**
* Set up the createMediaItem mutation
*/
$mutation = '
mutation createMediaItem( $input: CreateMediaItemInput! ){
createMediaItem(input: $input){
clientMutationId
mediaItem{
id
}
}
}
';
$empty_variables = '';
$actual = do_graphql_request( $mutation, 'createMediaItem', $empty_variables );
$this->assertArrayHasKey( 'errors', $actual );
}
/**
* Set the current user to subscriber (someone who can't create posts)
* and test whether they can create posts with someone else's id
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemCreate.php:61
* @access public
* @return void
*/
public function testCreateMediaItemOtherAuthor() {
/**
* Set up the createMediaItem mutation
*/
$mutation = '
mutation createMediaItem( $input: CreateMediaItemInput! ){
createMediaItem(input: $input){
clientMutationId
mediaItem{
id
}
}
}
';
/**
* Set the createMediaItem mutation input variables
*/
$variables = [
'input' => [
'filePath' => $this->filePath,
'fileType' => $this->fileType,
'clientMutationId' => $this->clientMutationId,
'title' => $this->title,
'description' => $this->description,
'altText' => $this->altText,
'parentId' => $this->parentId,
'caption' => $this->caption,
'commentStatus' => $this->commentStatus,
'date' => $this->date,
'dateGmt' => $this->dateGmt,
'slug' => $this->slug,
'status' => $this->status,
'pingStatus' => $this->pingStatus,
'authorId' => $this->admin,
],
];
wp_set_current_user( $this->author );
$actual = do_graphql_request( $mutation, 'createMediaItem', $variables );
$this->assertArrayHasKey( 'errors', $actual );
}
/**
* Set the filePath to a URL that isn't valid to test whether the mediaItem will
* still get created
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemCreate.php:89
* @access public
* @return void
*/
public function testCreateMediaItemWithInvalidUrl() {
wp_set_current_user( $this->author );
$this->create_variables['input']['filePath'] = 'htt://vice.co.um/images/2016/09/16/bill-murray-has-a-couple-of-shifts-at-a-brooklyn-bar-this-weekend-body-image-1473999364.jpg?crop=1xw:1xh;center,center&resize=1440:*';
$actual = $this->createMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
$this->create_variables['input']['filePath'] = $this->filePath;
}
/**
* Set the filePath to a URL that isn't valid to test whether the mediaItem will
* still get created
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemCreate.php:121
* @access public
* @return void
*/
public function testCreateMediaItemWithNoFile() {
wp_set_current_user( $this->author );
$this->create_variables['input']['filePath'] = 'https://i-d-images.vice.com/images/2016/09/16/bill-murray-has-a-couple-of-shifts-at-a-brooklyn-bar-this-weekend-body-image-1473999364.jpg?crop=1xw:1xh;center,center&resize=1440:*';
$actual = $this->createMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
$this->create_variables['input']['filePath'] = $this->filePath;
}
/**
* Create a post as the admin and then attach the media item
* it should fail at first when we try as an author but then
* succeed as an admin
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemCreate.php:142
* @access public
* @return void
*/
public function testCreateMediaItemAttachToParent() {
$post = $this->factory()->post->create( [
'post_author' => $this->admin,
] );
$this->create_variables['input']['parentId'] = absint( $post );
/**
* Test the mutation as someone who can't edit the parent post,
* this should fail
*/
wp_set_current_user( $this->author );
$actual = $this->createMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
wp_set_current_user( $this->admin );
$actual = $this->createMediaItemMutation();
$media_item_id = $actual["data"]["createMediaItem"]["mediaItem"]["id"];
$attachment_id = $actual["data"]["createMediaItem"]["mediaItem"]["mediaItemId"];
$attachment_url = wp_get_attachment_url( $attachment_id );
$attachment_details = wp_get_attachment_metadata( $attachment_id );
$expected = [
'data' => [
'createMediaItem' => [
'clientMutationId' => $this->clientMutationId,
'mediaItem' => [
'id' => $media_item_id,
'mediaItemId' => $attachment_id,
'title' => $this->title,
'description' => apply_filters( 'the_content', $this->description ),
'altText' => $this->altText,
'caption' => apply_filters( 'the_content', $this->caption ),
'commentStatus' => $this->commentStatus,
'date' => $this->date,
'dateGmt' => $this->dateGmt,
'slug' => $this->slug,
'status' => strtolower( $this->status ),
'pingStatus' => $this->pingStatus,
'mimeType' => 'image/gif',
'parent' => [
'id' => \GraphQLRelay\Relay::toGlobalId( 'post', $post ),
],
'mediaType' => 'image',
'sourceUrl' => $attachment_url,
'mediaDetails' => [
'file' => $attachment_details['file'],
'height' => $attachment_details['height'],
'meta' => [
'aperture' => 0.0,
'credit' => '',
'camera' => '',
'caption' => '',
'createdTimestamp' => null,
'copyright' => '',
'focalLength' => null,
'iso' => 0,
'shutterSpeed' => null,
'title' => '',
'orientation' => '0',
],
'width' => $attachment_details['width'],
'sizes' => [
0 => [
'name' => 'thumbnail',
'file' => $attachment_details['sizes']['thumbnail']['file'],
'width' => (int) $attachment_details['sizes']['thumbnail']['width'],
'height' => (int) $attachment_details['sizes']['thumbnail']['height'],
'mimeType' => $attachment_details['sizes']['thumbnail']['mime-type'],
'sourceUrl' => basename( wp_get_attachment_thumb_url( $attachment_id ) ),
],
],
],
],
],
],
];
$this->assertEquals( $expected, $actual );
$this->create_variables['input']['parentId'] = $this->parentId;
}
/**
* Create a post as the admin and then try to upload a mediaItem
* to that post as an author. It should error out since Authors can't
* edit other users posts.
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemCreate.php:151
* @access public
* @return void
*/
public function testCreateMediaItemEditOthersPosts() {
$post = $this->factory()->post->create( [
'post_author' => $this->admin,
] );
wp_set_current_user( $this->author );
$this->create_variables['input']['parentId'] = $post;
$actual = $this->createMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
$this->create_variables['input']['parentId'] = $this->parentId;
}
/**
* Test the MediaItemMutation by setting the default values:
*
* post_status
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemMutation.php:136
*
* post_title
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemMutation.php:142
*
* post_author
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemMutation.php:148
*
* post_content
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemMutation.php:165
*
* post_mime_type
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemMutation.php:171
*
* @access public
* @returnn void
*/
public function testCreateMediaItemDefaultValues() {
/**
* Set the current user as the admin role so we
* can properly test the mutation
*/
wp_set_current_user( $this->admin );
/**
* Set up the createMediaItem mutation
*/
$default_mutation = '
mutation createMediaItem( $input: CreateMediaItemInput! ){
createMediaItem(input: $input){
clientMutationId
mediaItem{
id
mediaItemId
status
title
author {
id
}
description
mimeType
parent {
... on Post {
id
}
}
sourceUrl
mediaDetails {
file
height
meta {
aperture
credit
camera
caption
createdTimestamp
copyright
focalLength
iso
shutterSpeed
title
orientation
}
width
sizes {
name
file
width
height
mimeType
sourceUrl
}
}
}
}
}
';
/**
* Set new input variables without changing defaults
*/
$default_variables = [
'input' => [
'filePath' => $this->filePath,
'clientMutationId' => $this->clientMutationId,
],
];
/**
* Do the graphQL request using the above variables for input in the above mutation
*/
$actual = do_graphql_request( $default_mutation, 'createMediaItem', $default_variables );
$media_item_id = $actual["data"]["createMediaItem"]["mediaItem"]["id"];
$attachment_id = $actual["data"]["createMediaItem"]["mediaItem"]["mediaItemId"];
$attachment_data = get_post( $attachment_id );
$attachment_title = $attachment_data->post_title;
$attachment_url = wp_get_attachment_url( $attachment_id );
$attachment_details = wp_get_attachment_metadata( $attachment_id );
$expected = [
'data' => [
'createMediaItem' => [
'clientMutationId' => $this->clientMutationId,
'mediaItem' => [
'id' => $media_item_id,
'mediaItemId' => $attachment_id,
'status' => strtolower( $this->status ),
'title' => $attachment_title,
'description' => '',
'mimeType' => 'image/gif',
'author' => [
'id' => \GraphQLRelay\Relay::toGlobalId( 'user', $this->admin ),
],
'parent' => null,
'sourceUrl' => $attachment_url,
'mediaDetails' => [
'file' => $attachment_details['file'],
'height' => $attachment_details['height'],
'meta' => [
'aperture' => 0.0,
'credit' => '',
'camera' => '',
'caption' => '',
'createdTimestamp' => null,
'copyright' => '',
'focalLength' => null,
'iso' => 0,
'shutterSpeed' => null,
'title' => '',
'orientation' => '0',
],
'width' => $attachment_details['width'],
'sizes' => [
0 => [
'name' => 'thumbnail',
'file' => $attachment_details['sizes']['thumbnail']['file'],
'width' => (int) $attachment_details['sizes']['thumbnail']['width'],
'height' => (int) $attachment_details['sizes']['thumbnail']['height'],
'mimeType' => $attachment_details['sizes']['thumbnail']['mime-type'],
'sourceUrl' => basename( wp_get_attachment_thumb_url( $attachment_id ) ),
],
],
],
],
],
],
];
$this->assertEquals( $expected, $actual );
}
/**
* This function tests the createMediaItem mutation
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemCreate.php
* @access public
* @return void
*/
public function testCreateMediaItemMutation() {
/**
* Set the current user as the admin role so we
* can properly test the mutation
*/
wp_set_current_user( $this->admin );
/**
* Create the createMediaItem
*/
$actual = $this->createMediaItemMutation();
$media_item_id = $actual["data"]["createMediaItem"]["mediaItem"]["id"];
$attachment_id = $actual["data"]["createMediaItem"]["mediaItem"]["mediaItemId"];
$attachment_url = wp_get_attachment_url( $attachment_id );
$attachment_details = wp_get_attachment_metadata( $attachment_id );
$expected = [
'data' => [
'createMediaItem' => [
'clientMutationId' => $this->clientMutationId,
'mediaItem' => [
'id' => $media_item_id,
'mediaItemId' => $attachment_id,
'title' => $this->title,
'description' => apply_filters( 'the_content', $this->description ),
'altText' => $this->altText,
'caption' => apply_filters( 'the_content', $this->caption ),
'commentStatus' => $this->commentStatus,
'date' => $this->date,
'dateGmt' => $this->dateGmt,
'slug' => $this->slug,
'status' => strtolower( $this->status ),
'pingStatus' => $this->pingStatus,
'mimeType' => 'image/gif',
'parent' => null,
'mediaType' => 'image',
'sourceUrl' => $attachment_url,
'mediaDetails' => [
'file' => $attachment_details['file'],
'height' => $attachment_details['height'],
'meta' => [
'aperture' => 0.0,
'credit' => '',
'camera' => '',
'caption' => '',
'createdTimestamp' => null,
'copyright' => '',
'focalLength' => null,
'iso' => 0,
'shutterSpeed' => null,
'title' => '',
'orientation' => '0',
],
'width' => $attachment_details['width'],
'sizes' => [
0 => [
'name' => 'thumbnail',
'file' => $attachment_details['sizes']['thumbnail']['file'],
'width' => (int) $attachment_details['sizes']['thumbnail']['width'],
'height' => (int) $attachment_details['sizes']['thumbnail']['height'],
'mimeType' => $attachment_details['sizes']['thumbnail']['mime-type'],
'sourceUrl' => basename( wp_get_attachment_thumb_url( $attachment_id ) ),
],
],
],
],
],
],
];
$this->assertEquals( $expected, $actual );
}
/**
* This function tests the updateMediaItem mutation
* and is reused throughout the updateMediaItem tests
*
* @access public
* @return array $actual
*/
public function updateMediaItemMutation() {
/**
* Prepare the updateMediaItem mutation
*/
$mutation = '
mutation updateMediaItem( $input: UpdateMediaItemInput! ){
updateMediaItem (input: $input){
clientMutationId
mediaItem {
id
mediaItemId
date
dateGmt
slug
status
title
commentStatus
pingStatus
altText
caption
description
mimeType
author {
id
}
}
}
}
';
$actual = do_graphql_request( $mutation, 'updateMediaItem', $this->update_variables );
return $actual;
}
/**
* Execute the request with a fake mediaItem id. An error
* should occur because we didn't pass the id of the mediaItem we
* wanted to update.
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemUpdate.php:57
* @access public
* @return void
*/
public function testUpdateMediaItemInvalidId() {
$this->update_variables['input']['id'] = \GraphQLRelay\Relay::toGlobalId( 'attachment', 123456 );
$actual = $this->updateMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
$this->update_variables['input']['id'] = $this->media_item_id;
}
/**
* Test whether the mediaItem we're updating is actually a mediaItem
*
* @souce wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemUpdate.php:67
* @access public
* @return void
*/
public function testUpdateMediaItemUpdatePost() {
$test_post = $this->factory()->post->create();
$this->update_variables['input']['id'] = \GraphQLRelay\Relay::toGlobalId( 'post', $test_post );
$actual = $this->updateMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
$this->update_variables['input']['id'] = $this->media_item_id;
}
/**
* Set the current user to a subscriber (someone who can't create posts)
* and test whether they can create posts
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemUpdate.php:74
* @access public
* @return void
*/
public function testUpdateMediaItemAsSubscriber() {
wp_set_current_user( $this->subscriber );
$actual = $this->updateMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
}
/**
* Create a post as the admin and then try to upload a mediaItem
* to that post as an author. It should error out since Authors can't
* edit other users posts.
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemUpdate.php:91
* @access public
* @return void
*/
public function testUpdateMediaItemEditOthersPosts() {
$post = $this->factory()->post->create( [
'post_author' => $this->admin,
] );
wp_set_current_user( $this->author );
$this->update_variables['input']['parentId'] = $post;
$actual = $this->updateMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
$this->update_variables['input']['parentId'] = $this->parentId;
}
/**
* Create a post as the admin and then try to upload a mediaItem
* to that post as an author. It should error out since Authors can't
* edit other users posts.
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemUpdate.php:91
* @access public
* @return void
*/
public function testUpdateMediaItemAddOtherAuthorsAsAuthor() {
wp_set_current_user( $this->author );
$this->update_variables['input']['authorId'] = \GraphQLRelay\Relay::toGlobalId( 'user', $this->admin );
$actual = $this->updateMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
$this->update_variables['input']['authorId'] = false;
}
/**
* Create a post as the admin and then try to upload a mediaItem
* to that post as an admin. It should be created.
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemUpdate.php:91
* @access public
* @return void
*/
public function testUpdateMediaItemAddOtherAuthorsAsAdmin() {
wp_set_current_user( $this->admin );
$this->update_variables['input']['authorId'] = \GraphQLRelay\Relay::toGlobalId( 'user', $this->author );
$actual = $this->updateMediaItemMutation();
$actual_created = $actual['data']['updateMediaItem']['mediaItem'];
$this->assertArrayHasKey( 'id', $actual_created );
$update_variables['input']['authorId'] = false;
}
/**
* This function tests the updateMediaItem mutation
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemUpdate.php
* @access public
* @return void
*/
public function testUpdateMediaItemMutation() {
/**
* Set the current user as the admin role so we
* successfully run the mutation
*/
wp_set_current_user( $this->admin );
$actual = $this->updateMediaItemMutation();
/**
* Define the expected output.
*/
$expected = [
'data' => [
'updateMediaItem' => [
'clientMutationId' => $this->updated_clientMutationId,
'mediaItem' => [
'id' => $this->media_item_id,
'title' => $this->updated_title,
'description' => apply_filters( 'the_content', $this->updated_description ),
'mediaItemId' => $this->attachment_id,
'altText' => $this->updated_altText,
'caption' => apply_filters( 'the_content', $this->updated_caption ),
'commentStatus' => $this->updated_commentStatus,
'date' => $this->updated_date,
'dateGmt' => $this->updated_dateGmt,
'slug' => $this->updated_slug,
'status' => strtolower( $this->updated_status ),
'pingStatus' => $this->updated_pingStatus,
'mimeType' => 'image/gif',
'author' => [
'id' => \GraphQLRelay\Relay::toGlobalId( 'user', $this->admin ),
],
],
],
],
];
$attachment = get_post( $this->attachment_id );
/**
* Compare the actual output vs the expected output
*/
$this->assertEquals( $actual, $expected );
}
/**
* This function tests the deletMediaItem mutation
* and is reused throughout the deleteMediaItem tests
*
* @access public
* @return array $actual
*/
public function deleteMediaItemMutation() {
/**
* Prepare the deleteMediaItem mutation
*/
$mutation = '
mutation deleteMediaItem( $input: DeleteMediaItemInput! ){
deleteMediaItem(input: $input) {
clientMutationId
deletedId
mediaItem{
id
mediaItemId
}
}
}
';
$actual = do_graphql_request( $mutation, 'deleteMediaItem', $this->delete_variables );
return $actual;
}
/**
* Set the mediaItem id to a fake id and the mutation should fail
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemDelete.php:79
* @access public
* @return void
*/
public function testDeleteMediaItemInvalidId() {
$this->delete_variables['input']['id'] = 12345;
$actual = $this->deleteMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
$this->delete_variables['input']['id'] = $this->media_item_id;
}
/**
* Set the current user as the subscriber role and
* the deletion should fail because we're a subscriber.
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/MediaItemDelete.php:86
* @access public
* @return void
*/
public function testDeleteMediaItemAsSubscriber() {
wp_set_current_user( $this->subscriber );
$actual = $this->deleteMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
}
/**
* Set the force delete input to false and the
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemDelete.php:92
* @access public
* @return array $actual
*/
public function testDeleteMediaItemAlreadyInTrash() {
$deleted_media_item = $this->factory()->attachment->create( ['post_status' => 'trash'] );
$post = get_post( $deleted_media_item );
/**
* Prepare the deleteMediaItem mutation
*/
$mutation = '
mutation deleteMediaItem( $input: DeleteMediaItemInput! ){
deleteMediaItem(input: $input) {
clientMutationId
deletedId
mediaItem{
id
mediaItemId
}
}
}
';
/**
* Set the deleteMediaItem input variables
*/
$delete_trash_variables = [
'input' => [
'id' => \GraphQLRelay\Relay::toGlobalId( 'attachment', $deleted_media_item ),
'clientMutationId' => $this->clientMutationId,
'forceDelete' => false,
]
];
wp_set_current_user( $this->admin );
$actual = do_graphql_request( $mutation, 'deleteMediaItem', $delete_trash_variables );
$this->assertArrayHasKey( 'errors', $actual );
$delete_trash_variables['input']['forceDelete'] = true;
$actual = do_graphql_request( $mutation, 'deleteMediaItem', $delete_trash_variables );
$actual_deleted_item = $actual['data']['deleteMediaItem'];
$this->assertArrayHasKey( 'deletedId', $actual_deleted_item );
}
/**
* This funtion tests the deleteMediaItem mutation by trying to delete a post
* instead of an attachment
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemDelete.php:103
* @access public
* @return void
*/
public function testDeleteMediaItemAsPost() {
/**
* Set the user to an admin
*/
wp_set_current_user( $this->admin );
/**
* Create a post that we can try to delete with the deleteMediaItem mutaton
*/
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'post_title' => 'Original Title',
'post_content' => 'Original Content',
];
/**
* Create a page to test against and set the post id in the mutation variables
*/
$post_to_delete = $this->factory->post->create( $args );
$this->delete_variables['input']['id'] = \GraphQLRelay\Relay::toGlobalId( 'post', $post_to_delete );
/**
* Define the expected output
*/
$actual = $this->deleteMediaItemMutation();
/*
* Compare it to the actual output and reset the id delete variable
*/
$this->assertArrayHasKey( 'errors', $actual );
$this->delete_variables['input']['id'] = $this->media_item_id;
}
/**
* This function tests the deleteMediaItem mutation
*
* @source wp-content/plugins/wp-graphql/src/Type/MediaItem/Mutation/MediaItemDelete.php
* @access public
* @return void
*/
public function testDeleteMediaItemMutation() {
/**
* Set the user to an admin and try again
*/
wp_set_current_user( $this->admin );
$actual = $this->deleteMediaItemMutation();
/**
* Define the expected output.
*/
$expected = [
'data' => [
'deleteMediaItem' => [
'clientMutationId' => $this->clientMutationId,
'deletedId' => $this->media_item_id,
'mediaItem' => [
'id' => $this->media_item_id,
'mediaItemId' => $this->attachment_id,
],
],
],
];
/**
* Compare the actual output vs the expected output
*/
$this->assertEquals( $actual, $expected );
/**
* Try to delete again but we should have errors, because there's nothing to be deleted
*/
$actual = $this->deleteMediaItemMutation();
$this->assertArrayHasKey( 'errors', $actual );
}
}