Make WordPress Core

Ticket #35658: 35658.35.diff

File 35658.35.diff, 12.9 KB (added by jeremyfelt, 9 years ago)
  • tests/phpunit/tests/meta/registerMeta.php

     
     1<?php
     2/**
     3 * @group meta
     4 */
     5class Tests_Meta_Register_Meta extends WP_UnitTestCase {
     6        protected static $editor_id;
     7        protected static $post_id;
     8        protected static $comment_id;
     9
     10        public static function wpSetUpBeforeClass( $factory ) {
     11                self::$editor_id = $factory->user->create( array( 'role' => 'editor' ) );
     12                self::$post_id = $factory->post->create();
     13                self::$comment_id = $factory->comment->create( array( 'comment_post_ID' => self::$post_id ) );
     14        }
     15
     16        public static function wpTearDownAfterClass() {
     17                self::delete_user( self::$editor_id );
     18                wp_delete_comment( self::$comment_id, true );
     19                wp_delete_post( self::$post_id, true );
     20        }
     21
     22        function setUp() {
     23                parent::setUp();
     24                wp_set_current_user( self::$editor_id );
     25
     26        }
     27
     28        public function _old_sanitize_meta_cb( $meta_value, $meta_key, $meta_type ) {
     29                return $meta_key . ' old sanitized';
     30        }
     31
     32        public function _new_sanitize_meta_cb( $meta_value, $meta_key, $object_type, $object_subtype ) {
     33                return $meta_key . ' new sanitized';
     34        }
     35
     36        public function test_register_meta_with_valid_object_type_and_object_subtype_returns_true() {
     37                $result = register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
     38                unregister_meta_key( 'post', 'post', 'flight_number' );
     39
     40                $this->assertTrue( $result );
     41        }
     42
     43        // @todo remove object_subtype from the meta key's array?
     44        public function test_register_meta_with_post_object_type_and_subtype_populates_wp_meta_keys() {
     45                global $wp_meta_keys;
     46
     47                register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
     48                $actual = $wp_meta_keys;
     49                unregister_meta_key( 'post', 'post', 'flight_number' );
     50
     51                $expected = array(
     52                        'post' => array(
     53                                'post' => array(
     54                                        'flight_number' => array(
     55                                                'object_subtype' => 'post',
     56                                                'type' => 'string',
     57                                                'description' => '',
     58                                                'single' => false,
     59                                                'sanitize_callback' => null,
     60                                                'auth_callback' => '__return_true',
     61                                                'show_in_rest' => false,
     62                                        ),
     63                                ),
     64                        ),
     65                );
     66
     67                $this->assertEquals( $actual, $expected );
     68        }
     69
     70        public function test_register_meta_with_post_object_type_and_unregistered_subtype_populates_wp_meta_keys() {
     71                global $wp_meta_keys;
     72
     73                register_meta( 'post', 'flight_number', array( 'object_subtype' => 'not_a_post_type' ) );
     74                $actual = $wp_meta_keys;
     75                unregister_meta_key( 'post', 'not_a_post_type', 'flight_number' );
     76
     77                $expected = array(
     78                        'post' => array(
     79                                'not_a_post_type' => array(
     80                                        'flight_number' => array(
     81                                                'object_subtype' => 'not_a_post_type',
     82                                                'type' => 'string',
     83                                                'description' => '',
     84                                                'single' => false,
     85                                                'sanitize_callback' => null,
     86                                                'auth_callback' => '__return_true',
     87                                                'show_in_rest' => false,
     88                                        ),
     89                                ),
     90                        ),
     91                );
     92
     93                $this->assertEquals( $actual, $expected );
     94        }
     95
     96        // @todo remove object_subtype from the meta key's array?
     97        public function test_register_meta_with_term_object_type_and_category_subtype_populates_wp_meta_keys() {
     98                global $wp_meta_keys;
     99                register_meta( 'term', 'category_icon', array( 'object_subtype' => 'category' ) );
     100                $actual = $wp_meta_keys;
     101                unregister_meta_key( 'term', 'category', 'category_icon' );
     102
     103                $expected = array(
     104                        'term' => array(
     105                                'category' => array(
     106                                        'category_icon' => array(
     107                                                'object_subtype' => 'category',
     108                                                'type' => 'string',
     109                                                'description' => '',
     110                                                'single' => false,
     111                                                'sanitize_callback' => null,
     112                                                'auth_callback' => '__return_true',
     113                                                'show_in_rest' => false,
     114                                        ),
     115                                ),
     116                        ),
     117                );
     118
     119                $this->assertEquals( $actual, $expected );
     120        }
     121
     122        public function test_register_meta_with_comment_object_type_and_subtype_populates_wp_meta_keys() {
     123                global $wp_meta_keys;
     124                register_meta( 'comment', 'comment_rating', array( 'object_subtype' => 'comment' ) );
     125                $actual = $wp_meta_keys;
     126                unregister_meta_key( 'comment', 'comment', 'comment_rating' );
     127
     128                $expected = array(
     129                        'comment' => array(
     130                                'comment' => array(
     131                                        'comment_rating' => array(
     132                                                'object_subtype' => 'comment',
     133                                                'type' => 'string',
     134                                                'description' => '',
     135                                                'single' => false,
     136                                                'sanitize_callback' => null,
     137                                                'auth_callback' => '__return_true',
     138                                                'show_in_rest' => false,
     139                                        ),
     140                                ),
     141                        ),
     142                );
     143
     144                $this->assertEquals( $actual, $expected );
     145        }
     146
     147        public function test_register_meta_with_deprecated_sanitize_callback_does_not_populate_wp_meta_keys() {
     148                global $wp_meta_keys;
     149
     150                register_meta( 'post', 'flight_number', array( $this, '_old_sanitize_meta_cb' ) );
     151                $actual = $wp_meta_keys;
     152                remove_filter( 'sanitize_post_meta_flight_number', array( $this, '_old_sanitize_meta_cb') );
     153                remove_filter( 'auth_post_meta_flight_number', '__return_true');
     154
     155                $this->assertEquals( array(), $actual );
     156        }
     157
     158        public function test_register_meta_with_deprecated_sanitize_callback_param_returns_wp_error() {
     159                $actual = register_meta( 'post', 'flight_number', array( $this, '_old_sanitize_meta_cb' ) );
     160
     161                remove_filter( 'sanitize_post_meta_flight_number', array( $this, '_old_sanitize_meta_cb') );
     162                remove_filter( 'auth_post_meta_flight_number', '__return_true');
     163
     164                $this->assertTrue( is_wp_error( $actual ) );
     165                $this->assertEquals( 'register_meta_failed', $actual->get_error_code() );
     166        }
     167
     168        public function test_register_meta_with_deprecated_sanitize_callback_parameter_passes_through_filter() {
     169                register_meta( 'post', 'old_sanitized_key', array( $this, '_old_sanitize_meta_cb' ) );
     170                $meta = sanitize_meta( 'old_sanitized_key', 'unsanitized', 'post', 'post' );
     171
     172                remove_filter( 'sanitize_post_meta_flight_number', array( $this, '_old_sanitize_meta_cb') );
     173                remove_filter( 'auth_post_meta_flight_number', '__return_true');
     174
     175                $this->assertEquals( 'old_sanitized_key old sanitized', $meta );
     176        }
     177
     178        public function test_register_meta_with_current_sanitize_callback_populates_wp_meta_keys() {
     179                global $wp_meta_keys;
     180                register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post', 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
     181                $actual = $wp_meta_keys;
     182                unregister_meta_key( 'post', 'post', 'flight_number' );
     183
     184                $expected = array(
     185                        'post' => array(
     186                                'post' => array(
     187                                        'flight_number' => array(
     188                                                'object_subtype' => 'post',
     189                                                'type' => 'string',
     190                                                'description' => '',
     191                                                'single' => false,
     192                                                'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ),
     193                                                'auth_callback' => '__return_true',
     194                                                'show_in_rest' => false,
     195                                        ),
     196                                ),
     197                        ),
     198                );
     199                $this->assertEquals( $actual, $expected );
     200        }
     201
     202        public function test_register_meta_with_current_sanitize_callback_returns_true() {
     203                $result = register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post', 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
     204                unregister_meta_key( 'post', 'post', 'flight_number' );
     205
     206                // @todo unregister_meta_key should do this for registered meta keys
     207                remove_filter( 'sanitize_post_post_meta_flight_number', array( $this, '_new_sanitize_meta_cb') );
     208                remove_filter( 'auth_post_post_meta_flight_number', '__return_true');
     209
     210                $this->assertTrue( $result );
     211        }
     212
     213        public function test_register_meta_with_new_sanitize_callback_parameter() {
     214                register_meta( 'post', 'new_sanitized_key', array( 'object_subtype' => 'post', 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
     215                $meta = sanitize_meta( 'new_sanitized_key', 'unsanitized', 'post', 'post' );
     216
     217                unregister_meta_key( 'post', 'post', 'new_sanitized_key' );
     218
     219                // @todo unregister_meta_key should do this for registered meta keys
     220                remove_filter( 'sanitize_post_post_meta_new_sanitized_key', array( $this, '_new_sanitize_meta_cb') );
     221                remove_filter( 'auth_post_post_meta_new_sanitized_key', '__return_true');
     222
     223                $this->assertEquals( 'new_sanitized_key new sanitized', $meta );
     224        }
     225
     226        public function test_unregister_meta_key_clears_key_from_wp_meta_keys() {
     227                global $wp_meta_keys;
     228                register_meta( 'post', 'registered_key', array( 'object_subtype' => 'post' ) );
     229                unregister_meta_key( 'post', 'post', 'registered_key' );
     230
     231                $this->assertEquals( array(), $wp_meta_keys );
     232        }
     233
     234        public function test_unregister_meta_key_with_invalid_key_returns_wp_error() {
     235                $this->assertWPError( unregister_meta_key( 'post', 'post', 'not_a_registered_key' ) );
     236        }
     237
     238        public function test_get_registered_meta_keys() {
     239                register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post' ) );
     240                register_meta( 'post', 'registered_key2', array( 'object_subtype' => 'post' ) );
     241
     242                $meta_keys = get_registered_meta_keys( 'post', 'post' );
     243
     244                unregister_meta_key( 'post', 'post', 'registered_key1' );
     245                unregister_meta_key( 'post', 'post', 'registered_key2' );
     246
     247                $this->assertArrayHasKey( 'registered_key1', $meta_keys );
     248                $this->assertArrayHasKey( 'registered_key2', $meta_keys );
     249        }
     250
     251        public function test_get_registered_meta_keys_with_subtype_without_registered_keys_is_empty() {
     252                register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post' ) );
     253                register_meta( 'post', 'registered_key2', array( 'object_subtype' => 'post' ) );
     254
     255                $meta_keys = get_registered_meta_keys( 'post', 'page' );
     256
     257                unregister_meta_key( 'post', 'post', 'registered_key1' );
     258                unregister_meta_key( 'post', 'post', 'registered_key2' );
     259
     260                $this->assertEmpty( $meta_keys );
     261        }
     262
     263        public function test_get_registered_meta_keys_with_invalid_type_is_empty() {
     264                register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post' ) );
     265                register_meta( 'post', 'registered_key2', array( 'object_subtype' => 'post' ) );
     266
     267                $meta_keys = get_registered_meta_keys( 'invalid-type' );
     268
     269                unregister_meta_key( 'post', 'post', 'registered_key1' );
     270                unregister_meta_key( 'post', 'post', 'registered_key2' );
     271
     272                $this->assertEmpty( $meta_keys );
     273        }
     274
     275        public function test_get_registered_meta_keys_has_count() {
     276                register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post' ) );
     277                register_meta( 'post', 'registered_key2', array( 'object_subtype' => 'page' ) );
     278
     279                $meta_keys = get_registered_meta_keys( 'post' );
     280
     281                $this->assertCount( 2, $meta_keys );
     282        }
     283
     284        public function test_get_registered_meta_keys_description_arg() {
     285                register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post', 'description' => 'I\'m just a field, take a good look at me' ) );
     286
     287                $meta_keys = get_registered_meta_keys( 'post', 'post' );
     288
     289                $this->assertEquals( 'I\'m just a field, take a good look at me', $meta_keys['registered_key1']['description'] );
     290        }
     291
     292        public function test_get_registered_meta_keys_invalid_arg() {
     293                register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post', 'invalid_arg' => 'invalid' ) );
     294
     295                $meta_keys = get_registered_meta_keys( 'post', 'post' );
     296
     297                $this->assertArrayNotHasKey( 'invalid_arg', $meta_keys['registered_key1'] );
     298        }
     299
     300        public function test_get_registered_metadata() {
     301                register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
     302
     303                add_post_meta( self::$post_id, 'flight_number', 'Oceanic 815' );
     304
     305                $meta = get_registered_metadata( 'post', 'post', self::$post_id );
     306
     307                $this->assertEquals( 'Oceanic 815', $meta['flight_number'][0] );
     308        }
     309
     310        public function test_get_registered_metadata_by_key() {
     311                register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
     312
     313                add_post_meta( self::$post_id, 'flight_number', 'Oceanic 815' );
     314
     315                $meta = get_registered_metadata( 'post', 'post', self::$post_id, 'flight_number' );
     316
     317                $this->assertEquals( 'Oceanic 815', $meta[0] );
     318        }
     319
     320        public function test_get_registered_metadata_by_key_single() {
     321                register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post', 'single' => true ) );
     322
     323                add_post_meta( self::$post_id, 'flight_number', 'Oceanic 815' );
     324
     325                $meta = get_registered_metadata( 'post', 'post', self::$post_id, 'flight_number' );
     326
     327                $this->assertEquals( 'Oceanic 815', $meta );
     328        }
     329
     330        public function test_get_registered_metadata_by_invalid_key() {
     331                register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
     332
     333                add_post_meta( self::$post_id, 'flight_number', 'Oceanic 815' );
     334
     335                $meta = get_registered_metadata( 'post', 'post', self::$post_id, 'flight_pilot' );
     336
     337                $this->assertWPError( $meta );
     338        }
     339
     340        public function test_get_registered_metadata_invalid_object_type() {
     341                register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
     342
     343                add_post_meta( self::$post_id, 'flight_number', 'Oceanic 815' );
     344
     345                $meta = get_registered_metadata( 'invalid-type', 'invalid-subtype', self::$post_id );
     346
     347                $this->assertWPError( $meta );
     348        }
     349
     350        public function test_get_registered_metadata_invalid() {
     351                $meta = get_registered_metadata( 'invalid-type', 'invalid-subtype', self::$post_id );
     352
     353                $this->assertWPError( $meta );
     354        }
     355}