Files
old-v2-backend/wordpress/wp-content/plugins/wp-graphql/tests/wpunit/SettingsMutationsTest.php
2018-06-25 00:00:37 +02:00

440 lines
15 KiB
PHP
Executable File

<?php
class WP_GraphQL_Test_Settings_Mutations extends \Codeception\TestCase\WPTestCase {
public $clientMutationId;
public $defaultCategory;
public $discussionSettingsDefaultCommentStatus;
public $discussionSettingsDefaultPingStatus;
public $generalSettingsDateFormat;
public $generalSettingsDescription;
public $generalSettingsEmail;
public $generalSettingsLanguage;
public $generalSettingsStartOfWeek;
public $generalSettingsTimeFormat;
public $generalSettingsTitle;
public $readingSettingsPostsPerPage;
public $writingSettingsDefaultCategory;
public $writingSettingsUseSmilies;
public $writingSettingsDefaultPostFormat;
public $update_variables;
public $subscriber;
public $subscriber_name;
public $author;
public $author_name;
public $admin;
public $admin_name;
public function setUp() {
$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;
/**
* Set up the updateSettings variables
*/
$this->clientMutationId = 'testMutationId';
$this->discussionSettingsDefaultCommentStatus = 'closed';
$this->discussionSettingsDefaultPingStatus = 'closed';
$this->generalSettingsDateFormat = 'Y-m-d';
$this->generalSettingsDescription = 'Local Testing Site';
$this->generalSettingsEmail = 'hdevore@medianewsgroup.com';
$this->generalSettingsLanguage = 'en_US';
$this->generalSettingsStartOfWeek = 2;
$this->generalSettingsTimeFormat = 'g:i:s a';
$this->generalSettingsTimezone = 'America/Denver';
$this->generalSettingsTitle = 'WPGraphQL Site Title';
$this->readingSettingsPostsPerPage = 20;
$this->writingSettingsDefaultCategory = $this->factory()->category->create();
$this->writingSettingsDefaultPostFormat = 'quote';
$this->writingSettingsUseSmilies = false;
/**
* Set the createMediaItem mutation input variables
*/
if ( is_multisite() ) {
$this->update_variables = [
'input' => [
'clientMutationId' => $this->clientMutationId,
'discussionSettingsDefaultCommentStatus' => $this->discussionSettingsDefaultCommentStatus,
'discussionSettingsDefaultPingStatus' => $this->discussionSettingsDefaultPingStatus,
'generalSettingsDateFormat' => $this->generalSettingsDateFormat,
'generalSettingsDescription' => $this->generalSettingsDescription,
'generalSettingsLanguage' => $this->generalSettingsLanguage,
'generalSettingsStartOfWeek' => $this->generalSettingsStartOfWeek,
'generalSettingsTimeFormat' => $this->generalSettingsTimeFormat,
'generalSettingsTimezone' => $this->generalSettingsTimezone,
'generalSettingsTitle' => $this->generalSettingsTitle,
'readingSettingsPostsPerPage' => $this->readingSettingsPostsPerPage,
'writingSettingsDefaultCategory' => $this->writingSettingsDefaultCategory,
'writingSettingsDefaultPostFormat' => $this->writingSettingsDefaultPostFormat,
'writingSettingsUseSmilies' => $this->writingSettingsUseSmilies,
],
];
} else {
$this->update_variables = [
'input' => [
'clientMutationId' => $this->clientMutationId,
'discussionSettingsDefaultCommentStatus' => $this->discussionSettingsDefaultCommentStatus,
'discussionSettingsDefaultPingStatus' => $this->discussionSettingsDefaultPingStatus,
'generalSettingsDateFormat' => $this->generalSettingsDateFormat,
'generalSettingsDescription' => $this->generalSettingsDescription,
'generalSettingsEmail' => $this->generalSettingsEmail,
'generalSettingsLanguage' => $this->generalSettingsLanguage,
'generalSettingsStartOfWeek' => $this->generalSettingsStartOfWeek,
'generalSettingsTimeFormat' => $this->generalSettingsTimeFormat,
'generalSettingsTimezone' => $this->generalSettingsTimezone,
'generalSettingsTitle' => $this->generalSettingsTitle,
'readingSettingsPostsPerPage' => $this->readingSettingsPostsPerPage,
'writingSettingsDefaultCategory' => $this->writingSettingsDefaultCategory,
'writingSettingsDefaultPostFormat' => $this->writingSettingsDefaultPostFormat,
'writingSettingsUseSmilies' => $this->writingSettingsUseSmilies,
],
];
}
/**
* Manually Register a setting for testing
*
* This registers a setting as a number to see if it gets the correct type
* associated with it and returned through WPGraphQL
*/
register_setting( 'Zool', 'points', array(
'type' => 'number',
'description' => __( 'Test how many points we have in Zool.' ),
'show_in_graphql' => true,
'default' => 4.5,
) );
parent::setUp();
}
public function tearDown() {
parent::tearDown();
}
/**
* This function tests the updateSettings mutation
* and is reused throughout the updateSettings tests
*
* @access public
* @return array $actual
*/
public function updateSettingsMutation() {
/**
* Prepare the updateSettings mutation
*/
if ( is_multisite() ) {
$mutation = '
mutation updateSettings( $input: UpdateSettingsInput! ){
updateSettings( input: $input ) {
clientMutationId
allSettings {
discussionSettingsDefaultCommentStatus
discussionSettingsDefaultPingStatus
generalSettingsDateFormat
generalSettingsDescription
generalSettingsLanguage
generalSettingsStartOfWeek
generalSettingsTimeFormat
generalSettingsTimezone
generalSettingsTitle
readingSettingsPostsPerPage
writingSettingsDefaultCategory
writingSettingsDefaultPostFormat
writingSettingsUseSmilies
}
discussionSettings {
defaultCommentStatus
defaultPingStatus
}
generalSettings {
dateFormat
description
language
startOfWeek
timeFormat
timezone
title
}
readingSettings {
postsPerPage
}
writingSettings {
defaultCategory
defaultPostFormat
useSmilies
}
}
}
';
} else {
$mutation = '
mutation updateSettings( $input: UpdateSettingsInput! ){
updateSettings( input: $input ) {
clientMutationId
allSettings {
discussionSettingsDefaultCommentStatus
discussionSettingsDefaultPingStatus
generalSettingsDateFormat
generalSettingsDescription
generalSettingsEmail
generalSettingsLanguage
generalSettingsStartOfWeek
generalSettingsTimeFormat
generalSettingsTimezone
generalSettingsTitle
generalSettingsUrl
readingSettingsPostsPerPage
writingSettingsDefaultCategory
writingSettingsDefaultPostFormat
writingSettingsUseSmilies
}
discussionSettings {
defaultCommentStatus
defaultPingStatus
}
generalSettings {
dateFormat
description
email
language
startOfWeek
timeFormat
timezone
title
url
}
readingSettings {
postsPerPage
}
writingSettings {
defaultCategory
defaultPostFormat
useSmilies
}
}
}
';
}
$actual = do_graphql_request( $mutation, 'updateSettings', $this->update_variables );
return $actual;
}
/**
* This function tests whether a user can update settings if they don't have the right credentials
*
* @source wp-content/plugins/wp-graphql/src/Type/Settings/Mutation/SettingsUpdate.php:51
* @access public
* @return void
*/
public function testUpdateSettingsAsAuthor() {
/**
* Set the current user as the author role so we
* receive an auth error back
*/
wp_set_current_user( $this->author );
$actual = $this->updateSettingsMutation();
$this->assertArrayHasKey( 'errors', $actual );
}
/**
* Method for testing whether a user can query settings
* if they don't have the 'manage_options' capability
*
* They should not be able to query for the admin email
* so we should receive an error back
*
* @access public
* @return void
*/
public function testSettingsQueryAsEditor() {
/**
* Set the editor user
* Set the query
* Make the request
* Validate the request has errors
*/
wp_set_current_user( $this->editor );
$query = "
query {
allSettings {
generalSettingsEmail
}
}
";
$actual = do_graphql_request( $query );
$this->assertArrayHasKey( 'errors', $actual );
}
/**
* This function tests whether we receive an error or success
* when trying to update the site's URL
*
* @source wp-content/plugins/wp-graphql/src/Type/Settings/Mutation/SettingsUpdate.php:63
* @access public
* @return void
*/
public function testUpdateSettingsSiteURLMutation() {
/**
* Set the current user as the admin role so we
* successfully run the mutation
*/
wp_set_current_user( $this->admin );
$this->update_variables['input']['generalSettingsUrl'] = 'http://exampleTEST.org';
$actual = $this->updateSettingsMutation();
$this->assertArrayHasKey( 'errors', $actual );
}
/**
* This function tests the updateSettings mutation
*
* @source wp-content/plugins/wp-graphql/src/Type/Settings/Mutation/SettingsUpdate.php
* @access public
* @return void
*/
public function testUpdateSettingsMutation() {
/**
* Set the current user as the admin role so we
* successfully run the mutation
*/
wp_set_current_user( $this->admin );
$actual = $this->updateSettingsMutation();
/**
* Define the expected output.
*/
if ( is_multisite() ) {
$expected = [
'data' => [
'updateSettings' => [
'clientMutationId' => $this->clientMutationId,
'allSettings' => [
'discussionSettingsDefaultCommentStatus' => $this->discussionSettingsDefaultCommentStatus,
'discussionSettingsDefaultPingStatus' => $this->discussionSettingsDefaultPingStatus,
'generalSettingsDateFormat' => $this->generalSettingsDateFormat,
'generalSettingsDescription' => $this->generalSettingsDescription,
'generalSettingsLanguage' => $this->generalSettingsLanguage,
'generalSettingsStartOfWeek' => $this->generalSettingsStartOfWeek,
'generalSettingsTimeFormat' => $this->generalSettingsTimeFormat,
'generalSettingsTimezone' => $this->generalSettingsTimezone,
'generalSettingsTitle' => $this->generalSettingsTitle,
'readingSettingsPostsPerPage' => $this->readingSettingsPostsPerPage,
'writingSettingsDefaultCategory' => $this->writingSettingsDefaultCategory,
'writingSettingsDefaultPostFormat' => $this->writingSettingsDefaultPostFormat,
'writingSettingsUseSmilies' => $this->writingSettingsUseSmilies,
],
'discussionSettings' => [
'defaultCommentStatus' => $this->discussionSettingsDefaultCommentStatus,
'defaultPingStatus' => $this->discussionSettingsDefaultPingStatus,
],
'generalSettings' => [
'dateFormat' => $this->generalSettingsDateFormat,
'description' => $this->generalSettingsDescription,
'language' => $this->generalSettingsLanguage,
'startOfWeek' => $this->generalSettingsStartOfWeek,
'timeFormat' => $this->generalSettingsTimeFormat,
'timezone' => $this->generalSettingsTimezone,
'title' => $this->generalSettingsTitle,
],
'readingSettings' => [
'postsPerPage' => $this->readingSettingsPostsPerPage,
],
'writingSettings' => [
'defaultCategory' => $this->writingSettingsDefaultCategory,
'defaultPostFormat' => $this->writingSettingsDefaultPostFormat,
'useSmilies' => $this->writingSettingsUseSmilies,
],
],
],
];
} else {
$expected = [
'data' => [
'updateSettings' => [
'clientMutationId' => $this->clientMutationId,
'allSettings' => [
'discussionSettingsDefaultCommentStatus' => $this->discussionSettingsDefaultCommentStatus,
'discussionSettingsDefaultPingStatus' => $this->discussionSettingsDefaultPingStatus,
'generalSettingsDateFormat' => $this->generalSettingsDateFormat,
'generalSettingsDescription' => $this->generalSettingsDescription,
'generalSettingsEmail' => $this->generalSettingsEmail,
'generalSettingsLanguage' => $this->generalSettingsLanguage,
'generalSettingsStartOfWeek' => $this->generalSettingsStartOfWeek,
'generalSettingsTimeFormat' => $this->generalSettingsTimeFormat,
'generalSettingsTimezone' => $this->generalSettingsTimezone,
'generalSettingsTitle' => $this->generalSettingsTitle,
'generalSettingsUrl' => 'http://wpgraphql.test',
'readingSettingsPostsPerPage' => $this->readingSettingsPostsPerPage,
'writingSettingsDefaultCategory' => $this->writingSettingsDefaultCategory,
'writingSettingsDefaultPostFormat' => $this->writingSettingsDefaultPostFormat,
'writingSettingsUseSmilies' => $this->writingSettingsUseSmilies,
],
'discussionSettings' => [
'defaultCommentStatus' => $this->discussionSettingsDefaultCommentStatus,
'defaultPingStatus' => $this->discussionSettingsDefaultPingStatus,
],
'generalSettings' => [
'dateFormat' => $this->generalSettingsDateFormat,
'description' => $this->generalSettingsDescription,
'email' => $this->generalSettingsEmail,
'language' => $this->generalSettingsLanguage,
'startOfWeek' => $this->generalSettingsStartOfWeek,
'timeFormat' => $this->generalSettingsTimeFormat,
'timezone' => $this->generalSettingsTimezone,
'title' => $this->generalSettingsTitle,
'url' => 'http://wpgraphql.test',
],
'readingSettings' => [
'postsPerPage' => $this->readingSettingsPostsPerPage,
],
'writingSettings' => [
'defaultCategory' => $this->writingSettingsDefaultCategory,
'defaultPostFormat' => $this->writingSettingsDefaultPostFormat,
'useSmilies' => $this->writingSettingsUseSmilies,
],
],
],
];
}
/**
* Compare the actual output vs the expected output
*/
$this->assertEquals( $actual, $expected );
}
}