Finish out tests, make sure to use cprrect meta ID field in order by clause.
This commit is contained in:
parent
97c0edf445
commit
5d6cdd05f1
|
@ -89,6 +89,7 @@ abstract class WC_Data {
|
|||
|
||||
/**
|
||||
* Get All Meta Data
|
||||
* @since 2.7.0
|
||||
* @return array
|
||||
*/
|
||||
public function get_meta_data() {
|
||||
|
@ -98,6 +99,7 @@ abstract class WC_Data {
|
|||
/**
|
||||
* Internal meta keys we don't want exposed as part of meta_data. This is in
|
||||
* addition to all data props with _ prefix.
|
||||
* @since 2.7.0
|
||||
* @return array()
|
||||
*/
|
||||
protected function prefix_key( $key ) {
|
||||
|
@ -107,6 +109,7 @@ abstract class WC_Data {
|
|||
/**
|
||||
* Internal meta keys we don't want exposed as part of meta_data. This is in
|
||||
* addition to all data props with _ prefix.
|
||||
* @since 2.7.0
|
||||
* @return array()
|
||||
*/
|
||||
protected function get_internal_meta_keys() {
|
||||
|
@ -115,6 +118,7 @@ abstract class WC_Data {
|
|||
|
||||
/**
|
||||
* Get Meta Data by Key.
|
||||
* @since 2.7.0
|
||||
* @param string $key
|
||||
* @param bool $single return first found meta with key, or all with $key
|
||||
* @return mixed
|
||||
|
@ -136,6 +140,7 @@ abstract class WC_Data {
|
|||
|
||||
/**
|
||||
* Set all meta data from array.
|
||||
* @since 2.7.0
|
||||
* @param array $data Key/Value pairs
|
||||
*/
|
||||
public function set_meta_data( $data ) {
|
||||
|
@ -155,6 +160,7 @@ abstract class WC_Data {
|
|||
|
||||
/**
|
||||
* Add meta data.
|
||||
* @since 2.7.0
|
||||
* @param array $key Meta key
|
||||
* @param array $value Meta value
|
||||
* @param array $unique Should this be a unique key?
|
||||
|
@ -172,6 +178,7 @@ abstract class WC_Data {
|
|||
|
||||
/**
|
||||
* Update meta data by key or ID, if provided.
|
||||
* @since 2.7.0
|
||||
* @param string $key
|
||||
* @param string $value
|
||||
* @param int $meta_id
|
||||
|
@ -189,6 +196,7 @@ abstract class WC_Data {
|
|||
|
||||
/**
|
||||
* Delete meta data.
|
||||
* @since 2.7.0
|
||||
* @param array $key Meta key
|
||||
*/
|
||||
public function delete_meta_data( $key ) {
|
||||
|
@ -198,6 +206,7 @@ abstract class WC_Data {
|
|||
|
||||
/**
|
||||
* Read Meta Data from the database. Ignore any internal properties.
|
||||
* @since 2.7.0
|
||||
*/
|
||||
protected function read_meta_data() {
|
||||
$this->_meta_data = array();
|
||||
|
@ -223,14 +232,15 @@ abstract class WC_Data {
|
|||
$raw_meta_data = $wpdb->get_results( $wpdb->prepare( "
|
||||
SELECT " . $db_info['meta_id_field'] . ", meta_key, meta_value
|
||||
FROM " . $db_info['table'] . "
|
||||
WHERE " . $db_info['object_id_field'] . " = %d ORDER BY meta_id
|
||||
WHERE " . $db_info['object_id_field'] . " = %d ORDER BY " . $db_info['meta_id_field'] . "
|
||||
", $this->get_id() ) );
|
||||
|
||||
foreach ( $raw_meta_data as $meta ) {
|
||||
if ( in_array( $meta->meta_key, $this->get_internal_meta_keys() ) ) {
|
||||
continue;
|
||||
}
|
||||
$this->_meta_data[ $meta->meta_id ] = (object) array( 'key' => $meta->meta_key, 'value' => $meta->meta_value );
|
||||
|
||||
$this->_meta_data[ $meta->{$db_info['meta_id_field']} ] = (object) array( 'key' => $meta->meta_key, 'value' => $meta->meta_value );
|
||||
}
|
||||
|
||||
if ( ! empty ( $this->_cache_group ) ) {
|
||||
|
@ -241,6 +251,7 @@ abstract class WC_Data {
|
|||
|
||||
/**
|
||||
* Update Meta Data in the database.
|
||||
* @since 2.7.0
|
||||
*/
|
||||
protected function save_meta_data() {
|
||||
global $wpdb;
|
||||
|
@ -276,6 +287,7 @@ abstract class WC_Data {
|
|||
|
||||
/**
|
||||
* Table structure is slightly different between meta types, this function will return what we need to know.
|
||||
* @since 2.7.0
|
||||
* @return array Array elements: table, object_id_field, meta_id_field
|
||||
*/
|
||||
private function _get_db_info() {
|
||||
|
|
|
@ -28,23 +28,22 @@ class WC_Mock_WC_data extends WC_Data {
|
|||
| These functions just change the properties set above.
|
||||
*/
|
||||
|
||||
|
||||
function set_cache_group( $cache_group ) {
|
||||
$this->_cache_group = $cache_group;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set meta type (user or post).
|
||||
* @param string $meta_type
|
||||
*/
|
||||
function set_meta_type( $meta_type ) {
|
||||
$this->_meta_type = $meta_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set object ID field dynamically for testing.
|
||||
* @param string $object_id_field
|
||||
*/
|
||||
function set_object_id_field( $object_id_field ) {
|
||||
$this->object_id_field_for_meta = $object_id_field;
|
||||
}
|
||||
|
||||
function set_internal_meta_keys( $internal_meta_keys ) {
|
||||
$this->_internal_meta_keys = $internal_meta_keys;
|
||||
}
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Abstract methods.
|
||||
|
@ -53,24 +52,43 @@ class WC_Mock_WC_data extends WC_Data {
|
|||
| testing the good bits.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Simple read.
|
||||
*/
|
||||
public function __construct( $id = '' ) {
|
||||
if ( ! empty( $id ) ) {
|
||||
$this->read( $id );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple get ID.
|
||||
* @return integer
|
||||
*/
|
||||
public function get_id() {
|
||||
return intval( $this->_data['id'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple get content.
|
||||
* @return string
|
||||
*/
|
||||
public function get_content() {
|
||||
return $this->_data['content'];
|
||||
}
|
||||
|
||||
/**
|
||||
* SImple set content.
|
||||
* @param string $content
|
||||
*/
|
||||
public function set_content( $content ) {
|
||||
$this->_data['content'] = $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple get data as array.
|
||||
* @return array
|
||||
*/
|
||||
public function get_data() {
|
||||
return array_merge(
|
||||
$this->_data,
|
||||
|
@ -80,27 +98,45 @@ class WC_Mock_WC_data extends WC_Data {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple create.
|
||||
*/
|
||||
public function create() {
|
||||
if ( 'user' === $this->_meta_type ) {
|
||||
$content_id = wc_create_new_customer( $this->get_content(), 'username-' . time(), 'hunter2' );
|
||||
} else {
|
||||
$content_id = wp_insert_post( array ( 'post_title' => $this->get_content() ) );
|
||||
}
|
||||
|
||||
if ( $content_id ) {
|
||||
$this->_data['id'] = $content_id;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple read.
|
||||
*/
|
||||
public function read( $id ) {
|
||||
if ( empty( $id ) || ! ( $post_object = get_post( $id ) ) ) {
|
||||
return;
|
||||
|
||||
if ( 'user' === $this->_meta_type ) {
|
||||
if ( empty( $id ) || ! ( $user_object = get_userdata( $id ) ) ) {
|
||||
return;
|
||||
}
|
||||
$this->_data['id'] = absint( $user_object->ID );
|
||||
$this->set_content( $user_object->user_email );
|
||||
} else {
|
||||
if ( empty( $id ) || ! ( $post_object = get_post( $id ) ) ) {
|
||||
return;
|
||||
}
|
||||
$this->_data['id'] = absint( $post_object->ID );
|
||||
$this->set_content( $post_object->post_title );
|
||||
}
|
||||
$this->_data['id'] = absint( $post_object->ID );
|
||||
$this->set_content( $post_object->post_title );
|
||||
|
||||
$this->read_meta_data();
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple update.
|
||||
*/
|
||||
public function update() {
|
||||
global $wpdb;
|
||||
$content_id = $this->get_id();
|
||||
|
@ -112,6 +148,9 @@ class WC_Mock_WC_data extends WC_Data {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple delete.
|
||||
*/
|
||||
public function delete() {
|
||||
if ( 'user' === $this->_meta_type ) {
|
||||
wp_delete_user( $this->get_id() );
|
||||
|
@ -120,6 +159,9 @@ class WC_Mock_WC_data extends WC_Data {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple save.
|
||||
*/
|
||||
public function save() {
|
||||
if ( ! $this->get_id() ) {
|
||||
$this->create();
|
||||
|
@ -129,12 +171,4 @@ class WC_Mock_WC_data extends WC_Data {
|
|||
$this->save_meta_data();
|
||||
}
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Provide a public interface to a few of our.
|
||||
|--------------------------------------------------------------------------
|
||||
| Define the abstract methods WC_Data classes expect, so we can go on to
|
||||
| testing the good bits.
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -7,15 +7,25 @@ namespace WooCommerce\Tests\CRUD;
|
|||
*/
|
||||
class Meta extends \WC_Unit_Test_Case {
|
||||
|
||||
/**
|
||||
* Create a test post we can add/test meta against.
|
||||
*/
|
||||
public function create_test_post() {
|
||||
$object = new \WC_Mock_WC_data();
|
||||
$object->set_content( 'testing' );
|
||||
$object->save();
|
||||
$object_id = $object->get_id();
|
||||
add_metadata( 'post', $object_id, 'test_meta_key', 'val1', true );
|
||||
add_metadata( 'post', $object_id, 'test_multi_meta_key', 'val2' );
|
||||
add_metadata( 'post', $object_id, 'test_multi_meta_key', 'val3' );
|
||||
$object->read( $object_id ); // reload to make sure we get our meta...
|
||||
return $object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a test user we can add/test meta against.
|
||||
*/
|
||||
public function create_test_user() {
|
||||
$object = new \WC_Mock_WC_data();
|
||||
$object->set_meta_type( 'user' );
|
||||
$object->set_object_id_field( 'user_id' );
|
||||
$object->set_content( 'testing@woo.dev' );
|
||||
$object->save();
|
||||
return $object;
|
||||
}
|
||||
|
||||
|
@ -24,6 +34,12 @@ class Meta extends \WC_Unit_Test_Case {
|
|||
*/
|
||||
function test_get_meta_data() {
|
||||
$object = $this->create_test_post();
|
||||
$object_id = $object->get_id();
|
||||
add_metadata( 'post', $object_id, 'test_meta_key', 'val1', true );
|
||||
add_metadata( 'post', $object_id, 'test_multi_meta_key', 'val2' );
|
||||
add_metadata( 'post', $object_id, 'test_multi_meta_key', 'val3' );
|
||||
$object->read( $object_id );
|
||||
|
||||
$meta_data = $object->get_meta_data();
|
||||
$i = 1;
|
||||
|
||||
|
@ -39,6 +55,11 @@ class Meta extends \WC_Unit_Test_Case {
|
|||
*/
|
||||
function test_get_meta() {
|
||||
$object = $this->create_test_post();
|
||||
$object_id = $object->get_id();
|
||||
add_metadata( 'post', $object_id, 'test_meta_key', 'val1', true );
|
||||
add_metadata( 'post', $object_id, 'test_multi_meta_key', 'val2' );
|
||||
add_metadata( 'post', $object_id, 'test_multi_meta_key', 'val3' );
|
||||
$object->read( $object_id );
|
||||
|
||||
// test single meta key
|
||||
$single_meta = $object->get_meta( 'test_meta_key' );
|
||||
|
@ -58,49 +79,122 @@ class Meta extends \WC_Unit_Test_Case {
|
|||
* Test setting meta.
|
||||
*/
|
||||
function test_set_meta_data() {
|
||||
global $wpdb;
|
||||
$object = $this->create_test_post();
|
||||
$object_id = $object->get_id();
|
||||
add_metadata( 'post', $object_id, 'test_meta_key', 'val1', true );
|
||||
add_metadata( 'post', $object_id, 'test_meta_key_2', 'val2', true );
|
||||
$object->read( $object_id );
|
||||
|
||||
$metadata = array();
|
||||
$raw_metadata = $wpdb->get_results( $wpdb->prepare( "
|
||||
SELECT meta_id, meta_key, meta_value
|
||||
FROM {$wpdb->prefix}postmeta
|
||||
WHERE post_id = %d ORDER BY meta_id
|
||||
", $object_id ) );
|
||||
|
||||
foreach ( $raw_metadata as $meta ) {
|
||||
$metadata[ $meta->meta_id ] = (object) array( 'key' => $meta->meta_key, 'value' => $meta->meta_value );
|
||||
}
|
||||
|
||||
$object = new \WC_Mock_WC_data();
|
||||
$object->set_meta_data( $metadata );
|
||||
|
||||
$this->assertEquals( $metadata, $object->get_meta_data() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test adding meta data.
|
||||
*/
|
||||
function test_add_meta_data() {
|
||||
|
||||
$object = $this->create_test_post();
|
||||
$object_id = $object->get_id();
|
||||
$data = 'add_meta_data_' . time();
|
||||
$object->add_meta_data( 'test_new_field', $data );
|
||||
$meta = $object->get_meta( 'test_new_field' );
|
||||
$this->assertEquals( $data, $meta );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test updating meta data.
|
||||
*/
|
||||
function test_update_meta_data() {
|
||||
global $wpdb;
|
||||
$object = $this->create_test_post();
|
||||
$object_id = $object->get_id();
|
||||
add_metadata( 'post', $object_id, 'test_meta_key', 'val1', true );
|
||||
$object->read( $object_id );
|
||||
|
||||
$this->assertEquals( 'val1', $object->get_meta( 'test_meta_key' ) );
|
||||
|
||||
$metadata = array();
|
||||
$meta_id = $wpdb->get_var( $wpdb->prepare( "
|
||||
SELECT meta_id
|
||||
FROM {$wpdb->prefix}postmeta
|
||||
WHERE post_id = %d LIMIT 1
|
||||
", $object_id ) );
|
||||
|
||||
$object->update_meta_data( 'test_meta_key', 'updated_value', $meta_id );
|
||||
$this->assertEquals( 'updated_value', $object->get_meta( 'test_meta_key' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test getting user meta data.
|
||||
* Test deleting meta.
|
||||
*/
|
||||
function test_user_get_meta_data() {
|
||||
function test_delete_meta_data() {
|
||||
$object = $this->create_test_post();
|
||||
$object_id = $object->get_id();
|
||||
add_metadata( 'post', $object_id, 'test_meta_key', 'val1', true );
|
||||
$object->read( $object_id );
|
||||
|
||||
$this->assertEquals( 'val1', $object->get_meta( 'test_meta_key' ) );
|
||||
|
||||
$object->delete_meta_data( 'test_meta_key' );
|
||||
|
||||
$this->assertEmpty( $object->get_meta( 'test_meta_key' ) );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test saving metadata.. (Actually making sure changes are written to DB)
|
||||
*/
|
||||
function test_save_meta_data() {
|
||||
global $wpdb;
|
||||
$object = $this->create_test_post();
|
||||
$object_id = $object->get_id();
|
||||
add_metadata( 'post', $object_id, 'test_meta_key', 'val1', true );
|
||||
add_metadata( 'post', $object_id, 'test_meta_key_2', 'val2', true );
|
||||
$object->read( $object_id );
|
||||
|
||||
$raw_metadata = $wpdb->get_results( $wpdb->prepare( "
|
||||
SELECT meta_id, meta_key, meta_value
|
||||
FROM {$wpdb->prefix}postmeta
|
||||
WHERE post_id = %d ORDER BY meta_id
|
||||
", $object_id ) );
|
||||
|
||||
|
||||
$object->delete_meta_data( 'test_meta_key' );
|
||||
$object->update_meta_data( 'test_meta_key_2', 'updated_value', $raw_metadata[1]->meta_id );
|
||||
|
||||
$object->save();
|
||||
$object->read( $object_id ); // rereads from the DB
|
||||
|
||||
$this->assertEmpty( $object->get_meta( 'test_meta_key' ) );
|
||||
$this->assertEquals( 'updated_value', $object->get_meta( 'test_meta_key_2' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test setting user meta data.
|
||||
* Test reading/getting user meta data too.
|
||||
*/
|
||||
function test_user_set_meta_data() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test adding user meta data.
|
||||
*/
|
||||
function test_user_add_meta_data() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test updating user meta data.
|
||||
*/
|
||||
function test_user_update_meta_data() {
|
||||
function test_usermeta() {
|
||||
$object = $this->create_test_user();
|
||||
$object_id = $object->get_id();
|
||||
add_metadata( 'user', $object_id, 'test_meta_key', 'val1', true );
|
||||
add_metadata( 'user', $object_id, 'test_meta_key_2', 'val2', true );
|
||||
$object->read( $object_id );
|
||||
|
||||
$this->assertEquals( 'val1', $object->get_meta( 'test_meta_key' ) );
|
||||
$this->assertEquals( 'val2', $object->get_meta( 'test_meta_key_2' ) );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue