Added dependency plugins

This commit is contained in:
Moris Zen
2018-06-25 00:00:37 +02:00
parent 720a1c31a4
commit f069f6782f
698 changed files with 289637 additions and 1 deletions

View File

@@ -0,0 +1,577 @@
<?php
class UserObjectMutationsTest extends \Codeception\TestCase\WPTestCase {
public $first_name;
public $last_name;
public $client_mutation_id;
public $author;
public $admin;
public $subscriber;
public function setUp() {
// before
parent::setUp();
// Allow new users to be created for multisite tests
update_option( 'add_new_users', true );
add_filter( 'map_meta_cap', [ $this, 'filter_multisite_edit_user_capabilities' ], 1, 4 );
remove_all_filters( 'enable_edit_any_user_configuration' );
add_filter( 'enable_edit_any_user_configuration', '__return_true' );
$this->client_mutation_id = 'someUniqueId';
$this->first_name = 'Test';
$this->last_name = 'User';
$this->author = $this->factory->user->create( [
'role' => 'author',
] );
$this->admin = $this->factory->user->create( [
'role' => 'administrator',
] );
$this->subscriber = $this->factory->user->create( [
'role' => 'subscriber',
] );
}
public function tearDown() {
// your tear down methods here
// then
parent::tearDown();
}
/**
* This filters the capabilities so that our test user can create/edit/delete users in multisite.
*
* @param $caps
* @param $cap
* @param $user_id
* @param $args
*
* @return mixed
*/
function filter_multisite_edit_user_capabilities( $caps, $cap, $user_id, $args ) {
foreach ( $caps as $key => $capability ) {
if ( $capability != 'do_not_allow' ) {
continue;
}
switch ( $cap ) {
case 'edit_user':
case 'edit_users':
$caps[ $key ] = 'edit_users';
break;
case 'delete_user':
case 'delete_users':
$caps[ $key ] = 'delete_users';
break;
case 'create_users':
$caps[ $key ] = $cap;
break;
}
}
return $caps;
}
public function createUserMutation( $args ) {
$mutation = '
mutation createUser($input:CreateUserInput!) {
createUser(input:$input){
clientMutationId
user{
firstName
lastName
roles
email
username
}
}
}';
$variables = [
'input' => [
'clientMutationId' => $this->client_mutation_id,
'username' => $args['username'],
'email' => $args['email'],
'firstName' => $this->first_name,
'lastName' => $this->last_name,
'roles' => [
'administrator',
]
]
];
$actual = do_graphql_request( $mutation, 'createUser', $variables );
return $actual;
}
public function testCreateUserObjectWithoutProperCapabilities() {
/**
* Set the current user as the subscriber role so we
* can test the mutation and make sure they cannot create a post
* since they don't have proper permissions
*/
wp_set_current_user( $this->subscriber );
/**
* Run the mutation.
*/
$actual = $this->createUserMutation( [
'username' => 'userDoesNotExist',
'email' => 'emailDoesNotExist@test.com',
] );
/**
* We're asserting that this will properly return an error
* because this user doesn't have permissions to create a user as a
* subscriber
*/
$this->assertNotEmpty( $actual['errors'] );
}
public function testCreateUserObjectWithProperCapabilities() {
wp_set_current_user( $this->admin );
$username = 'rusercreatedbyadmin';
$email = 'UserCreatedByAdmin@test.com';
$actual = $this->createUserMutation( [
'username' => $username,
'email' => $email,
] );
$expected = [
'data' => [
'createUser' => [
'clientMutationId' => $this->client_mutation_id,
'user' => [
'firstName' => $this->first_name,
'lastName' => $this->last_name,
'roles' => [
'administrator',
],
'email' => $email,
'username' => $username,
]
]
]
];
$this->assertEquals( $expected, $actual );
}
public function testPreventDuplicateUsernames() {
wp_set_current_user( $this->admin );
$username = 'duplicateUsername';
$this->factory->user->create( [
'user_login' => $username
] );
$second_user = $this->createUserMutation( [
'username' => $username,
'email' => 'secondUsername@test.com',
] );
$this->assertEquals( $second_user['errors'][0]['message'], 'Sorry, that username already exists!' );
}
public function testPreventDuplicateEmails() {
wp_set_current_user( $this->admin );
$email = 'duplicateEmailAddress@test.com';
$this->factory->user->create( [
'user_email' => $email,
] );
$second_user = $this->createUserMutation( [
'username' => 'testDuplicateEmail2',
'email' => $email,
] );
$this->assertEquals( $second_user['errors'][0]['message'], 'Sorry, that email address is already used!' );
}
public function testInvalidEmailAddress() {
wp_set_current_user( $this->admin );
$user = $this->createUserMutation( [
'username' => 'testInvalidEmail',
'email' => 'notanemail',
] );
$this->assertEquals( $user['errors'][0]['message'], 'The email address you are trying to use is invalid' );
}
public function testUpdateUser() {
wp_set_current_user( $this->admin );
$user_login = 'test_user_update';
$user_email = 'testUserUpdate@test.com';
$user_role = 'editor';
$first_name = 'Test';
$last_name = 'User';
$args = [
'user_pass' => null,
'user_login' => $user_login,
'user_email' => $user_email,
'first_name' => $first_name,
'last_name' => $last_name,
'role' => $user_role,
];
$user_id = $this->factory->user->create( $args );
$guid = \GraphQLRelay\Relay::toGlobalId( 'user', $user_id );
$user_object = get_user_by( 'ID', $user_id );
$this->assertEquals( $user_object->user_login, $user_login );
$this->assertEquals( $user_object->user_email, $user_email );
$this->assertEquals( $user_object->roles[0], $user_role );
$this->assertEquals( $user_object->first_name, $first_name );
$this->assertEquals( $user_object->last_name, $last_name );
$mutation = '
mutation updateUser($input:UpdateUserInput!) {
updateUser(input:$input){
clientMutationId
user{
firstName
lastName
roles
username
email
userId
id
}
}
}
';
$updated_email = 'testUserUpdated@test.com';
$updated_firstname = 'Testupdate';
$updated_lastname = 'Updatetest';
$variables = [
'input' => [
'id' => $guid,
'clientMutationId' => $this->client_mutation_id,
'email' => $updated_email,
'firstName' => $updated_firstname,
'lastName' => $updated_lastname,
'roles' => [
'administrator',
]
]
];
$actual = do_graphql_request( $mutation, 'updateUser', $variables );
$expected = [
'data' => [
'updateUser' => [
'clientMutationId' => $this->client_mutation_id,
'user' => [
'firstName' => $updated_firstname,
'lastName' => $updated_lastname,
'roles' => [
'administrator',
],
'username' => $user_login,
'email' => $updated_email,
'userId' => $user_id,
'id' => $guid,
]
]
]
];
$this->assertEquals( $expected, $actual );
}
public function testDeleteUserWithCapability() {
wp_set_current_user( $this->admin );
$username = 'user_to_delete_with_capability';
$user_id = $this->factory->user->create( [
'role' => 'subscriber',
'user_login' => $username,
] );
$guid = \GraphQLRelay\Relay::toGlobalId( 'user', $user_id );
$mutation = '
mutation deleteUser($input:DeleteUserInput!) {
deleteUser(input:$input){
clientMutationId
user{
username
userId
id
}
}
}
';
$variables = [
'input' => [
'id' => $guid,
'clientMutationId' => $this->client_mutation_id,
]
];
$actual = do_graphql_request( $mutation, 'deleteUser', $variables );
$expected = [
'data' => [
'deleteUser' => [
'clientMutationId' => $this->client_mutation_id,
'user' => [
'username' => $username,
'userId' => $user_id,
'id' => $guid,
]
]
]
];
$this->assertEquals( $expected, $actual );
$user_obj_after_delete = get_user_by( 'id', $user_id );
/**
* Make sure the user actually got deleted.
*/
$this->assertEquals( false, $user_obj_after_delete );
}
public function testDeleteUserWithoutCapability() {
$username = 'user_to_delete_without_capability';
$user_id = $this->factory->user->create( [
'role' => 'subscriber',
'user_login' => $username,
] );
$guid = \GraphQLRelay\Relay::toGlobalId( 'user', $user_id );
$mutation = '
mutation deleteUser($input:DeleteUserInput!) {
deleteUser(input:$input){
clientMutationId
user{
username
userId
id
}
}
}
';
$variables = [
'input' => [
'id' => $guid,
'clientMutationId' => $this->client_mutation_id,
]
];
$actual = do_graphql_request( $mutation, 'deleteUser', $variables );
$this->assertEquals( 'Sorry, you are not allowed to delete users.', $actual['errors'][0]['message'] );
$user_obj_after_delete = get_user_by( 'id', $user_id );
/**
* Make sure the user didn't actually get deleted.
*/
$this->assertNotEquals( false, $user_obj_after_delete );
}
public function testCreateUserWithExtraFields() {
$username = 'userwithextrafields';
$email = 'userWithExtraFields@test.com';
$nicename = 'user NiceName';
$url = 'http://wpgraphql.com';
$date = date( "Y-m-d H:i:s" );
$displayName = 'User Display Name';
$nickname = 'User Nickname';
$description = 'User Description';
$locale = 'en';
wp_set_current_user( $this->admin );
$variables = [
'input' => [
'firstName' => $this->first_name,
'lastName' => $this->last_name,
'clientMutationId' => $this->client_mutation_id,
'username' => $username,
'email' => $email,
'password' => 'somePassword',
'websiteUrl' => $url,
'nicename' => $nicename,
'displayName' => $displayName,
'nickname' => $nickname,
'description' => $description,
'registered' => $date,
'locale' => $locale,
'roles' => [
'administrator',
],
],
];
$mutation = '
mutation createAndGetUser( $input:CreateUserInput! ) {
createUser( input: $input ) {
clientMutationId
user {
firstName
lastName
email
username
nicename
name
nickname
description
locale
}
}
}
';
$actual = do_graphql_request( $mutation, 'createAndGetUser', $variables );
$expected = [
'data' => [
'createUser' => [
'clientMutationId' => $this->client_mutation_id,
'user' => [
'firstName' => $this->first_name,
'lastName' => $this->last_name,
'email' => $email,
'username' => $username,
'nicename' => strtolower( str_ireplace( ' ', '-', $nicename ) ),
'name' => $displayName,
'nickname' => $nickname,
'description' => $description,
'locale' => $locale
]
]
]
];
$this->assertEquals( $expected, $actual );
}
public function testCreateUserWithoutRoles() {
$mutation = '
mutation createUserWithoutRoles( $input:CreateUserInput! ) {
createUser( input: $input ) {
clientMutationId
user {
firstName
lastName
username
}
}
}
';
$variables = [
'input' => [
'firstName' => $this->first_name,
'lastName' => $this->last_name,
'username' => 'createuserwithoutroles',
'clientMutationId' => $this->client_mutation_id,
],
];
wp_set_current_user( $this->admin );
$actual = do_graphql_request( $mutation, 'createUserWithoutRoles', $variables );
$expected = [
'data' => [
'createUser' => [
'clientMutationId' => $this->client_mutation_id,
'user' => [
'firstName' => $this->first_name,
'lastName' => $this->last_name,
'username' => 'createuserwithoutroles',
],
],
],
];
$this->assertEquals( $actual, $expected );
}
public function testUpdateUserWithInvalidRole() {
$mutation = '
mutation updateUserWithInvalidRole( $input:UpdateUserInput! ) {
updateUser( input: $input ) {
clientMutationId
user {
id
name
}
}
}
';
$variables = [
'input' => [
'clientMutationId' => $this->client_mutation_id,
'id' => \GraphQLRelay\Relay::toGlobalId( 'user', $this->author ),
'roles' => [
'invalidRole'
],
],
];
wp_set_current_user( $this->admin );
$actual = do_graphql_request( $mutation, 'updateUserWithInvalidRole', $variables );
$this->assertEquals( 'Sorry, you are not allowed to give this the following role: invalidRole.', $actual['errors'][0]['message'] );
}
}