Changeset 29805
- Timestamp:
- 10/02/2014 01:07:20 AM (10 years ago)
- Location:
- trunk/tests/phpunit/tests
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/phpunit/tests/post/query.php
r29799 r29805 773 773 } 774 774 775 /**776 * @ticket 20604777 */778 function test_taxonomy_empty_or() {779 // An empty tax query should return an empty array, not all posts.780 781 $this->factory->post->create_many( 10 );782 783 $query = new WP_Query( array(784 'fields' => 'ids',785 'tax_query' => array(786 'relation' => 'OR',787 array(788 'taxonomy' => 'post_tag',789 'field' => 'id',790 'terms' => false,791 'operator' => 'IN'792 ),793 array(794 'taxonomy' => 'category',795 'field' => 'id',796 'terms' => false,797 'operator' => 'IN'798 )799 )800 ) );801 802 $posts = $query->get_posts();803 $this->assertEquals( 0 , count( $posts ) );804 }805 806 775 function test_meta_between_not_between() { 807 776 $post_id = $this->factory->post->create(); … … 984 953 } 985 954 986 function test_taxonomy_include_children() { 955 /** 956 * @group taxonomy 957 */ 958 public function test_tax_query_single_query_single_term_field_slug() { 959 $t = $this->factory->term->create( array( 960 'taxonomy' => 'category', 961 'slug' => 'foo', 962 'name' => 'Foo', 963 ) ); 964 $p1 = $this->factory->post->create(); 965 $p2 = $this->factory->post->create(); 966 967 wp_set_post_terms( $p1, $t, 'category' ); 968 969 $q = new WP_Query( array( 970 'fields' => 'ids', 971 'update_post_meta_cache' => false, 972 'update_post_term_cache' => false, 973 'tax_query' => array( 974 array( 975 'taxonomy' => 'category', 976 'terms' => array( 'foo' ), 977 'field' => 'slug', 978 ), 979 ), 980 ) ); 981 982 $this->assertEquals( array( $p1 ), $q->posts ); 983 } 984 985 /** 986 * @group taxonomy 987 */ 988 public function test_tax_query_single_query_single_term_field_name() { 989 $t = $this->factory->term->create( array( 990 'taxonomy' => 'category', 991 'slug' => 'foo', 992 'name' => 'Foo', 993 ) ); 994 $p1 = $this->factory->post->create(); 995 $p2 = $this->factory->post->create(); 996 997 wp_set_post_terms( $p1, $t, 'category' ); 998 999 $q = new WP_Query( array( 1000 'fields' => 'ids', 1001 'update_post_meta_cache' => false, 1002 'update_post_term_cache' => false, 1003 'tax_query' => array( 1004 array( 1005 'taxonomy' => 'category', 1006 'terms' => array( 'Foo' ), 1007 'field' => 'name', 1008 ), 1009 ), 1010 ) ); 1011 1012 $this->assertEquals( array( $p1 ), $q->posts ); 1013 } 1014 1015 /** 1016 * @group taxonomy 1017 */ 1018 public function test_tax_query_single_query_single_term_field_term_taxonomy_id() { 1019 $t = $this->factory->term->create( array( 1020 'taxonomy' => 'category', 1021 'slug' => 'foo', 1022 'name' => 'Foo', 1023 ) ); 1024 $p1 = $this->factory->post->create(); 1025 $p2 = $this->factory->post->create(); 1026 1027 $tt_ids = wp_set_post_terms( $p1, $t, 'category' ); 1028 1029 $q = new WP_Query( array( 1030 'fields' => 'ids', 1031 'update_post_meta_cache' => false, 1032 'update_post_term_cache' => false, 1033 'tax_query' => array( 1034 array( 1035 'taxonomy' => 'category', 1036 'terms' => $tt_ids, 1037 'field' => 'term_taxonomy_id', 1038 ), 1039 ), 1040 ) ); 1041 1042 $this->assertEquals( array( $p1 ), $q->posts ); 1043 } 1044 1045 /** 1046 * @group taxonomy 1047 */ 1048 public function test_tax_query_single_query_single_term_field_term_id() { 1049 $t = $this->factory->term->create( array( 1050 'taxonomy' => 'category', 1051 'slug' => 'foo', 1052 'name' => 'Foo', 1053 ) ); 1054 $p1 = $this->factory->post->create(); 1055 $p2 = $this->factory->post->create(); 1056 1057 wp_set_post_terms( $p1, $t, 'category' ); 1058 1059 $q = new WP_Query( array( 1060 'fields' => 'ids', 1061 'update_post_meta_cache' => false, 1062 'update_post_term_cache' => false, 1063 'tax_query' => array( 1064 array( 1065 'taxonomy' => 'category', 1066 'terms' => array( $t ), 1067 'field' => 'term_id', 1068 ), 1069 ), 1070 ) ); 1071 1072 $this->assertEquals( array( $p1 ), $q->posts ); 1073 } 1074 1075 /** 1076 * @group taxonomy 1077 */ 1078 public function test_tax_query_single_query_single_term_operator_in() { 1079 $t = $this->factory->term->create( array( 1080 'taxonomy' => 'category', 1081 'slug' => 'foo', 1082 'name' => 'Foo', 1083 ) ); 1084 $p1 = $this->factory->post->create(); 1085 $p2 = $this->factory->post->create(); 1086 1087 wp_set_post_terms( $p1, $t, 'category' ); 1088 1089 $q = new WP_Query( array( 1090 'fields' => 'ids', 1091 'update_post_meta_cache' => false, 1092 'update_post_term_cache' => false, 1093 'tax_query' => array( 1094 array( 1095 'taxonomy' => 'category', 1096 'terms' => array( 'foo' ), 1097 'field' => 'slug', 1098 'operator' => 'IN', 1099 ), 1100 ), 1101 ) ); 1102 1103 $this->assertEquals( array( $p1 ), $q->posts ); 1104 } 1105 1106 /** 1107 * @group taxonomy 1108 */ 1109 public function test_tax_query_single_query_single_term_operator_not_in() { 1110 $t = $this->factory->term->create( array( 1111 'taxonomy' => 'category', 1112 'slug' => 'foo', 1113 'name' => 'Foo', 1114 ) ); 1115 $p1 = $this->factory->post->create(); 1116 $p2 = $this->factory->post->create(); 1117 1118 wp_set_post_terms( $p1, $t, 'category' ); 1119 1120 $q = new WP_Query( array( 1121 'fields' => 'ids', 1122 'update_post_meta_cache' => false, 1123 'update_post_term_cache' => false, 1124 'tax_query' => array( 1125 array( 1126 'taxonomy' => 'category', 1127 'terms' => array( 'foo' ), 1128 'field' => 'slug', 1129 'operator' => 'NOT IN', 1130 ), 1131 ), 1132 ) ); 1133 1134 $this->assertEquals( array( $p2 ), $q->posts ); 1135 } 1136 1137 /** 1138 * @group taxonomy 1139 */ 1140 public function test_tax_query_single_query_single_term_operator_and() { 1141 $t = $this->factory->term->create( array( 1142 'taxonomy' => 'category', 1143 'slug' => 'foo', 1144 'name' => 'Foo', 1145 ) ); 1146 $p1 = $this->factory->post->create(); 1147 $p2 = $this->factory->post->create(); 1148 1149 wp_set_post_terms( $p1, $t, 'category' ); 1150 1151 $q = new WP_Query( array( 1152 'fields' => 'ids', 1153 'update_post_meta_cache' => false, 1154 'update_post_term_cache' => false, 1155 'tax_query' => array( 1156 array( 1157 'taxonomy' => 'category', 1158 'terms' => array( 'foo' ), 1159 'field' => 'slug', 1160 'operator' => 'AND', 1161 ), 1162 ), 1163 ) ); 1164 1165 $this->assertEquals( array( $p1 ), $q->posts ); 1166 } 1167 1168 /** 1169 * @group taxonomy 1170 */ 1171 public function test_tax_query_single_query_multiple_terms_operator_in() { 1172 $t1 = $this->factory->term->create( array( 1173 'taxonomy' => 'category', 1174 'slug' => 'foo', 1175 'name' => 'Foo', 1176 ) ); 1177 $t2 = $this->factory->term->create( array( 1178 'taxonomy' => 'category', 1179 'slug' => 'bar', 1180 'name' => 'Bar', 1181 ) ); 1182 $p1 = $this->factory->post->create(); 1183 $p2 = $this->factory->post->create(); 1184 $p3 = $this->factory->post->create(); 1185 1186 wp_set_post_terms( $p1, $t1, 'category' ); 1187 wp_set_post_terms( $p2, $t2, 'category' ); 1188 1189 $q = new WP_Query( array( 1190 'fields' => 'ids', 1191 'update_post_meta_cache' => false, 1192 'update_post_term_cache' => false, 1193 'tax_query' => array( 1194 array( 1195 'taxonomy' => 'category', 1196 'terms' => array( 'foo', 'bar' ), 1197 'field' => 'slug', 1198 'operator' => 'IN', 1199 ), 1200 ), 1201 ) ); 1202 1203 $this->assertEquals( array( $p1, $p2 ), $q->posts ); 1204 } 1205 1206 /** 1207 * @group taxonomy 1208 */ 1209 public function test_tax_query_single_query_multiple_terms_operator_not_in() { 1210 $t1 = $this->factory->term->create( array( 1211 'taxonomy' => 'category', 1212 'slug' => 'foo', 1213 'name' => 'Foo', 1214 ) ); 1215 $t2 = $this->factory->term->create( array( 1216 'taxonomy' => 'category', 1217 'slug' => 'bar', 1218 'name' => 'Bar', 1219 ) ); 1220 $p1 = $this->factory->post->create(); 1221 $p2 = $this->factory->post->create(); 1222 $p3 = $this->factory->post->create(); 1223 1224 wp_set_post_terms( $p1, $t1, 'category' ); 1225 wp_set_post_terms( $p2, $t2, 'category' ); 1226 1227 $q = new WP_Query( array( 1228 'fields' => 'ids', 1229 'update_post_meta_cache' => false, 1230 'update_post_term_cache' => false, 1231 'tax_query' => array( 1232 array( 1233 'taxonomy' => 'category', 1234 'terms' => array( 'foo', 'bar' ), 1235 'field' => 'slug', 1236 'operator' => 'NOT IN', 1237 ), 1238 ), 1239 ) ); 1240 1241 $this->assertEquals( array( $p3 ), $q->posts ); 1242 } 1243 1244 /** 1245 * @group taxonomy 1246 */ 1247 public function test_tax_query_single_query_multiple_terms_operator_and() { 1248 $t1 = $this->factory->term->create( array( 1249 'taxonomy' => 'category', 1250 'slug' => 'foo', 1251 'name' => 'Foo', 1252 ) ); 1253 $t2 = $this->factory->term->create( array( 1254 'taxonomy' => 'category', 1255 'slug' => 'bar', 1256 'name' => 'Bar', 1257 ) ); 1258 $p1 = $this->factory->post->create(); 1259 $p2 = $this->factory->post->create(); 1260 $p3 = $this->factory->post->create(); 1261 1262 wp_set_object_terms( $p1, $t1, 'category' ); 1263 wp_set_object_terms( $p2, array( $t1, $t2 ), 'category' ); 1264 1265 $q = new WP_Query( array( 1266 'fields' => 'ids', 1267 'update_post_meta_cache' => false, 1268 'update_post_term_cache' => false, 1269 'tax_query' => array( 1270 array( 1271 'taxonomy' => 'category', 1272 'terms' => array( 'foo', 'bar' ), 1273 'field' => 'slug', 1274 'operator' => 'AND', 1275 ), 1276 ), 1277 ) ); 1278 1279 $this->assertEquals( array( $p2 ), $q->posts ); 1280 } 1281 1282 /** 1283 * @group taxonomy 1284 */ 1285 public function test_tax_query_multiple_queries_relation_and() { 1286 $t1 = $this->factory->term->create( array( 1287 'taxonomy' => 'category', 1288 'slug' => 'foo', 1289 'name' => 'Foo', 1290 ) ); 1291 $t2 = $this->factory->term->create( array( 1292 'taxonomy' => 'category', 1293 'slug' => 'bar', 1294 'name' => 'Bar', 1295 ) ); 1296 $p1 = $this->factory->post->create(); 1297 $p2 = $this->factory->post->create(); 1298 $p3 = $this->factory->post->create(); 1299 1300 wp_set_object_terms( $p1, $t1, 'category' ); 1301 wp_set_object_terms( $p2, array( $t1, $t2 ), 'category' ); 1302 1303 $q = new WP_Query( array( 1304 'fields' => 'ids', 1305 'update_post_meta_cache' => false, 1306 'update_post_term_cache' => false, 1307 'tax_query' => array( 1308 'relation' => 'AND', 1309 array( 1310 'taxonomy' => 'category', 1311 'terms' => array( 'foo' ), 1312 'field' => 'slug', 1313 ), 1314 array( 1315 'taxonomy' => 'category', 1316 'terms' => array( 'bar' ), 1317 'field' => 'slug', 1318 ), 1319 ), 1320 ) ); 1321 1322 $this->assertEquals( array( $p2 ), $q->posts ); 1323 } 1324 1325 /** 1326 * @group taxonomy 1327 */ 1328 public function test_tax_query_multiple_queries_relation_or() { 1329 $t1 = $this->factory->term->create( array( 1330 'taxonomy' => 'category', 1331 'slug' => 'foo', 1332 'name' => 'Foo', 1333 ) ); 1334 $t2 = $this->factory->term->create( array( 1335 'taxonomy' => 'category', 1336 'slug' => 'bar', 1337 'name' => 'Bar', 1338 ) ); 1339 $p1 = $this->factory->post->create(); 1340 $p2 = $this->factory->post->create(); 1341 $p3 = $this->factory->post->create(); 1342 1343 wp_set_object_terms( $p1, $t1, 'category' ); 1344 wp_set_object_terms( $p2, array( $t1, $t2 ), 'category' ); 1345 1346 $q = new WP_Query( array( 1347 'fields' => 'ids', 1348 'update_post_meta_cache' => false, 1349 'update_post_term_cache' => false, 1350 'tax_query' => array( 1351 'relation' => 'OR', 1352 array( 1353 'taxonomy' => 'category', 1354 'terms' => array( 'foo' ), 1355 'field' => 'slug', 1356 ), 1357 array( 1358 'taxonomy' => 'category', 1359 'terms' => array( 'bar' ), 1360 'field' => 'slug', 1361 ), 1362 ), 1363 ) ); 1364 1365 $this->assertEquals( array( $p1, $p2 ), $q->posts ); 1366 } 1367 1368 /** 1369 * @group taxonomy 1370 */ 1371 public function test_tax_query_multiple_queries_different_taxonomies() { 1372 $t1 = $this->factory->term->create( array( 1373 'taxonomy' => 'post_tag', 1374 'slug' => 'foo', 1375 'name' => 'Foo', 1376 ) ); 1377 $t2 = $this->factory->term->create( array( 1378 'taxonomy' => 'category', 1379 'slug' => 'bar', 1380 'name' => 'Bar', 1381 ) ); 1382 $p1 = $this->factory->post->create(); 1383 $p2 = $this->factory->post->create(); 1384 $p3 = $this->factory->post->create(); 1385 1386 wp_set_object_terms( $p1, $t1, 'post_tag' ); 1387 wp_set_object_terms( $p2, $t2, 'category' ); 1388 1389 $q = new WP_Query( array( 1390 'fields' => 'ids', 1391 'update_post_meta_cache' => false, 1392 'update_post_term_cache' => false, 1393 'tax_query' => array( 1394 'relation' => 'OR', 1395 array( 1396 'taxonomy' => 'post_tag', 1397 'terms' => array( 'foo' ), 1398 'field' => 'slug', 1399 ), 1400 array( 1401 'taxonomy' => 'category', 1402 'terms' => array( 'bar' ), 1403 'field' => 'slug', 1404 ), 1405 ), 1406 ) ); 1407 1408 $this->assertEquals( array( $p1, $p2 ), $q->posts ); 1409 } 1410 1411 /** 1412 * @ticket 20604 1413 * @group taxonomy 1414 */ 1415 public function test_tax_query_relation_or_both_clauses_empty_terms() { 1416 // An empty tax query should return an empty array, not all posts. 1417 1418 $this->factory->post->create_many( 10 ); 1419 1420 $query = new WP_Query( array( 1421 'fields' => 'ids', 1422 'update_post_term_cache' => false, 1423 'update_post_meta_cache' => false, 1424 'tax_query' => array( 1425 'relation' => 'OR', 1426 array( 1427 'taxonomy' => 'post_tag', 1428 'field' => 'id', 1429 'terms' => false, 1430 'operator' => 'IN' 1431 ), 1432 array( 1433 'taxonomy' => 'category', 1434 'field' => 'id', 1435 'terms' => false, 1436 'operator' => 'IN' 1437 ), 1438 ) 1439 ) ); 1440 1441 $posts = $query->get_posts(); 1442 $this->assertEquals( 0 , count( $posts ) ); 1443 } 1444 1445 /** 1446 * @ticket 20604 1447 * @group taxonomy 1448 */ 1449 public function test_tax_query_relation_or_one_clause_empty_terms() { 1450 // An empty tax query should return an empty array, not all posts. 1451 1452 $this->factory->post->create_many( 10 ); 1453 1454 $query = new WP_Query( array( 1455 'fields' => 'ids', 1456 'update_post_term_cache' => false, 1457 'update_post_meta_cache' => false, 1458 'tax_query' => array( 1459 'relation' => 'OR', 1460 array( 1461 'taxonomy' => 'post_tag', 1462 'field' => 'id', 1463 'terms' => array( 'foo' ), 1464 'operator' => 'IN' 1465 ), 1466 array( 1467 'taxonomy' => 'category', 1468 'field' => 'id', 1469 'terms' => false, 1470 'operator' => 'IN' 1471 ), 1472 ) 1473 ) ); 1474 1475 $posts = $query->get_posts(); 1476 $this->assertEquals( 0 , count( $posts ) ); 1477 } 1478 1479 /** 1480 * @group taxonomy 1481 */ 1482 public function test_tax_query_include_children() { 987 1483 $cat_a = $this->factory->term->create( array( 'taxonomy' => 'category', 'name' => 'Australia' ) ); 988 1484 $cat_b = $this->factory->term->create( array( 'taxonomy' => 'category', 'name' => 'Sydney', 'parent' => $cat_a ) ); … … 996 1492 997 1493 $posts = get_posts( array( 1494 'fields' => 'ids', 1495 'update_post_meta_cache' => false, 1496 'update_post_term_cache' => false, 998 1497 'tax_query' => array( 999 1498 array( … … 1008 1507 1009 1508 $posts = get_posts( array( 1509 'fields' => 'ids', 1510 'update_post_meta_cache' => false, 1511 'update_post_term_cache' => false, 1010 1512 'tax_query' => array( 1011 1513 array( … … 1021 1523 1022 1524 $posts = get_posts( array( 1525 'fields' => 'ids', 1526 'update_post_meta_cache' => false, 1527 'update_post_term_cache' => false, 1023 1528 'tax_query' => array( 1024 1529 array( … … 1033 1538 1034 1539 $posts = get_posts( array( 1540 'fields' => 'ids', 1541 'update_post_meta_cache' => false, 1542 'update_post_term_cache' => false, 1035 1543 'tax_query' => array( 1036 1544 array( … … 1046 1554 1047 1555 $posts = get_posts( array( 1556 'fields' => 'ids', 1557 'update_post_meta_cache' => false, 1558 'update_post_term_cache' => false, 1048 1559 'tax_query' => array( 1049 1560 array( … … 1058 1569 1059 1570 $posts = get_posts( array( 1571 'fields' => 'ids', 1572 'update_post_meta_cache' => false, 1573 'update_post_term_cache' => false, 1060 1574 'tax_query' => array( 1061 1575 array( … … 1069 1583 1070 1584 $this->assertEquals( 1 , count( $posts ) ); 1585 } 1586 1587 /** 1588 * @group taxonomy 1589 */ 1590 function test_category__and_var() { 1591 $q = new WP_Query(); 1592 1593 $term_id = $this->factory->category->create( array( 'slug' => 'woo', 'name' => 'WOO!' ) ); 1594 $term_id2 = $this->factory->category->create( array( 'slug' => 'hoo', 'name' => 'HOO!' ) ); 1595 $post_id = $this->factory->post->create(); 1596 1597 wp_set_post_categories( $post_id, $term_id ); 1598 1599 $posts = $q->query( array( 'category__and' => array( $term_id ) ) ); 1600 1601 $this->assertEmpty( $q->get( 'category__and' ) ); 1602 $this->assertCount( 0, $q->get( 'category__and' ) ); 1603 $this->assertNotEmpty( $q->get( 'category__in' ) ); 1604 $this->assertCount( 1, $q->get( 'category__in' ) ); 1605 1606 $this->assertNotEmpty( $posts ); 1607 $this->assertEquals( array( $post_id ), wp_list_pluck( $posts, 'ID' ) ); 1608 1609 $posts2 = $q->query( array( 'category__and' => array( $term_id, $term_id2 ) ) ); 1610 $this->assertNotEmpty( $q->get( 'category__and' ) ); 1611 $this->assertCount( 2, $q->get( 'category__and' ) ); 1612 $this->assertEmpty( $q->get( 'category__in' ) ); 1613 $this->assertCount( 0, $q->get( 'category__in' ) ); 1614 1615 $this->assertEmpty( $posts2 ); 1616 } 1617 1618 /** 1619 * @group taxonomy 1620 */ 1621 public function test_tax_query_taxonomy_with_attachments() { 1622 $q = new WP_Query(); 1623 1624 register_taxonomy_for_object_type( 'post_tag', 'attachment:image' ); 1625 $tag_id = $this->factory->term->create( array( 'slug' => rand_str(), 'name' => rand_str() ) ); 1626 $image_id = $this->factory->attachment->create_object( 'image.jpg', 0, array( 1627 'post_mime_type' => 'image/jpeg', 1628 'post_type' => 'attachment' 1629 ) ); 1630 wp_set_object_terms( $image_id, $tag_id, 'post_tag' ); 1631 1632 $posts = $q->query( array( 1633 'fields' => 'ids', 1634 'update_post_meta_cache' => false, 1635 'update_post_term_cache' => false, 1636 'post_type' => 'attachment', 1637 'post_status' => 'inherit', 1638 'tax_query' => array( 1639 array( 1640 'taxonomy' => 'post_tag', 1641 'field' => 'term_id', 1642 'terms' => array( $tag_id ) 1643 ) 1644 ) 1645 ) ); 1646 1647 $this->assertEquals( array( $image_id ), $posts ); 1648 } 1649 1650 /** 1651 * @ticket 27193 1652 * @group taxonomy 1653 */ 1654 function test_cat_or_tag() { 1655 $category1 = $this->factory->term->create( array( 'taxonomy' => 'category', 'name' => 'alpha' ) ); 1656 $category2 = $this->factory->term->create( array( 'taxonomy' => 'category', 'name' => 'beta' ) ); 1657 1658 $tag1 = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'gamma' ) ); 1659 $tag2 = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'delta' ) ); 1660 1661 $post_id1 = $this->factory->post->create( array( 'post_title' => 'alpha', 'post_category' => array( $category1 ) ) ); 1662 $terms1 = get_the_category( $post_id1 ); 1663 $this->assertEquals( array( get_category( $category1 ) ), $terms1 ); 1664 1665 $post_id2 = $this->factory->post->create( array( 'post_title' => 'beta', 'post_category' => array( $category2 ) ) ); 1666 $terms2 = get_the_category( $post_id2 ); 1667 $this->assertEquals( array( get_category( $category2 ) ), $terms2 ); 1668 1669 $post_id3 = $this->factory->post->create( array( 'post_title' => 'gamma', 'post_tag' => array( $tag1 ) ) ); 1670 $post_id4 = $this->factory->post->create( array( 'post_title' => 'delta', 'post_tag' => array( $tag2 ) ) ); 1671 1672 $query = new WP_Query( array( 1673 'fields' => 'ids', 1674 'update_post_meta_cache' => false, 1675 'update_post_term_cache' => false, 1676 'tax_query' => array( 1677 //'relation' => 'OR', 1678 array( 1679 'taxonomy' => 'category', 1680 'field' => 'term_id', 1681 'terms' => array( $category1, $category2 ) 1682 ) 1683 ) 1684 ) ); 1685 $ids = $query->get_posts(); 1686 $this->assertEquals( array( $post_id1, $post_id2 ), $ids ); 1687 } 1688 1689 /** 1690 * @group taxonomy 1691 */ 1692 function test_tax_query_no_taxonomy() { 1693 $cat_id = $this->factory->category->create( array( 'name' => 'alpha' ) ); 1694 $this->factory->post->create( array( 'post_title' => 'alpha', 'post_category' => array( $cat_id ) ) ); 1695 1696 $response1 = new WP_Query( array( 1697 'tax_query' => array( 1698 array( 'terms' => array( $cat_id ) ) 1699 ) 1700 ) ); 1701 $this->assertEmpty( $response1->posts ); 1702 1703 $response2 = new WP_Query( array( 1704 'fields' => 'ids', 1705 'update_post_meta_cache' => false, 1706 'update_post_term_cache' => false, 1707 'tax_query' => array( 1708 array( 1709 'taxonomy' => 'category', 1710 'terms' => array( $cat_id ) 1711 ) 1712 ) 1713 ) ); 1714 $this->assertNotEmpty( $response2->posts ); 1715 1716 $term = get_category( $cat_id ); 1717 $response3 = new WP_Query( array( 1718 'fields' => 'ids', 1719 'update_post_meta_cache' => false, 1720 'update_post_term_cache' => false, 1721 'tax_query' => array( 1722 array( 1723 'field' => 'term_taxonomy_id', 1724 'terms' => array( $term->term_taxonomy_id ) 1725 ) 1726 ) 1727 ) ); 1728 $this->assertNotEmpty( $response3->posts ); 1729 } 1730 1731 /** 1732 * @group taxonomy 1733 */ 1734 function test_term_taxonomy_id_field_no_taxonomy() { 1735 $q = new WP_Query(); 1736 1737 $posts = $this->factory->post->create_many( 5 ); 1738 1739 $cats = $tags = array(); 1740 1741 // need term_taxonomy_ids in addition to term_ids, so no factory 1742 for ( $i = 0; $i < 5; $i++ ) { 1743 $cats[$i] = wp_insert_term( 'category-' . $i , 'category' ); 1744 $tags[$i] = wp_insert_term( 'tag-' . $i, 'post_tag' ); 1745 1746 // post 0 gets all terms 1747 wp_set_object_terms( $posts[0], array( $cats[$i]['term_id'] ), 'category', true ); 1748 wp_set_object_terms( $posts[0], array( $tags[$i]['term_id'] ), 'post_tag', true ); 1749 } 1750 1751 wp_set_object_terms( $posts[1], array( $cats[0]['term_id'], $cats[2]['term_id'], $cats[4]['term_id'] ), 'category' ); 1752 wp_set_object_terms( $posts[1], array( $tags[0]['term_id'], $tags[2]['term_id'], $cats[4]['term_id'] ), 'post_tag' ); 1753 1754 wp_set_object_terms( $posts[2], array( $cats[1]['term_id'], $cats[3]['term_id'] ), 'category' ); 1755 wp_set_object_terms( $posts[2], array( $tags[1]['term_id'], $tags[3]['term_id'] ), 'post_tag' ); 1756 1757 wp_set_object_terms( $posts[3], array( $cats[0]['term_id'], $cats[2]['term_id'], $cats[4]['term_id'] ), 'category' ); 1758 wp_set_object_terms( $posts[3], array( $tags[1]['term_id'], $tags[3]['term_id'] ), 'post_tag' ); 1759 1760 $results1 = $q->query( array( 1761 'fields' => 'ids', 1762 'update_post_meta_cache' => false, 1763 'update_post_term_cache' => false, 1764 'orderby' => 'ID', 1765 'order' => 'ASC', 1766 'tax_query' => array( 1767 'relation' => 'OR', 1768 array( 1769 'field' => 'term_taxonomy_id', 1770 'terms' => array( $cats[0]['term_taxonomy_id'], $cats[2]['term_taxonomy_id'], $cats[4]['term_taxonomy_id'], $tags[0]['term_taxonomy_id'], $tags[2]['term_taxonomy_id'], $cats[4]['term_taxonomy_id'] ), 1771 'operator' => 'AND', 1772 'include_children' => false, 1773 ), 1774 array( 1775 'field' => 'term_taxonomy_id', 1776 'terms' => array( $cats[1]['term_taxonomy_id'], $cats[3]['term_taxonomy_id'], $tags[1]['term_taxonomy_id'], $tags[3]['term_taxonomy_id'] ), 1777 'operator' => 'AND', 1778 'include_children' => false, 1779 ) 1780 ) 1781 ) ); 1782 1783 $this->assertEquals( array( $posts[0], $posts[1], $posts[2] ), $results1, 'Relation: OR; Operator: AND' ); 1784 1785 $results2 = $q->query( array( 1786 'fields' => 'ids', 1787 'update_post_meta_cache' => false, 1788 'update_post_term_cache' => false, 1789 'orderby' => 'ID', 1790 'order' => 'ASC', 1791 'tax_query' => array( 1792 'relation' => 'AND', 1793 array( 1794 'field' => 'term_taxonomy_id', 1795 'terms' => array( $cats[0]['term_taxonomy_id'], $tags[0]['term_taxonomy_id'] ), 1796 'operator' => 'IN', 1797 'include_children' => false, 1798 ), 1799 array( 1800 'field' => 'term_taxonomy_id', 1801 'terms' => array( $cats[3]['term_taxonomy_id'], $tags[3]['term_taxonomy_id'] ), 1802 'operator' => 'IN', 1803 'include_children' => false, 1804 ) 1805 ) 1806 ) ); 1807 1808 $this->assertEquals( array( $posts[0], $posts[3] ), $results2, 'Relation: AND; Operator: IN' ); 1809 } 1810 1811 /** 1812 * @ticket 28099 1813 * @group taxonomy 1814 */ 1815 function test_empty_category__in() { 1816 $cat_id = $this->factory->category->create(); 1817 $post_id = $this->factory->post->create(); 1818 wp_set_post_categories( $post_id, $cat_id ); 1819 1820 $q1 = get_posts( array( 'category__in' => array( $cat_id ) ) ); 1821 $this->assertNotEmpty( $q1 ); 1822 $q2 = get_posts( array( 'category__in' => array() ) ); 1823 $this->assertNotEmpty( $q2 ); 1824 1825 $tag = wp_insert_term( 'woo', 'post_tag' ); 1826 $tag_id = $tag['term_id']; 1827 $slug = get_tag( $tag_id )->slug; 1828 wp_set_post_tags( $post_id, $slug ); 1829 1830 $q3 = get_posts( array( 'tag__in' => array( $tag_id ) ) ); 1831 $this->assertNotEmpty( $q3 ); 1832 $q4 = get_posts( array( 'tag__in' => array() ) ); 1833 $this->assertNotEmpty( $q4 ); 1834 1835 $q5 = get_posts( array( 'tag_slug__in' => array( $slug ) ) ); 1836 $this->assertNotEmpty( $q5 ); 1837 $q6 = get_posts( array( 'tag_slug__in' => array() ) ); 1838 $this->assertNotEmpty( $q6 ); 1839 } 1840 1841 /** 1842 * @group taxonomy 1843 * @ticket 29718 1844 */ 1845 public function test_populate_taxonomy_query_var_from_tax_query() { 1846 register_taxonomy( 'foo', 'post' ); 1847 $t = $this->factory->term->create( array( 1848 'taxonomy' => 'foo', 1849 ) ); 1850 $c = $this->factory->term->create( array( 1851 'taxonomy' => 'category', 1852 ) ); 1853 1854 $q = new WP_Query( array( 1855 'tax_query' => array( 1856 // Empty terms mean that this one should be skipped 1857 array( 1858 'taxonomy' => 'bar', 1859 'terms' => array(), 1860 ), 1861 1862 // Category and post tags should be skipped 1863 array( 1864 'taxonomy' => 'category', 1865 'terms' => array( $c ), 1866 ), 1867 1868 array( 1869 'taxonomy' => 'foo', 1870 'terms' => array( $t ), 1871 ), 1872 ), 1873 ) ); 1874 1875 $this->assertSame( 'foo', $q->get( 'taxonomy' ) ); 1876 1877 _unregister_taxonomy( 'foo' ); 1878 } 1879 1880 /** 1881 * @group taxonomy 1882 */ 1883 public function test_populate_taxonomy_query_var_from_tax_query_taxonomy_already_set() { 1884 register_taxonomy( 'foo', 'post' ); 1885 register_taxonomy( 'foo1', 'post' ); 1886 $t = $this->factory->term->create( array( 1887 'taxonomy' => 'foo', 1888 ) ); 1889 1890 $q = new WP_Query( array( 1891 'taxonomy' => 'bar', 1892 'tax_query' => array( 1893 array( 1894 'taxonomy' => 'foo', 1895 'terms' => array( $t ), 1896 ), 1897 ), 1898 ) ); 1899 1900 $this->assertSame( 'bar', $q->get( 'taxonomy' ) ); 1901 1902 _unregister_taxonomy( 'foo' ); 1903 _unregister_taxonomy( 'foo1' ); 1904 } 1905 1906 /** 1907 * @group taxonomy 1908 */ 1909 public function test_populate_term_query_var_from_tax_query() { 1910 register_taxonomy( 'foo', 'post' ); 1911 $t = $this->factory->term->create( array( 1912 'taxonomy' => 'foo', 1913 'slug' => 'bar', 1914 ) ); 1915 1916 $q = new WP_Query( array( 1917 'tax_query' => array( 1918 array( 1919 'taxonomy' => 'foo', 1920 'terms' => array( 'bar' ), 1921 'field' => 'slug', 1922 ), 1923 ), 1924 ) ); 1925 1926 $this->assertSame( 'bar', $q->get( 'term' ) ); 1927 1928 _unregister_taxonomy( 'foo' ); 1929 } 1930 1931 /** 1932 * @group taxonomy 1933 */ 1934 public function test_populate_term_id_query_var_from_tax_query() { 1935 register_taxonomy( 'foo', 'post' ); 1936 $t = $this->factory->term->create( array( 1937 'taxonomy' => 'foo', 1938 'slug' => 'bar', 1939 ) ); 1940 1941 $q = new WP_Query( array( 1942 'tax_query' => array( 1943 array( 1944 'taxonomy' => 'foo', 1945 'terms' => array( $t ), 1946 'field' => 'term_id', 1947 ), 1948 ), 1949 ) ); 1950 1951 $this->assertEquals( $t, $q->get( 'term_id' ) ); 1952 1953 _unregister_taxonomy( 'foo' ); 1954 } 1955 1956 /** 1957 * @group taxonomy 1958 * @ticket 29718 1959 */ 1960 public function test_populate_cat_category_name_query_var_from_tax_query() { 1961 register_taxonomy( 'foo', 'post' ); 1962 $t = $this->factory->term->create( array( 1963 'taxonomy' => 'foo', 1964 ) ); 1965 $c = $this->factory->term->create( array( 1966 'taxonomy' => 'foo', 1967 'slug' => 'bar', 1968 ) ); 1969 1970 $q = new WP_Query( array( 1971 'tax_query' => array( 1972 // Non-category should be skipped 1973 array( 1974 'taxonomy' => 'foo', 1975 'terms' => array( $t ), 1976 ), 1977 1978 // Empty terms mean that this one should be skipped 1979 array( 1980 'taxonomy' => 'category', 1981 'terms' => array(), 1982 ), 1983 1984 // Category and post tags should be skipped 1985 array( 1986 'taxonomy' => 'category', 1987 'terms' => array( $c ), 1988 ), 1989 ), 1990 ) ); 1991 1992 $this->assertEquals( $c, $q->get( 'cat' ) ); 1993 $this->assertEquals( 'bar', $q->get( 'category_name' ) ); 1994 1995 _unregister_taxonomy( 'foo' ); 1996 } 1997 1998 /** 1999 * @group taxonomy 2000 * @ticket 29718 2001 */ 2002 public function test_populate_tag_id_query_var_from_tax_query() { 2003 register_taxonomy( 'foo', 'post' ); 2004 $t = $this->factory->term->create( array( 2005 'taxonomy' => 'foo', 2006 ) ); 2007 $tag = $this->factory->term->create( array( 2008 'taxonomy' => 'post_tag', 2009 'slug' => 'bar', 2010 ) ); 2011 2012 $q = new WP_Query( array( 2013 'tax_query' => array( 2014 // Non-tag should be skipped 2015 array( 2016 'taxonomy' => 'foo', 2017 'terms' => array( $t ), 2018 ), 2019 2020 // Empty terms mean that this one should be skipped 2021 array( 2022 'taxonomy' => 'post_tag', 2023 'terms' => array(), 2024 ), 2025 2026 // Category and post tags should be skipped 2027 array( 2028 'taxonomy' => 'post_tag', 2029 'terms' => array( $tag ), 2030 ), 2031 ), 2032 ) ); 2033 2034 $this->assertEquals( $tag, $q->get( 'tag_id' ) ); 2035 2036 _unregister_taxonomy( 'foo' ); 1071 2037 } 1072 2038 -
trunk/tests/phpunit/tests/term/query.php
r28783 r29805 7 7 protected $q; 8 8 9 function setUp() {9 public function setUp() { 10 10 parent::setUp(); 11 11 unset( $this->q ); … … 13 13 } 14 14 15 function test_category__and_var() { 16 $term_id = $this->factory->category->create( array( 'slug' => 'woo', 'name' => 'WOO!' ) ); 17 $term_id2 = $this->factory->category->create( array( 'slug' => 'hoo', 'name' => 'HOO!' ) ); 18 $post_id = $this->factory->post->create(); 19 20 wp_set_post_categories( $post_id, $term_id ); 21 22 $posts = $this->q->query( array( 'category__and' => array( $term_id ) ) ); 23 24 $this->assertEmpty( $this->q->get( 'category__and' ) ); 25 $this->assertCount( 0, $this->q->get( 'category__and' ) ); 26 $this->assertNotEmpty( $this->q->get( 'category__in' ) ); 27 $this->assertCount( 1, $this->q->get( 'category__in' ) ); 28 29 $this->assertNotEmpty( $posts ); 30 $this->assertEquals( array( $post_id ), wp_list_pluck( $posts, 'ID' ) ); 31 32 $posts2 = $this->q->query( array( 'category__and' => array( $term_id, $term_id2 ) ) ); 33 $this->assertNotEmpty( $this->q->get( 'category__and' ) ); 34 $this->assertCount( 2, $this->q->get( 'category__and' ) ); 35 $this->assertEmpty( $this->q->get( 'category__in' ) ); 36 $this->assertCount( 0, $this->q->get( 'category__in' ) ); 37 38 $this->assertEmpty( $posts2 ); 39 } 40 41 function test_taxonomy_with_attachments() { 42 register_taxonomy_for_object_type( 'post_tag', 'attachment:image' ); 43 $tag_id = $this->factory->term->create( array( 'slug' => rand_str(), 'name' => rand_str() ) ); 44 $image_id = $this->factory->attachment->create_object( 'image.jpg', 0, array( 45 'post_mime_type' => 'image/jpeg', 46 'post_type' => 'attachment' 47 ) ); 48 wp_set_object_terms( $image_id, $tag_id, 'post_tag' ); 49 50 $posts = $this->q->query( array( 51 'fields' => 'ids', 52 'post_type' => 'attachment', 53 'post_status' => 'inherit', 54 'tax_query' => array( 55 array( 56 'taxonomy' => 'post_tag', 57 'field' => 'term_id', 58 'terms' => array( $tag_id ) 59 ) 60 ) 61 ) ); 62 63 $this->assertEquals( array( $image_id ), $posts ); 64 } 65 66 /** 67 * @ticket 27193 68 */ 69 function test_cat_or_tag() { 70 $category1 = $this->factory->term->create( array( 'taxonomy' => 'category', 'name' => 'alpha' ) ); 71 $category2 = $this->factory->term->create( array( 'taxonomy' => 'category', 'name' => 'beta' ) ); 72 73 $tag1 = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'gamma' ) ); 74 $tag2 = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'delta' ) ); 75 76 $post_id1 = $this->factory->post->create( array( 'post_title' => 'alpha', 'post_category' => array( $category1 ) ) ); 77 $terms1 = get_the_category( $post_id1 ); 78 $this->assertEquals( array( get_category( $category1 ) ), $terms1 ); 79 80 $post_id2 = $this->factory->post->create( array( 'post_title' => 'beta', 'post_category' => array( $category2 ) ) ); 81 $terms2 = get_the_category( $post_id2 ); 82 $this->assertEquals( array( get_category( $category2 ) ), $terms2 ); 83 84 $post_id3 = $this->factory->post->create( array( 'post_title' => 'gamma', 'post_tag' => array( $tag1 ) ) ); 85 $post_id4 = $this->factory->post->create( array( 'post_title' => 'delta', 'post_tag' => array( $tag2 ) ) ); 86 87 $query = new WP_Query( array( 88 'fields' => 'ids', 89 'tax_query' => array( 90 //'relation' => 'OR', 91 array( 92 'taxonomy' => 'category', 93 'field' => 'term_id', 94 'terms' => array( $category1, $category2 ) 95 ) 96 ) 97 ) ); 98 $ids = $query->get_posts(); 99 $this->assertEquals( array( $post_id1, $post_id2 ), $ids ); 100 } 101 102 function test_tax_query_no_taxonomy() { 103 $cat_id = $this->factory->category->create( array( 'name' => 'alpha' ) ); 104 $this->factory->post->create( array( 'post_title' => 'alpha', 'post_category' => array( $cat_id ) ) ); 105 106 $response1 = new WP_Query( array( 107 'tax_query' => array( 108 array( 'terms' => array( $cat_id ) ) 109 ) 110 ) ); 111 $this->assertEmpty( $response1->posts ); 112 113 $response2 = new WP_Query( array( 114 'tax_query' => array( 115 array( 116 'taxonomy' => 'category', 117 'terms' => array( $cat_id ) 118 ) 119 ) 120 ) ); 121 $this->assertNotEmpty( $response2->posts ); 122 123 $term = get_category( $cat_id ); 124 $response3 = new WP_Query( array( 125 'tax_query' => array( 126 array( 127 'field' => 'term_taxonomy_id', 128 'terms' => array( $term->term_taxonomy_id ) 129 ) 130 ) 131 ) ); 132 $this->assertNotEmpty( $response3->posts ); 133 } 134 135 function test_term_taxonomy_id_field_no_taxonomy() { 136 $posts = $this->factory->post->create_many( 5 ); 137 138 $cats = $tags = array(); 139 140 // need term_taxonomy_ids in addition to term_ids, so no factory 141 for ( $i = 0; $i < 5; $i++ ) { 142 $cats[$i] = wp_insert_term( 'category-' . $i , 'category' ); 143 $tags[$i] = wp_insert_term( 'tag-' . $i, 'post_tag' ); 144 145 // post 0 gets all terms 146 wp_set_object_terms( $posts[0], array( $cats[$i]['term_id'] ), 'category', true ); 147 wp_set_object_terms( $posts[0], array( $tags[$i]['term_id'] ), 'post_tag', true ); 148 } 149 150 wp_set_object_terms( $posts[1], array( $cats[0]['term_id'], $cats[2]['term_id'], $cats[4]['term_id'] ), 'category' ); 151 wp_set_object_terms( $posts[1], array( $tags[0]['term_id'], $tags[2]['term_id'], $cats[4]['term_id'] ), 'post_tag' ); 152 153 wp_set_object_terms( $posts[2], array( $cats[1]['term_id'], $cats[3]['term_id'] ), 'category' ); 154 wp_set_object_terms( $posts[2], array( $tags[1]['term_id'], $tags[3]['term_id'] ), 'post_tag' ); 155 156 wp_set_object_terms( $posts[3], array( $cats[0]['term_id'], $cats[2]['term_id'], $cats[4]['term_id'] ), 'category' ); 157 wp_set_object_terms( $posts[3], array( $tags[1]['term_id'], $tags[3]['term_id'] ), 'post_tag' ); 158 159 $results1 = $this->q->query( array( 160 'fields' => 'ids', 161 'orderby' => 'ID', 162 'order' => 'ASC', 163 'tax_query' => array( 164 'relation' => 'OR', 165 array( 166 'field' => 'term_taxonomy_id', 167 'terms' => array( $cats[0]['term_taxonomy_id'], $cats[2]['term_taxonomy_id'], $cats[4]['term_taxonomy_id'], $tags[0]['term_taxonomy_id'], $tags[2]['term_taxonomy_id'], $cats[4]['term_taxonomy_id'] ), 168 'operator' => 'AND', 169 'include_children' => false, 170 ), 171 array( 172 'field' => 'term_taxonomy_id', 173 'terms' => array( $cats[1]['term_taxonomy_id'], $cats[3]['term_taxonomy_id'], $tags[1]['term_taxonomy_id'], $tags[3]['term_taxonomy_id'] ), 174 'operator' => 'AND', 175 'include_children' => false, 176 ) 177 ) 178 ) ); 179 180 $this->assertEquals( array( $posts[0], $posts[1], $posts[2] ), $results1, 'Relation: OR; Operator: AND' ); 181 182 $results2 = $this->q->query( array( 183 'fields' => 'ids', 184 'orderby' => 'ID', 185 'order' => 'ASC', 186 'tax_query' => array( 187 'relation' => 'AND', 188 array( 189 'field' => 'term_taxonomy_id', 190 'terms' => array( $cats[0]['term_taxonomy_id'], $tags[0]['term_taxonomy_id'] ), 191 'operator' => 'IN', 192 'include_children' => false, 193 ), 194 array( 195 'field' => 'term_taxonomy_id', 196 'terms' => array( $cats[3]['term_taxonomy_id'], $tags[3]['term_taxonomy_id'] ), 197 'operator' => 'IN', 198 'include_children' => false, 199 ) 200 ) 201 ) ); 202 203 $this->assertEquals( array( $posts[0], $posts[3] ), $results2, 'Relation: AND; Operator: IN' ); 204 } 205 206 /** 207 * @ticket 28099 208 */ 209 function test_empty__in() { 210 $cat_id = $this->factory->category->create(); 211 $post_id = $this->factory->post->create(); 212 wp_set_post_categories( $post_id, $cat_id ); 213 214 $q1 = get_posts( array( 'category__in' => array( $cat_id ) ) ); 215 $this->assertNotEmpty( $q1 ); 216 $q2 = get_posts( array( 'category__in' => array() ) ); 217 $this->assertNotEmpty( $q2 ); 218 219 $tag = wp_insert_term( 'woo', 'post_tag' ); 220 $tag_id = $tag['term_id']; 221 $slug = get_tag( $tag_id )->slug; 222 wp_set_post_tags( $post_id, $slug ); 223 224 $q3 = get_posts( array( 'tag__in' => array( $tag_id ) ) ); 225 $this->assertNotEmpty( $q3 ); 226 $q4 = get_posts( array( 'tag__in' => array() ) ); 227 $this->assertNotEmpty( $q4 ); 228 229 $q5 = get_posts( array( 'tag_slug__in' => array( $slug ) ) ); 230 $this->assertNotEmpty( $q5 ); 231 $q6 = get_posts( array( 'tag_slug__in' => array() ) ); 232 $this->assertNotEmpty( $q6 ); 15 public function test_construct_with_relation_default() { 16 $tq = new WP_Tax_Query( array() ); 17 $this->assertSame( 'AND', $tq->relation ); 18 } 19 20 public function test_construct_with_relation_or_lowercase() { 21 $tq = new WP_Tax_Query( array( 22 'relation' => 'or', 23 ) ); 24 $this->assertSame( 'OR', $tq->relation ); 25 } 26 27 public function test_construct_with_relation_or_uppercase() { 28 $tq = new WP_Tax_Query( array( 29 'relation' => 'OR', 30 ) ); 31 $this->assertSame( 'OR', $tq->relation ); 32 } 33 34 public function test_construct_with_relation_other() { 35 $tq = new WP_Tax_Query( array( 36 'relation' => 'foo', 37 ) ); 38 $this->assertSame( 'AND', $tq->relation ); 39 } 40 41 public function test_construct_fill_missing_query_params() { 42 $tq = new WP_Tax_Query( array( 43 array(), 44 ) ); 45 46 $expected = array( 47 'taxonomy' => '', 48 'terms' => array(), 49 'include_children' => true, 50 'field' => 'term_id', 51 'operator' => 'IN', 52 ); 53 54 $this->assertEquals( $expected, $tq->queries[0] ); 55 } 56 57 public function test_construct_fill_missing_query_params_merge_with_passed_values() { 58 $tq = new WP_Tax_Query( array( 59 array( 60 'taxonomy' => 'foo', 61 'include_children' => false, 62 'foo' => 'bar', 63 ), 64 ) ); 65 66 $expected = array( 67 'taxonomy' => 'foo', 68 'terms' => array(), 69 'include_children' => false, 70 'field' => 'term_id', 71 'operator' => 'IN', 72 'foo' => 'bar', 73 ); 74 75 $this->assertEquals( $expected, $tq->queries[0] ); 76 } 77 78 public function test_construct_cast_terms_to_array() { 79 $tq = new WP_Tax_Query( array( 80 array( 81 'terms' => 'foo', 82 ), 83 ) ); 84 85 $this->assertEquals( array( 'foo', ), $tq->queries[0]['terms'] ); 86 } 87 88 public function test_transform_query_terms_empty() { 89 $tq = new WP_Tax_Query( array( 90 array(), 91 ) ); 92 $query = $tq->queries[0]; 93 94 $tq->transform_query( $tq->queries[0], 'term_id' ); 95 96 $this->assertSame( $query, $tq->queries[0] ); 97 } 98 99 public function test_transform_query_field_same_as_resulting_field() { 100 $tq = new WP_Tax_Query( array( 101 array( 102 'field' => 'term_id', 103 ), 104 ) ); 105 $query = $tq->queries[0]; 106 107 $tq->transform_query( $tq->queries[0], 'term_id' ); 108 109 $this->assertSame( $query, $tq->queries[0] ); 110 } 111 112 public function test_transform_query_resulting_field_sanitized() { 113 $t1 = $this->factory->category->create( array( 'slug' => 'foo', ) ); 114 $t2 = $this->factory->category->create( array( 'slug' => 'bar', ) ); 115 $p = $this->factory->post->create(); 116 wp_set_post_categories( $p, $t1 ); 117 118 $tq1 = new WP_Tax_Query( array( 119 array( 120 'terms' => array( 'foo' ), 121 'field' => 'slug', 122 ), 123 ) ); 124 $tq1->transform_query( $tq1->queries[0], 'term_taxonomy_id' ); 125 126 $tq2 = new WP_Tax_Query( array( 127 array( 128 'terms' => array( 'foo' ), 129 'field' => 'slug', 130 ), 131 ) ); 132 $tq2->transform_query( $tq2->queries[0], 'TERM_ ta%xonomy_id' ); 133 134 $this->assertSame( $tq1->queries[0], $tq2->queries[0] ); 135 } 136 137 public function test_transform_query_field_slug() { 138 $t1 = $this->factory->category->create( array( 'slug' => 'foo', ) ); 139 $p = $this->factory->post->create(); 140 $tt_ids = wp_set_post_categories( $p, $t1 ); 141 142 $tq = new WP_Tax_Query( array( 143 array( 144 'taxonomy' => 'category', 145 'terms' => array( 'foo' ), 146 'field' => 'slug', 147 ), 148 ) ); 149 $tq->transform_query( $tq->queries[0], 'term_taxonomy_id' ); 150 151 $this->assertSame( $tt_ids, $tq->queries[0]['terms'] ); 152 $this->assertSame( 'term_taxonomy_id', $tq->queries[0]['field'] ); 153 } 154 155 public function test_transform_query_field_name() { 156 $t1 = $this->factory->category->create( array( 'slug' => 'foo', 'name' => 'Foo', ) ); 157 $p = $this->factory->post->create(); 158 $tt_ids = wp_set_post_categories( $p, $t1 ); 159 160 $tq = new WP_Tax_Query( array( 161 array( 162 'taxonomy' => 'category', 163 'terms' => array( 'Foo' ), 164 'field' => 'name', 165 ), 166 ) ); 167 $tq->transform_query( $tq->queries[0], 'term_taxonomy_id' ); 168 169 $this->assertSame( $tt_ids, $tq->queries[0]['terms'] ); 170 $this->assertSame( 'term_taxonomy_id', $tq->queries[0]['field'] ); 171 } 172 173 public function test_transform_query_field_term_taxonomy_id() { 174 $t1 = $this->factory->category->create( array( 'slug' => 'foo', 'name' => 'Foo', ) ); 175 $p = $this->factory->post->create(); 176 $tt_ids = wp_set_post_categories( $p, $t1 ); 177 178 $tq = new WP_Tax_Query( array( 179 array( 180 'taxonomy' => 'category', 181 'terms' => $tt_ids, 182 'field' => 'term_taxonomy_id', 183 ), 184 ) ); 185 $tq->transform_query( $tq->queries[0], 'term_id' ); 186 187 $this->assertEquals( array( $t1 ), $tq->queries[0]['terms'] ); 188 $this->assertSame( 'term_id', $tq->queries[0]['field'] ); 189 } 190 191 public function test_transform_query_field_term_taxonomy_default() { 192 $t1 = $this->factory->category->create( array( 'slug' => 'foo', 'name' => 'Foo', ) ); 193 $p = $this->factory->post->create(); 194 $tt_ids = wp_set_post_categories( $p, $t1 ); 195 196 $tq = new WP_Tax_Query( array( 197 array( 198 'taxonomy' => 'category', 199 'terms' => array( $t1 ), 200 'field' => 'foo', // Anything defaults to term_id 201 ), 202 ) ); 203 $tq->transform_query( $tq->queries[0], 'term_taxonomy_id' ); 204 205 $this->assertEquals( $tt_ids, $tq->queries[0]['terms'] ); 206 $this->assertSame( 'term_taxonomy_id', $tq->queries[0]['field'] ); 207 } 208 209 public function test_transform_query_nonexistent_terms() { 210 $tq = new WP_Tax_Query( array( 211 array( 212 'terms' => array( 'foo' ), 213 'field' => 'slug', 214 'operator' => 'AND', 215 ), 216 ) ); 217 $tq->transform_query( $tq->queries[0], 'term_taxonomy_id' ); 218 219 $this->assertTrue( is_wp_error( $tq->queries[0] ) ); 233 220 } 234 221 }
Note: See TracChangeset
for help on using the changeset viewer.