WordPress.org

Make WordPress Core

Ticket #18429: post_unittests.patch

File post_unittests.patch, 9.4 KB (added by maxcutler, 6 years ago)

Some basic unit tests.

  • wp-testcase/test-xmlrpc-api/test_wp_editPost.php

     
     1<?php
     2include_once(ABSPATH . 'wp-admin/includes/admin.php');
     3include_once(ABSPATH . WPINC . '/class-IXR.php');
     4include_once(ABSPATH . WPINC . '/class-wp-xmlrpc-server.php');
     5
     6class TestXMLRPCServer_wp_editPost extends WPTestCase {
     7        var $user_ids = array();
     8
     9        function setUp() {
     10
     11                parent::setUp();
     12                // keep track of users we create
     13                $this->user_ids = array();
     14                $this->_flush_roles();
     15
     16                $this->orig_users = get_users_of_blog();
     17                add_filter( 'pre_option_enable_xmlrpc', '__return_true' );
     18
     19                $this->_make_user( 'subscriber', 'subscriber', 'subscriber' );
     20                $this->_make_user( 'contributor', 'contributor', 'contributor' );
     21                $this->_make_user( 'author', 'author', 'author' );
     22                $this->_make_user( 'editor', 'editor', 'editor' );
     23
     24                $this->myxmlrpcserver = new wp_xmlrpc_server();
     25        }
     26
     27        function tearDown() {
     28                parent::tearDown();
     29                // delete any users that were created during tests
     30                foreach ($this->user_ids as $id)
     31                        wp_delete_user($id);
     32
     33                remove_filter( 'pre_option_enable_xmlrpc', '__return_true' );
     34        }
     35
     36        function _flush_roles() {
     37                // we want to make sure we're testing against the db, not just in-memory data
     38                // this will flush everything and reload it from the db
     39                unset( $GLOBALS['wp_user_roles'] );
     40        }
     41
     42        function test_invalid_username_password() {
     43                $result = $this->myxmlrpcserver->wp_editPost( array( 1, 'username', 'password' ) );
     44                $this->assertInstanceOf( 'IXR_Error', $result );
     45                $this->assertEquals( 403, $result->code );
     46        }
     47
     48        function test_edit_own_post() {
     49                $contributor_id = get_user_by( 'login', 'contributor' )->ID;
     50                $post = array( 'post_title' => 'Post test', 'post_author' => $contributor_id );
     51                $post_id = wp_insert_post( $post );
     52
     53                $new_title = 'Post test (updated)';
     54                $post2 = array( 'post_title' => $new_title );
     55                $result = $this->myxmlrpcserver->wp_editPost( array( 1, 'contributor', 'contributor', $post_id, $post2 ) );
     56                $this->assertNotInstanceOf( 'IXR_Error', $result );
     57                $this->assertTrue($result);
     58
     59                $out = wp_get_single_post( $post_id );
     60                $this->assertEquals( $new_title, $out->post_title );
     61        }
     62
     63        function test_capable_edit_others_post() {
     64                $contributor_id = get_user_by( 'login', 'contributor' )->ID;
     65                $post = array( 'post_title' => 'Post test', 'post_author' => $contributor_id );
     66                $post_id = wp_insert_post( $post );
     67
     68                $new_title = 'Post test (updated)';
     69                $post2 = array( 'post_title' => $new_title );
     70                $result = $this->myxmlrpcserver->wp_editPost( array( 1, 'editor', 'editor', $post_id, $post2 ) );
     71                $this->assertNotInstanceOf( 'IXR_Error', $result );
     72                $this->assertTrue($result);
     73
     74                $out = wp_get_single_post( $post_id );
     75                $this->assertEquals( $new_title, $out->post_title );
     76        }
     77
     78        function test_incapable_edit_others_post() {
     79                $author_id = get_user_by( 'login', 'author' )->ID;
     80                $original_title = 'Post test';
     81                $post = array( 'post_title' => $original_title, 'post_author' => $author_id );
     82                $post_id = wp_insert_post( $post );
     83
     84                $new_title = 'Post test (updated)';
     85                $post2 = array( 'post_title' => $new_title );
     86                $result = $this->myxmlrpcserver->wp_editPost( array( 1, 'contributor', 'contributor', $post_id, $post2 ) );
     87                $this->assertInstanceOf( 'IXR_Error', $result );
     88                $this->assertEquals( 401, $result->code );
     89
     90                $out = wp_get_single_post( $post_id );
     91                $this->assertEquals( $original_title, $out->post_title );
     92        }
     93
     94        function test_capable_reassign_author() {
     95                $contributor_id = get_user_by( 'login', 'contributor' )->ID;
     96                $post = array( 'post_title' => 'Post test', 'post_author' => $contributor_id );
     97                $post_id = wp_insert_post( $post );
     98
     99                $author_id = get_user_by( 'login', 'author' )->ID;
     100                $post2 = array( 'post_author' => $author_id );
     101                $result = $this->myxmlrpcserver->wp_editPost( array( 1, 'editor', 'editor', $post_id, $post2 ) );
     102                $this->assertNotInstanceOf( 'IXR_Error', $result );
     103                $this->assertTrue($result);
     104
     105                $out = wp_get_single_post( $post_id );
     106                $this->assertEquals( $author_id, $out->post_author );
     107        }
     108
     109        function test_incapable_reassign_author() {
     110                $contributor_id = get_user_by( 'login', 'contributor' )->ID;
     111                $post = array( 'post_title' => 'Post test', 'post_author' => $contributor_id );
     112                $post_id = wp_insert_post( $post );
     113
     114                $author_id = get_user_by( 'login', 'author' )->ID;
     115                $post2 = array( 'post_author' => $author_id );
     116                $result = $this->myxmlrpcserver->wp_editPost( array( 1, 'contributor', 'contributor', $post_id, $post2 ) );
     117                $this->assertInstanceOf( 'IXR_Error', $result );
     118                $this->assertEquals( 401, $result->code );
     119
     120                $out = wp_get_single_post( $post_id );
     121                $this->assertEquals( $contributor_id, $out->post_author );
     122        }
     123
     124}
  • wp-testcase/test-xmlrpc-api/test_wp_newPost.php

     
    1515
    1616                $this->orig_users = get_users_of_blog();
    1717                add_filter( 'pre_option_enable_xmlrpc', '__return_true' );
     18
     19                $this->_make_user( 'subscriber', 'subscriber', 'subscriber' );
     20                $this->_make_user( 'contributor', 'contributor', 'contributor' );
     21                $this->_make_user( 'author', 'author', 'author' );
     22                $this->_make_user( 'editor', 'editor', 'editor' );
     23
     24                $this->myxmlrpcserver = new wp_xmlrpc_server();
    1825        }
    1926
    2027        function tearDown() {
     
    3340        }
    3441
    3542        function test_invalid_username_password() {
    36                 $myxmlrpcserver = new wp_xmlrpc_server();
    37                 $result = $myxmlrpcserver->wp_newPost( array( 1, 'username', 'password' ) );
     43                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'username', 'password' ) );
    3844                $this->assertInstanceOf( 'IXR_Error', $result );
    3945                $this->assertEquals( 403, $result->code );
    4046        }
    4147
    4248        function test_incapable_user() {
    43                 $this->_make_user( 'subscriber', 'subscriber', 'subscriber' );
    44                 $myxmlrpcserver = new wp_xmlrpc_server();
    45                 $result = $myxmlrpcserver->wp_newPost( array( 1, 'subscriber', 'subscriber' ) );
     49                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'subscriber', 'subscriber' ) );
    4650                $this->assertInstanceOf( 'IXR_Error', $result );
    4751                $this->assertEquals( 401, $result->code );
    4852        }
    4953
    5054        function test_no_content() {
    51                 $this->_make_user( 'author', 'author', 'author' );
    52                 $myxmlrpcserver = new wp_xmlrpc_server();
    53                 $result = $myxmlrpcserver->wp_newPost( array( 1, 'author', 'author' ) );
     55                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'author', 'author' ) );
    5456                $this->assertInstanceOf( 'IXR_Error', $result );
    5557                $this->assertEquals( 500, $result->code );
    5658                $this->assertEquals( 'Content, title, and excerpt are empty.', $result->message );
    5759        }
    5860
    59 }
    60  No newline at end of file
     61        function test_basic_content() {
     62                $post = array( 'post_title' => 'Test' );
     63                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'author', 'author', $post ) );
     64                $this->assertNotInstanceOf( 'IXR_Error', $result );
     65                $this->assertStringMatchesFormat( '%d', $result );
     66        }
     67
     68        function test_ignore_id() {
     69                $post = array( 'post_title' => 'Test', 'ID' => 103948 );
     70                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'author', 'author', $post ) );
     71                $this->assertNotInstanceOf( 'IXR_Error', $result );
     72                $this->assertNotEquals( '103948', $result );
     73        }
     74
     75        function test_capable_publish() {
     76                $post = array( 'post_title' => 'Test', 'post_status' => 'publish' );
     77                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'author', 'author', $post ) );
     78                $this->assertNotInstanceOf( 'IXR_Error', $result );
     79        }
     80
     81        function test_incapable_publish() {
     82                $post = array( 'post_title' => 'Test', 'post_status' => 'publish' );
     83                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'contributor', 'contributor', $post ) );
     84                $this->assertInstanceOf( 'IXR_Error', $result );
     85                $this->assertEquals( 401, $result->code );
     86        }
     87
     88        function test_capable_other_author() {
     89                $other_author_id = get_user_by( 'login', 'author' )->ID;
     90                $post = array( 'post_title' => 'Test', 'post_author' => $other_author_id );
     91                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'editor', 'editor', $post ) );
     92                $this->assertNotInstanceOf( 'IXR_Error', $result );
     93        }
     94
     95        function test_incapable_other_author() {
     96                $other_author_id = get_user_by( 'login', 'author' )->ID;
     97                $post = array( 'post_title' => 'Test', 'post_author' => $other_author_id );
     98                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'contributor', 'contributor', $post ) );
     99                $this->assertInstanceOf( 'IXR_Error', $result );
     100                $this->assertEquals( 401, $result->code );
     101        }
     102
     103        function test_invalid_author() {
     104                $post = array( 'post_title' => 'Test', 'post_author' => 99999999 );
     105                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'editor', 'editor', $post ) );
     106                $this->assertInstanceOf( 'IXR_Error', $result );
     107                $this->assertEquals( 404, $result->code );
     108        }
     109
     110        function test_empty_author() {
     111                $my_author_id = get_user_by( 'login', 'author' )->ID;
     112                $post = array( 'post_title' => 'Test' );
     113                $result = $this->myxmlrpcserver->wp_newPost( array( 1, 'author', 'author', $post ) );
     114                $this->assertNotInstanceOf( 'IXR_Error', $result );
     115
     116                $out = wp_get_single_post( $result );
     117                $this->assertEquals( $my_author_id, $out->post_author );
     118        }
     119
     120}