WordPress.org

Make WordPress Core

Ticket #19729: query.diff

File query.diff, 2.4 KB (added by joehoyle, 5 years ago)

Unit Test for WP_Meta_query

  • tests/meta/query.php

     
     1<?php
     2/**
     3 * Test WP_Meta_Query, in wp-includes/meta.php
     4 *
     5 * @group meta
     6 */
     7class Tests_Meta_Query extends WP_UnitTestCase {
     8
     9        function test_default_relation() {
     10                $query = new WP_Meta_Query( array( array( 'key' => 'abc' ) ) );
     11
     12                $this->assertEquals( 'AND', $query->relation );
     13        }
     14
     15        function test_set_relation() {
     16
     17                $query = new WP_Meta_Query( array( array( 'key' => 'abc' ), 'relation' => 'AND' ) );
     18
     19                $this->assertEquals( 'AND', $query->relation );
     20
     21                $query = new WP_Meta_Query( array( array( 'key' => 'abc' ), 'relation' => 'OR' ) );
     22
     23                $this->assertEquals( 'OR', $query->relation );
     24        }
     25
     26        /**
     27         * Test all key only meta queries use the same INNER JOIN when using relation=OR
     28         *
     29         * @ticket http://core.trac.wordpress.org/ticket/19729
     30         */
     31        function test_single_inner_join_for_keys_only() {
     32
     33                global $wpdb;
     34
     35                $query = new WP_Meta_Query( array(
     36                        array( 'key' => 'abc' ),
     37                        array( 'key' => 'def' ),
     38                        'relation' => 'OR'
     39                ) );
     40
     41                $sql = $query->get_sql( 'post', $wpdb->posts, 'ID' );
     42
     43                $this->assertEquals( 1, substr_count( $sql['join'], 'INNER JOIN' ) );
     44
     45                // also check mixing key and key => value
     46               
     47                $query = new WP_Meta_Query( array(
     48                        array( 'key' => 'abc' ),
     49                        array( 'key' => 'def' ),
     50                        array( 'key' => 'ghi', 'value' => 'abc' ),
     51                        'relation' => 'OR'
     52                ) );
     53
     54                $sql = $query->get_sql( 'post', $wpdb->posts, 'ID' );
     55
     56                $this->assertEquals( 2, substr_count( $sql['join'], 'INNER JOIN' ) );
     57        }
     58
     59        /**
     60         * Test the conversion between "WP_Query" style meta args (meta_value=x&meta_key=y)
     61         * to a meta query array
     62         */
     63        function test_parse_query_vars() {
     64
     65                $query = new WP_Meta_Query();
     66
     67                // just meta_value
     68                $query->parse_query_vars( array( 'meta_key' => 'abc' ) );
     69
     70                $this->assertEquals( array( array( 'key' => 'abc' ) ), $query->queries );
     71
     72                // meta_key & meta_value
     73                $query->parse_query_vars( array( 'meta_key' => 'abc', 'meta_value' => 'def' ) );
     74
     75                $this->assertEquals( array( array( 'key' => 'abc', 'value' => 'def' ) ), $query->queries );
     76
     77                // meta_compare
     78                $query->parse_query_vars( array( 'meta_key' => 'abc', 'meta_compare' => '=>' ) );
     79               
     80                $this->assertEquals( array( array( 'key' => 'abc', 'compare' => '=>' ) ), $query->queries );
     81        }
     82}