Test meta query and date query

This commit is contained in:
weryques 2018-02-21 12:06:11 -03:00
parent 9bba1b560d
commit c94faa619d
3 changed files with 112 additions and 53 deletions

View File

@ -88,9 +88,12 @@ class TAINACAN_REST_Controller extends WP_REST_Controller {
'order' => 'order', 'order' => 'order',
'orderby' => 'orderby', 'orderby' => 'orderby',
'metakey' => 'meta_key', 'metakey' => 'meta_key',
'metavalue' => 'meta_value',
'metavaluenum' => 'meta_value_num',
'metacompare' => 'meta_compare',
'hideempty' => 'hide_empty', 'hideempty' => 'hide_empty',
'perpage' => 'posts_per_page', 'perpage' => 'posts_per_page',
'paged' => 'paged' 'paged' => 'paged',
]; ];
$meta_query = [ $meta_query = [
@ -98,6 +101,7 @@ class TAINACAN_REST_Controller extends WP_REST_Controller {
'value' => 'value', 'value' => 'value',
'compare' => 'compare', 'compare' => 'compare',
'relation' => 'relation', 'relation' => 'relation',
'type' => 'type',
]; ];
$date_query = [ $date_query = [
@ -107,7 +111,12 @@ class TAINACAN_REST_Controller extends WP_REST_Controller {
'week' => 'week', 'week' => 'week',
'hour' => 'hour', 'hour' => 'hour',
'minute' => 'minute', 'minute' => 'minute',
'second' => 'second' 'second' => 'second',
'compare' => 'compare',
'dayofweek' => 'dayofweek',
'inclusive' => 'inclusive',
'before' => 'before',
'after' => 'after',
]; ];
$args = []; $args = [];
@ -115,31 +124,11 @@ class TAINACAN_REST_Controller extends WP_REST_Controller {
foreach ($map as $mapped => $mapped_v){ foreach ($map as $mapped => $mapped_v){
if(isset($request[$mapped])){ if(isset($request[$mapped])){
if($mapped === 'metaquery'){ if($mapped === 'metaquery'){
$request_meta_query = $request[$mapped]; $args = $this->prepare_meta($mapped, $request, $meta_query, $mapped_v, $args);
// If is a multidimensional array (array of array)
if($this->contains_array($request_meta_query)) {
foreach ( $request_meta_query as $index1 => $a ) {
foreach ( $meta_query as $mapped_meta => $meta_v ) {
if ( isset( $a[ $meta_v ] ) ) {
$args[ $mapped_v ][ $index1 ][ $meta_v ] = $request[ $mapped ][ $index1 ][ $meta_v ];
}
}
}
} else {
foreach ( $meta_query as $mapped_meta => $meta_v ) {
if(isset($request[$mapped][$meta_v])) {
$args[ $mapped_v ][ $meta_v ] = $request[ $mapped ][ $meta_v ];
}
}
}
} elseif($mapped === 'datequery'){ } elseif($mapped === 'datequery'){
foreach ($date_query as $date_meta => $date_v){ $args = $this->prepare_meta($mapped, $request, $date_query, $mapped_v, $args);
$args[$mapped_v][$date_v] = $request[$mapped][$date_meta];
} }
} else { else {
$args[ $mapped_v ] = $request[ $mapped ]; $args[ $mapped_v ] = $request[ $mapped ];
} }
} }
@ -150,6 +139,29 @@ class TAINACAN_REST_Controller extends WP_REST_Controller {
return $args; return $args;
} }
private function prepare_meta($mapped, $request, $query, $mapped_v, $args){
$request_meta_query = $request[$mapped];
// If is a multidimensional array (array of array)
if($this->contains_array($request_meta_query)) {
foreach ( $request_meta_query as $index1 => $a ) {
foreach ( $query as $mapped_meta => $meta_v ) {
if ( isset( $a[ $meta_v ] ) ) {
$args[ $mapped_v ][ $index1 ][ $meta_v ] = $request[ $mapped ][ $index1 ][ $meta_v ];
}
}
}
} else {
foreach ( $query as $mapped_meta => $meta_v ) {
if(isset($request[$mapped][$meta_v])) {
$args[ $mapped_v ][ $meta_v ] = $request[ $mapped ][ $meta_v ];
}
}
}
return $args;
}
protected function contains_array($array){ protected function contains_array($array){
foreach ($array as $value){ foreach ($array as $value){
if(is_array($value)){ if(is_array($value)){

View File

@ -90,8 +90,8 @@ class TAINACAN_REST_Collections_Controller extends TAINACAN_UnitApiTestCase {
$other_collection = $data[0]; $other_collection = $data[0];
$one_collection = $data[1]; $one_collection = $data[1];
$this->assertEquals('testeApi', $one_collection['name']); $this->assertEquals('Other', $one_collection['name']);
$this->assertEquals('Other', $other_collection['name']); $this->assertEquals('testeApi', $other_collection['name']);
} }
public function test_delete_or_trash_a_collection(){ public function test_delete_or_trash_a_collection(){

View File

@ -164,8 +164,10 @@ class TAINACAN_REST_Queries extends TAINACAN_UnitApiTestCase {
/* Meta Query: /* Meta Query:
Fetch items from a collection desc ordered by fieldA1 and its only in range A to Y. *
*/ * Fetch items from a collection desc ordered by fieldA1 and its only in range A to F.
*
* */
$meta_query = [ $meta_query = [
'metakey' => $fieldA1->get_id(), 'metakey' => $fieldA1->get_id(),
@ -188,6 +190,51 @@ class TAINACAN_REST_Queries extends TAINACAN_UnitApiTestCase {
$data3 = $meta_query_response->get_data(); $data3 = $meta_query_response->get_data();
$this->assertCount(2, $data3); $this->assertCount(2, $data3);
$values = [$data3[0]['metadata']['Field A-1']['value'], $data3[1]['metadata']['Field A-1']['value']];
$this->assertNotContains('G', $values);
// E have to come first, because DESC
$this->assertEquals('E', $data3[0]['metadata']['Field A-1']['value']);
$this->assertEquals('D', $data3[1]['metadata']['Field A-1']['value']);
/* Date Query:
*
* Fetch posts for today
*
* */
$today = getdate();
$date_query = [
'datequery' => [
[
'year' => $today['year'],
'month' => $today['mon'],
'day' => $today['mday']
]
]
];
$date_query_request_collections = new \WP_REST_Request('GET', $this->namespace . '/collections');
$date_query_request_collections->set_query_params($date_query);
$date_query_response_collections = $this->server->dispatch($date_query_request_collections);
$data4 = $date_query_response_collections->get_data();
$this->assertCount(3, $data4);
// If we change the date query for a date different of today, it should return nothing
$date_query['datequery'][0]['year'] = 1995;
$date_query_request_collections->set_query_params($date_query);
$date_query_response_collections = $this->server->dispatch($date_query_request_collections);
$data5 = $date_query_response_collections->get_data();
$this->assertCount(0, $data5);
} }
} }