Test meta query and date query
This commit is contained in:
parent
9bba1b560d
commit
c94faa619d
|
@ -74,23 +74,26 @@ class TAINACAN_REST_Controller extends WP_REST_Controller {
|
|||
*/
|
||||
protected function prepare_filters($request){
|
||||
$map = [
|
||||
'name' => 'title',
|
||||
'title' => 'title',
|
||||
'id' => 'p',
|
||||
'pageid' => 'page_id',
|
||||
'authorid' => 'author_id',
|
||||
'authorname' => 'author_name',
|
||||
'search' => 's',
|
||||
'status' => 'post_status',
|
||||
'offset' => 'offset',
|
||||
'metaquery' => 'meta_query',
|
||||
'datequery' => 'date_query',
|
||||
'order' => 'order',
|
||||
'orderby' => 'orderby',
|
||||
'metakey' => 'meta_key',
|
||||
'hideempty' => 'hide_empty',
|
||||
'perpage' => 'posts_per_page',
|
||||
'paged' => 'paged'
|
||||
'name' => 'title',
|
||||
'title' => 'title',
|
||||
'id' => 'p',
|
||||
'pageid' => 'page_id',
|
||||
'authorid' => 'author_id',
|
||||
'authorname' => 'author_name',
|
||||
'search' => 's',
|
||||
'status' => 'post_status',
|
||||
'offset' => 'offset',
|
||||
'metaquery' => 'meta_query',
|
||||
'datequery' => 'date_query',
|
||||
'order' => 'order',
|
||||
'orderby' => 'orderby',
|
||||
'metakey' => 'meta_key',
|
||||
'metavalue' => 'meta_value',
|
||||
'metavaluenum' => 'meta_value_num',
|
||||
'metacompare' => 'meta_compare',
|
||||
'hideempty' => 'hide_empty',
|
||||
'perpage' => 'posts_per_page',
|
||||
'paged' => 'paged',
|
||||
];
|
||||
|
||||
$meta_query = [
|
||||
|
@ -98,16 +101,22 @@ class TAINACAN_REST_Controller extends WP_REST_Controller {
|
|||
'value' => 'value',
|
||||
'compare' => 'compare',
|
||||
'relation' => 'relation',
|
||||
'type' => 'type',
|
||||
];
|
||||
|
||||
$date_query = [
|
||||
'year' => 'year',
|
||||
'month' => 'month',
|
||||
'day' => 'day',
|
||||
'week' => 'week',
|
||||
'hour' => 'hour',
|
||||
'minute' => 'minute',
|
||||
'second' => 'second'
|
||||
'year' => 'year',
|
||||
'month' => 'month',
|
||||
'day' => 'day',
|
||||
'week' => 'week',
|
||||
'hour' => 'hour',
|
||||
'minute' => 'minute',
|
||||
'second' => 'second',
|
||||
'compare' => 'compare',
|
||||
'dayofweek' => 'dayofweek',
|
||||
'inclusive' => 'inclusive',
|
||||
'before' => 'before',
|
||||
'after' => 'after',
|
||||
];
|
||||
|
||||
$args = [];
|
||||
|
@ -115,31 +124,11 @@ class TAINACAN_REST_Controller extends WP_REST_Controller {
|
|||
foreach ($map as $mapped => $mapped_v){
|
||||
if(isset($request[$mapped])){
|
||||
if($mapped === 'metaquery'){
|
||||
$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 ( $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') {
|
||||
foreach ($date_query as $date_meta => $date_v){
|
||||
$args[$mapped_v][$date_v] = $request[$mapped][$date_meta];
|
||||
}
|
||||
} else {
|
||||
$args = $this->prepare_meta($mapped, $request, $meta_query, $mapped_v, $args);
|
||||
} elseif($mapped === 'datequery'){
|
||||
$args = $this->prepare_meta($mapped, $request, $date_query, $mapped_v, $args);
|
||||
}
|
||||
else {
|
||||
$args[ $mapped_v ] = $request[ $mapped ];
|
||||
}
|
||||
}
|
||||
|
@ -150,6 +139,29 @@ class TAINACAN_REST_Controller extends WP_REST_Controller {
|
|||
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){
|
||||
foreach ($array as $value){
|
||||
if(is_array($value)){
|
||||
|
|
|
@ -90,8 +90,8 @@ class TAINACAN_REST_Collections_Controller extends TAINACAN_UnitApiTestCase {
|
|||
$other_collection = $data[0];
|
||||
$one_collection = $data[1];
|
||||
|
||||
$this->assertEquals('testeApi', $one_collection['name']);
|
||||
$this->assertEquals('Other', $other_collection['name']);
|
||||
$this->assertEquals('Other', $one_collection['name']);
|
||||
$this->assertEquals('testeApi', $other_collection['name']);
|
||||
}
|
||||
|
||||
public function test_delete_or_trash_a_collection(){
|
||||
|
|
|
@ -164,8 +164,10 @@ class TAINACAN_REST_Queries extends TAINACAN_UnitApiTestCase {
|
|||
|
||||
|
||||
/* 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 = [
|
||||
'metakey' => $fieldA1->get_id(),
|
||||
|
@ -188,6 +190,51 @@ class TAINACAN_REST_Queries extends TAINACAN_UnitApiTestCase {
|
|||
$data3 = $meta_query_response->get_data();
|
||||
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue