Tests: Improve performance of post meta tests.

See #38323.


git-svn-id: https://develop.svn.wordpress.org/trunk@43339 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Felix Arntz 2018-06-11 16:32:32 +00:00
parent d3014a47b4
commit 9e38c2847e
1 changed files with 79 additions and 76 deletions

View File

@ -5,76 +5,79 @@
* @group meta * @group meta
*/ */
class Tests_Post_Meta extends WP_UnitTestCase { class Tests_Post_Meta extends WP_UnitTestCase {
function setUp() {
parent::setUp();
$this->author = new WP_User( self::factory()->user->create( array( 'role' => 'editor' ) ) ); protected static $author;
protected static $post_id;
protected static $post_id_2;
$post = array( public static function wpSetUpBeforeClass( $factory ) {
'post_author' => $this->author->ID, self::$author = $factory->user->create_and_get( array( 'role' => 'editor' ) );
self::$post_id = $factory->post->create( array(
'post_author' => self::$author->ID,
'post_status' => 'publish', 'post_status' => 'publish',
'post_content' => rand_str(), 'post_content' => rand_str(),
'post_title' => rand_str(), 'post_title' => rand_str(),
); ) );
// insert a post self::$post_id_2 = $factory->post->create( array(
$this->post_id = wp_insert_post( $post ); 'post_author' => self::$author->ID,
$post = array(
'post_author' => $this->author->ID,
'post_status' => 'publish', 'post_status' => 'publish',
'post_content' => rand_str(), 'post_content' => rand_str(),
'post_title' => rand_str(), 'post_title' => rand_str(),
); ) );
}
// insert a post public static function wpTearDownAfterClass() {
$this->post_id_2 = wp_insert_post( $post ); wp_delete_post( self::$post_id, true );
wp_delete_post( self::$post_id_2, true );
self::delete_user( self::$author );
} }
function test_unique_postmeta() { function test_unique_postmeta() {
// Add a unique post meta item // Add a unique post meta item
$this->assertInternalType( 'integer', add_post_meta( $this->post_id, 'unique', 'value', true ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id, 'unique', 'value', true ) );
// Check unique is enforced // Check unique is enforced
$this->assertFalse( add_post_meta( $this->post_id, 'unique', 'another value', true ) ); $this->assertFalse( add_post_meta( self::$post_id, 'unique', 'another value', true ) );
//Check it exists //Check it exists
$this->assertEquals( 'value', get_post_meta( $this->post_id, 'unique', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id, 'unique', true ) );
$this->assertEquals( array( 'value' ), get_post_meta( $this->post_id, 'unique', false ) ); $this->assertEquals( array( 'value' ), get_post_meta( self::$post_id, 'unique', false ) );
//Fail to delete the wrong value //Fail to delete the wrong value
$this->assertFalse( delete_post_meta( $this->post_id, 'unique', 'wrong value' ) ); $this->assertFalse( delete_post_meta( self::$post_id, 'unique', 'wrong value' ) );
//Delete it //Delete it
$this->assertTrue( delete_post_meta( $this->post_id, 'unique', 'value' ) ); $this->assertTrue( delete_post_meta( self::$post_id, 'unique', 'value' ) );
//Check it is deleted //Check it is deleted
$this->assertEquals( '', get_post_meta( $this->post_id, 'unique', true ) ); $this->assertEquals( '', get_post_meta( self::$post_id, 'unique', true ) );
$this->assertEquals( array(), get_post_meta( $this->post_id, 'unique', false ) ); $this->assertEquals( array(), get_post_meta( self::$post_id, 'unique', false ) );
} }
function test_nonunique_postmeta() { function test_nonunique_postmeta() {
// Add two non unique post meta item // Add two non unique post meta item
$this->assertInternalType( 'integer', add_post_meta( $this->post_id, 'nonunique', 'value' ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id, 'nonunique', 'value' ) );
$this->assertInternalType( 'integer', add_post_meta( $this->post_id, 'nonunique', 'another value' ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id, 'nonunique', 'another value' ) );
//Check they exists //Check they exists
$this->assertEquals( 'value', get_post_meta( $this->post_id, 'nonunique', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id, 'nonunique', true ) );
$this->assertEquals( array( 'value', 'another value' ), get_post_meta( $this->post_id, 'nonunique', false ) ); $this->assertEquals( array( 'value', 'another value' ), get_post_meta( self::$post_id, 'nonunique', false ) );
//Fail to delete the wrong value //Fail to delete the wrong value
$this->assertFalse( delete_post_meta( $this->post_id, 'nonunique', 'wrong value' ) ); $this->assertFalse( delete_post_meta( self::$post_id, 'nonunique', 'wrong value' ) );
//Delete the first one //Delete the first one
$this->assertTrue( delete_post_meta( $this->post_id, 'nonunique', 'value' ) ); $this->assertTrue( delete_post_meta( self::$post_id, 'nonunique', 'value' ) );
//Check the remainder exists //Check the remainder exists
$this->assertEquals( 'another value', get_post_meta( $this->post_id, 'nonunique', true ) ); $this->assertEquals( 'another value', get_post_meta( self::$post_id, 'nonunique', true ) );
$this->assertEquals( array( 'another value' ), get_post_meta( $this->post_id, 'nonunique', false ) ); $this->assertEquals( array( 'another value' ), get_post_meta( self::$post_id, 'nonunique', false ) );
//Add a third one //Add a third one
$this->assertInternalType( 'integer', add_post_meta( $this->post_id, 'nonunique', 'someother value' ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id, 'nonunique', 'someother value' ) );
//Check they exists //Check they exists
$expected = array( $expected = array(
@ -82,8 +85,8 @@ class Tests_Post_Meta extends WP_UnitTestCase {
'another value', 'another value',
); );
sort( $expected ); sort( $expected );
$this->assertTrue( in_array( get_post_meta( $this->post_id, 'nonunique', true ), $expected ) ); $this->assertTrue( in_array( get_post_meta( self::$post_id, 'nonunique', true ), $expected ) );
$actual = get_post_meta( $this->post_id, 'nonunique', false ); $actual = get_post_meta( self::$post_id, 'nonunique', false );
sort( $actual ); sort( $actual );
$this->assertEquals( $expected, $actual ); $this->assertEquals( $expected, $actual );
@ -93,78 +96,78 @@ class Tests_Post_Meta extends WP_UnitTestCase {
function test_update_post_meta() { function test_update_post_meta() {
// Add a unique post meta item // Add a unique post meta item
$this->assertInternalType( 'integer', add_post_meta( $this->post_id, 'unique_update', 'value', true ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id, 'unique_update', 'value', true ) );
// Add two non unique post meta item // Add two non unique post meta item
$this->assertInternalType( 'integer', add_post_meta( $this->post_id, 'nonunique_update', 'value' ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id, 'nonunique_update', 'value' ) );
$this->assertInternalType( 'integer', add_post_meta( $this->post_id, 'nonunique_update', 'another value' ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id, 'nonunique_update', 'another value' ) );
//Check they exists //Check they exists
$this->assertEquals( 'value', get_post_meta( $this->post_id, 'unique_update', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id, 'unique_update', true ) );
$this->assertEquals( array( 'value' ), get_post_meta( $this->post_id, 'unique_update', false ) ); $this->assertEquals( array( 'value' ), get_post_meta( self::$post_id, 'unique_update', false ) );
$this->assertEquals( 'value', get_post_meta( $this->post_id, 'nonunique_update', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id, 'nonunique_update', true ) );
$this->assertEquals( array( 'value', 'another value' ), get_post_meta( $this->post_id, 'nonunique_update', false ) ); $this->assertEquals( array( 'value', 'another value' ), get_post_meta( self::$post_id, 'nonunique_update', false ) );
// Update them // Update them
$this->assertTrue( update_post_meta( $this->post_id, 'unique_update', 'new', 'value' ) ); $this->assertTrue( update_post_meta( self::$post_id, 'unique_update', 'new', 'value' ) );
$this->assertTrue( update_post_meta( $this->post_id, 'nonunique_update', 'new', 'value' ) ); $this->assertTrue( update_post_meta( self::$post_id, 'nonunique_update', 'new', 'value' ) );
$this->assertTrue( update_post_meta( $this->post_id, 'nonunique_update', 'another new', 'another value' ) ); $this->assertTrue( update_post_meta( self::$post_id, 'nonunique_update', 'another new', 'another value' ) );
//Check they updated //Check they updated
$this->assertEquals( 'new', get_post_meta( $this->post_id, 'unique_update', true ) ); $this->assertEquals( 'new', get_post_meta( self::$post_id, 'unique_update', true ) );
$this->assertEquals( array( 'new' ), get_post_meta( $this->post_id, 'unique_update', false ) ); $this->assertEquals( array( 'new' ), get_post_meta( self::$post_id, 'unique_update', false ) );
$this->assertEquals( 'new', get_post_meta( $this->post_id, 'nonunique_update', true ) ); $this->assertEquals( 'new', get_post_meta( self::$post_id, 'nonunique_update', true ) );
$this->assertEquals( array( 'new', 'another new' ), get_post_meta( $this->post_id, 'nonunique_update', false ) ); $this->assertEquals( array( 'new', 'another new' ), get_post_meta( self::$post_id, 'nonunique_update', false ) );
} }
function test_delete_post_meta() { function test_delete_post_meta() {
// Add a unique post meta item // Add a unique post meta item
$this->assertInternalType( 'integer', add_post_meta( $this->post_id, 'unique_delete', 'value', true ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id, 'unique_delete', 'value', true ) );
$this->assertInternalType( 'integer', add_post_meta( $this->post_id_2, 'unique_delete', 'value', true ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id_2, 'unique_delete', 'value', true ) );
//Check they exists //Check they exists
$this->assertEquals( 'value', get_post_meta( $this->post_id, 'unique_delete', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id, 'unique_delete', true ) );
$this->assertEquals( 'value', get_post_meta( $this->post_id_2, 'unique_delete', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id_2, 'unique_delete', true ) );
//Delete one of them //Delete one of them
$this->assertTrue( delete_post_meta( $this->post_id, 'unique_delete', 'value' ) ); $this->assertTrue( delete_post_meta( self::$post_id, 'unique_delete', 'value' ) );
//Check the other still exitsts //Check the other still exitsts
$this->assertEquals( 'value', get_post_meta( $this->post_id_2, 'unique_delete', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id_2, 'unique_delete', true ) );
} }
function test_delete_post_meta_by_key() { function test_delete_post_meta_by_key() {
// Add a unique post meta item // Add a unique post meta item
$this->assertInternalType( 'integer', add_post_meta( $this->post_id, 'unique_delete_by_key', 'value', true ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id, 'unique_delete_by_key', 'value', true ) );
$this->assertInternalType( 'integer', add_post_meta( $this->post_id_2, 'unique_delete_by_key', 'value', true ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id_2, 'unique_delete_by_key', 'value', true ) );
//Check they exist //Check they exist
$this->assertEquals( 'value', get_post_meta( $this->post_id, 'unique_delete_by_key', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id, 'unique_delete_by_key', true ) );
$this->assertEquals( 'value', get_post_meta( $this->post_id_2, 'unique_delete_by_key', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id_2, 'unique_delete_by_key', true ) );
//Delete one of them //Delete one of them
$this->assertTrue( delete_post_meta_by_key( 'unique_delete_by_key' ) ); $this->assertTrue( delete_post_meta_by_key( 'unique_delete_by_key' ) );
//Check the other still exists //Check the other still exists
$this->assertEquals( '', get_post_meta( $this->post_id_2, 'unique_delete_by_key', true ) ); $this->assertEquals( '', get_post_meta( self::$post_id_2, 'unique_delete_by_key', true ) );
$this->assertEquals( '', get_post_meta( $this->post_id_2, 'unique_delete_by_key', true ) ); $this->assertEquals( '', get_post_meta( self::$post_id_2, 'unique_delete_by_key', true ) );
} }
function test_get_post_meta_by_id() { function test_get_post_meta_by_id() {
$mid = add_post_meta( $this->post_id, 'get_post_meta_by_key', 'get_post_meta_by_key_value', true ); $mid = add_post_meta( self::$post_id, 'get_post_meta_by_key', 'get_post_meta_by_key_value', true );
$this->assertInternalType( 'integer', $mid ); $this->assertInternalType( 'integer', $mid );
$mobj = new stdClass; $mobj = new stdClass;
$mobj->meta_id = $mid; $mobj->meta_id = $mid;
$mobj->post_id = $this->post_id; $mobj->post_id = self::$post_id;
$mobj->meta_key = 'get_post_meta_by_key'; $mobj->meta_key = 'get_post_meta_by_key';
$mobj->meta_value = 'get_post_meta_by_key_value'; $mobj->meta_value = 'get_post_meta_by_key_value';
$this->assertEquals( $mobj, get_post_meta_by_id( $mid ) ); $this->assertEquals( $mobj, get_post_meta_by_id( $mid ) );
delete_metadata_by_mid( 'post', $mid ); delete_metadata_by_mid( 'post', $mid );
$mid = add_post_meta( $this->post_id, 'get_post_meta_by_key', array( 'foo', 'bar' ), true ); $mid = add_post_meta( self::$post_id, 'get_post_meta_by_key', array( 'foo', 'bar' ), true );
$this->assertInternalType( 'integer', $mid ); $this->assertInternalType( 'integer', $mid );
$mobj->meta_id = $mid; $mobj->meta_id = $mid;
$mobj->meta_value = array( 'foo', 'bar' ); $mobj->meta_value = array( 'foo', 'bar' );
@ -173,7 +176,7 @@ class Tests_Post_Meta extends WP_UnitTestCase {
} }
function test_delete_meta() { function test_delete_meta() {
$mid = add_post_meta( $this->post_id, 'delete_meta', 'delete_meta_value', true ); $mid = add_post_meta( self::$post_id, 'delete_meta', 'delete_meta_value', true );
$this->assertInternalType( 'integer', $mid ); $this->assertInternalType( 'integer', $mid );
$this->assertTrue( delete_meta( $mid ) ); $this->assertTrue( delete_meta( $mid ) );
@ -184,17 +187,17 @@ class Tests_Post_Meta extends WP_UnitTestCase {
function test_update_meta() { function test_update_meta() {
// Add a unique post meta item // Add a unique post meta item
$this->assertInternalType( 'integer', $mid1 = add_post_meta( $this->post_id, 'unique_update', 'value', true ) ); $this->assertInternalType( 'integer', $mid1 = add_post_meta( self::$post_id, 'unique_update', 'value', true ) );
// Add two non unique post meta item // Add two non unique post meta item
$this->assertInternalType( 'integer', $mid2 = add_post_meta( $this->post_id, 'nonunique_update', 'value' ) ); $this->assertInternalType( 'integer', $mid2 = add_post_meta( self::$post_id, 'nonunique_update', 'value' ) );
$this->assertInternalType( 'integer', $mid3 = add_post_meta( $this->post_id, 'nonunique_update', 'another value' ) ); $this->assertInternalType( 'integer', $mid3 = add_post_meta( self::$post_id, 'nonunique_update', 'another value' ) );
//Check they exist //Check they exist
$this->assertEquals( 'value', get_post_meta( $this->post_id, 'unique_update', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id, 'unique_update', true ) );
$this->assertEquals( array( 'value' ), get_post_meta( $this->post_id, 'unique_update', false ) ); $this->assertEquals( array( 'value' ), get_post_meta( self::$post_id, 'unique_update', false ) );
$this->assertEquals( 'value', get_post_meta( $this->post_id, 'nonunique_update', true ) ); $this->assertEquals( 'value', get_post_meta( self::$post_id, 'nonunique_update', true ) );
$this->assertEquals( array( 'value', 'another value' ), get_post_meta( $this->post_id, 'nonunique_update', false ) ); $this->assertEquals( array( 'value', 'another value' ), get_post_meta( self::$post_id, 'nonunique_update', false ) );
// Update them // Update them
$this->assertTrue( update_meta( $mid1, 'unique_update', 'new' ) ); $this->assertTrue( update_meta( $mid1, 'unique_update', 'new' ) );
@ -202,10 +205,10 @@ class Tests_Post_Meta extends WP_UnitTestCase {
$this->assertTrue( update_meta( $mid3, 'nonunique_update', 'another new' ) ); $this->assertTrue( update_meta( $mid3, 'nonunique_update', 'another new' ) );
//Check they updated //Check they updated
$this->assertEquals( 'new', get_post_meta( $this->post_id, 'unique_update', true ) ); $this->assertEquals( 'new', get_post_meta( self::$post_id, 'unique_update', true ) );
$this->assertEquals( array( 'new' ), get_post_meta( $this->post_id, 'unique_update', false ) ); $this->assertEquals( array( 'new' ), get_post_meta( self::$post_id, 'unique_update', false ) );
$this->assertEquals( 'new', get_post_meta( $this->post_id, 'nonunique_update', true ) ); $this->assertEquals( 'new', get_post_meta( self::$post_id, 'nonunique_update', true ) );
$this->assertEquals( array( 'new', 'another new' ), get_post_meta( $this->post_id, 'nonunique_update', false ) ); $this->assertEquals( array( 'new', 'another new' ), get_post_meta( self::$post_id, 'nonunique_update', false ) );
// Slashed update // Slashed update
$data = "'quote and \slash"; $data = "'quote and \slash";
@ -229,10 +232,10 @@ class Tests_Post_Meta extends WP_UnitTestCase {
$funky_meta[] = $classy; $funky_meta[] = $classy;
// Add a post meta item // Add a post meta item
$this->assertInternalType( 'integer', add_post_meta( $this->post_id, 'test_funky_post_meta', $funky_meta, true ) ); $this->assertInternalType( 'integer', add_post_meta( self::$post_id, 'test_funky_post_meta', $funky_meta, true ) );
//Check they exists //Check they exists
$this->assertEquals( $funky_meta, get_post_meta( $this->post_id, 'test_funky_post_meta', true ) ); $this->assertEquals( $funky_meta, get_post_meta( self::$post_id, 'test_funky_post_meta', true ) );
} }
} }