WordPress.org

Make WordPress Core

Ticket #19729: query.diff

File query.diff, 2.4 KB (added by joehoyle, 16 months 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}