Make WordPress Core

Ticket #25272: 25272-tests.patch

File 25272-tests.patch, 7.1 KB (added by azaozz, 11 years ago)
  • tests/phpunit/includes/testcase-ajax.php

     
    4242                'oembed_cache', 'image-editor', 'delete-comment', 'delete-tag', 'delete-link',
    4343                'delete-meta', 'delete-post', 'trash-post', 'untrash-post', 'delete-page', 'dim-comment',
    4444                'add-link-category', 'add-tag', 'get-tagcloud', 'get-comments', 'replyto-comment',
    45                 'edit-comment', 'add-menu-item', 'add-meta', 'add-user', 'autosave', 'closed-postboxes',
     45                'edit-comment', 'add-menu-item', 'add-meta', 'add-user', 'closed-postboxes',
    4646                'hidden-columns', 'update-welcome-panel', 'menu-get-metabox', 'wp-link-ajax',
    4747                'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink',
    4848                'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order',
    4949                'save-widget', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-fullscreen-save-post',
    50                 'wp-remove-post-lock', 'dismiss-wp-pointer', 'nopriv_autosave'
     50                'wp-remove-post-lock', 'dismiss-wp-pointer', 'heartbeat', 'nopriv_heartbeat',
    5151        );
    5252
    5353        /**
  • tests/phpunit/tests/ajax/Autosave.php

     
    2323        protected $_post = null;
    2424
    2525        /**
     26         * user_id
     27         * @var int
     28         */
     29        protected $user_id = 0;
     30
     31        /**
    2632         * Set up the test fixture
    2733         */
    2834        public function setUp() {
    2935                parent::setUp();
     36                // Set a user so the $post has 'post_author'
     37                $this->user_id = $this->factory->user->create( array( 'role' => 'administrator' ) );
     38                wp_set_current_user( $this->user_id );
     39               
    3040                $post_id = $this->factory->post->create( array( 'post_status' => 'draft' ) );
    3141                $this->_post = get_post( $post_id );
    3242        }
    3343
    3444        /**
     45         * Tear down the test fixture.
     46         * Reset the current user
     47         */
     48        public function tearDown() {
     49                parent::tearDown();
     50                wp_set_current_user( 0 );
     51        }
     52
     53        /**
    3554         * Test autosaving a post
    3655         * @return void
    3756         */
    3857        public function test_autosave_post() {
     58                // The original post_author
     59                wp_set_current_user( $this->user_id );
    3960
    40                 // Become an admin
    41                 $this->_setRole( 'administrator' );
    42 
    4361                // Set up the $_POST request
    4462                $md5 = md5( uniqid() );
    4563                $_POST = array(
    46                     'post_id'       => $this->_post->ID,
    47                     'autosavenonce' => wp_create_nonce( 'autosave' ),
    48                     'post_content'  => $this->_post->post_content . PHP_EOL . $md5,
    49                         'post_type'     => 'post',
    50                     'autosave'      => 1,
     64                        'action' =>     'heartbeat',
     65                        '_nonce' => wp_create_nonce( 'heartbeat-nonce' ),
     66                        'data' => array(
     67                                'autosave' => array(
     68                                    'post_id'       => $this->_post->ID,
     69                                    '_wpnonce'      => wp_create_nonce( 'update-post_' . $this->_post->ID ),
     70                                    'post_content'  => $this->_post->post_content . PHP_EOL . $md5,
     71                                        'post_type'     => 'post',
     72                                ),
     73                        ),
    5174                );
    5275
    5376                // Make the request
    5477                try {
    55                         $this->_handleAjax( 'autosave' );
     78                        $this->_handleAjax( 'heartbeat' );
    5679                } catch ( WPAjaxDieContinueException $e ) {
    5780                        unset( $e );
    5881                }
    5982
    60                 // Get the response
    61                 $xml = simplexml_load_string( $this->_last_response, 'SimpleXMLElement', LIBXML_NOCDATA );
     83                // Get the response, it is in heartbeat's response
     84                $response = json_decode( $this->_last_response, true );
    6285
    6386                // Ensure everything is correct
    64                 $this->assertEquals( $this->_post->ID, (int) $xml->response[0]->autosave['id'] );
    65                 $this->assertEquals( 'autosave_' . $this->_post->ID, (string) $xml->response['action']);
     87                $this->assertNotEmpty( $response['autosave'] );
     88                $this->assertTrue( $response['autosave']['success'] );
    6689
    6790                // Check that the edit happened
    68                 $post = get_post( $this->_post->ID) ;
     91                $post = get_post( $this->_post->ID );
    6992                $this->assertGreaterThanOrEqual( 0, strpos( $post->post_content, $md5 ) );
    7093        }
    71 
     94       
    7295        /**
    73          * Test with an invalid nonce
     96         * Test autosaving a locked post
    7497         * @return void
    7598         */
    76         public function test_with_invalid_nonce( ) {
     99        public function test_autosave_locked_post() {
     100                // Lock the post to another user
     101                $another_user_id = $this->factory->user->create( array( 'role' => 'editor' ) );
     102                wp_set_current_user( $another_user_id );
     103                wp_set_post_lock( $this->_post->ID );
     104               
     105                wp_set_current_user( $this->user_id );
    77106
    78                 // Become an administrator
    79                 $this->_setRole( 'administrator' );
     107                // Ensure post is locked
     108                $this->assertEquals( $another_user_id, wp_check_post_lock( $this->_post->ID ) );
    80109
    81110                // Set up the $_POST request
     111                $md5 = md5( uniqid() );
    82112                $_POST = array(
    83                     'post_id'       => $this->_post->ID,
    84                     'autosavenonce' => md5( uniqid() ),
    85                     'autosave'      => 1
     113                        'action' =>     'heartbeat',
     114                        '_nonce' => wp_create_nonce( 'heartbeat-nonce' ),
     115                        'data' => array(
     116                                'autosave' => array(
     117                                    'post_id'       => $this->_post->ID,
     118                                    '_wpnonce'      => wp_create_nonce( 'update-post_' . $this->_post->ID ),
     119                                    'post_content'  => $this->_post->post_content . PHP_EOL . $md5,
     120                                        'post_type'     => 'post',
     121                                ),
     122                        ),
    86123                );
    87124
    88125                // Make the request
    89                 $this->setExpectedException( 'WPAjaxDieStopException', '-1' );
    90                 $this->_handleAjax( 'autosave' );
     126                try {
     127                        $this->_handleAjax( 'heartbeat' );
     128                } catch ( WPAjaxDieContinueException $e ) {
     129                        unset( $e );
     130                }
     131
     132                $response = json_decode( $this->_last_response, true );
     133
     134                // Ensure everything is correct
     135                $this->assertNotEmpty( $response['autosave'] );
     136                $this->assertTrue( $response['autosave']['success'] );
     137
     138                // Check that the original post was NOT edited
     139                $post = get_post( $this->_post->ID );
     140                $this->assertFalse( strpos( $post->post_content, $md5 ) );
     141
     142                // Check if the autosave post was created
     143                $autosave = wp_get_post_autosave( $this->_post->ID, get_current_user_id() );
     144                $this->assertNotEmpty( $autosave );
     145                $this->assertGreaterThanOrEqual( 0, strpos( $autosave->post_content, $md5 ) );
    91146        }
    92147
    93148        /**
    94          * Test with a bad post id
     149         * Test with an invalid nonce
    95150         * @return void
    96151         */
    97         public function test_with_invalid_post_id( ) {
     152        public function test_with_invalid_nonce( ) {
    98153
    99                 // Become an administrator
    100                 $this->_setRole( 'administrator' );
     154                wp_set_current_user( $this->user_id );
    101155
    102156                // Set up the $_POST request
    103157                $_POST = array(
    104                     'post_id'       => 0,
    105                     'autosavenonce' => wp_create_nonce( 'autosave' ),
    106                     'autosave'      => 1,
    107                         'post_type'     => 'post'
     158                        'action' =>     'heartbeat',
     159                        '_nonce' => wp_create_nonce( 'heartbeat-nonce' ),
     160                        'data' => array(
     161                                'autosave' => array(
     162                                    'post_id'       => $this->_post->ID,
     163                                    '_wpnonce'      => substr( md5( uniqid() ), 0, 10 ),
     164                                ),
     165                        ),
    108166                );
    109167
    110168                // Make the request
    111                 $this->setExpectedException( 'WPAjaxDieStopException', 'You are not allowed to edit this post.' );
    112                 $this->_handleAjax( 'autosave' );
     169                try {
     170                        $this->_handleAjax( 'heartbeat' );
     171                } catch ( WPAjaxDieContinueException $e ) {
     172                        unset( $e );
     173                }
     174
     175                $response = json_decode( $this->_last_response, true );
     176
     177                $this->assertNotEmpty( $response['autosave'] );
     178                $this->assertFalse( $response['autosave']['success'] );
    113179        }
    114180}