xarxaprod-wp-theme/vendor/wp-cli/wp-cli/features/utils-wp.feature

827 lines
22 KiB
Gherkin

Feature: Utilities that depend on WordPress code
Scenario: Clear WP cache
Given a WP installation
And a test.php file:
"""
<?php
WP_CLI::add_hook( 'after_wp_load', function () {
global $wp_object_cache;
echo empty( $wp_object_cache->cache ) . ',' . isset( $wp_object_cache->group_ops ) . ',' . isset( $wp_object_cache->stats ) . ',' . isset( $wp_object_cache->memcache_debug ) . "\n";
WP_CLI\Utils\wp_clear_object_cache();
echo empty( $wp_object_cache->cache ) . ',' . isset( $wp_object_cache->group_ops ) . ',' . isset( $wp_object_cache->stats ) . ',' . isset( $wp_object_cache->memcache_debug ) . "\n";
} );
"""
When I run `wp post create --post_title="Foo Bar" --porcelain`
And I run `wp --require=test.php eval ''`
Then STDOUT should be:
"""
,,,
1,,,
"""
Scenario: Get WP table names for single site install
Given a WP installation
And I run `wp db query "CREATE TABLE xx_wp_posts ( id int );"`
And I run `wp db query "CREATE TABLE wp_xx_posts ( id int );"`
And I run `wp db query "CREATE TABLE wp_posts_xx ( id int );"`
And I run `wp db query "CREATE TABLE wp_categories ( id int );"`
And I run `wp db query "CREATE VIEW wp_posts_view AS ( SELECT ID from wp_posts );"`
And a table_names.php file:
"""
<?php
/**
* Test WP get table names.
*
* ## OPTIONS
*
* [<table>...]
* : List tables based on wildcard search, e.g. 'wp_*_options' or 'wp_post?'.
*
* [--scope=<scope>]
* : Can be all, global, ms_global, blog, or old tables. Defaults to all.
*
* [--network]
* : List all the tables in a multisite installation. Overrides --scope=<scope>.
*
* [--all-tables-with-prefix]
* : List all tables that match the table prefix even if not registered on $wpdb. Overrides --network.
*
* [--all-tables]
* : List all tables in the database, regardless of the prefix, and even if not registered on $wpdb. Overrides --all-tables-with-prefix.
*
* [--base-tables-only]
* : Restrict returned tables to those that are not views.
*
* [--views-only]
* : Restrict returned tables to those that are views.
*/
function test_wp_get_table_names( $args, $assoc_args ) {
if ( $tables = WP_CLI\Utils\wp_get_table_names( $args, $assoc_args ) ) {
echo implode( PHP_EOL, $tables ) . PHP_EOL;
}
}
WP_CLI::add_command( 'get_table_names', 'test_wp_get_table_names' );
"""
When I run `wp --require=table_names.php get_table_names`
Then STDOUT should contain:
"""
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_term_relationships
wp_term_taxonomy
"""
# Leave out wp_termmeta for old WP compat.
And STDOUT should contain:
"""
wp_terms
wp_usermeta
wp_users
"""
And save STDOUT as {DEFAULT_STDOUT}
When I run `wp --require=table_names.php get_table_names --all-tables-with-prefix --views-only`
Then STDOUT should be:
"""
wp_posts_view
"""
When I run `wp --require=table_names.php get_table_names --all-tables --base-tables-only`
Then STDOUT should not contain:
"""
wp_posts_view
"""
But STDOUT should contain:
"""
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_posts_xx
wp_term_relationships
wp_term_taxonomy
"""
# Leave out wp_termmeta for old WP compat.
But STDOUT should contain:
"""
wp_terms
wp_usermeta
wp_users
"""
When I run `wp --require=table_names.php get_table_names --scope=all`
Then STDOUT should be:
"""
{DEFAULT_STDOUT}
"""
When I run `wp --require=table_names.php get_table_names --scope=blog`
Then STDOUT should contain:
"""
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_term_relationships
wp_term_taxonomy
"""
# Leave out wp_termmeta for old WP compat.
And STDOUT should contain:
"""
wp_terms
"""
When I run `wp --require=table_names.php get_table_names --scope=global`
Then STDOUT should be:
"""
wp_usermeta
wp_users
"""
When I run `wp --require=table_names.php get_table_names --scope=ms_global`
Then STDOUT should be empty
When I run `wp --require=table_names.php get_table_names --scope=old`
Then STDOUT should be:
"""
wp_categories
"""
When I run `wp --require=table_names.php get_table_names --network`
Then STDOUT should be:
"""
{DEFAULT_STDOUT}
"""
When I run `wp --require=table_names.php get_table_names --all-tables-with-prefix`
Then STDOUT should contain:
"""
wp_categories
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_posts_view
wp_posts_xx
wp_term_relationships
wp_term_taxonomy
"""
# Leave out wp_termmeta for old WP compat.
And STDOUT should contain:
"""
wp_terms
wp_usermeta
wp_users
wp_xx_posts
"""
When I run `wp --require=table_names.php get_table_names --all-tables`
Then STDOUT should contain:
"""
wp_categories
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_posts_view
wp_posts_xx
wp_term_relationships
wp_term_taxonomy
"""
# Leave out wp_termmeta for old WP compat.
And STDOUT should contain:
"""
wp_terms
wp_usermeta
wp_users
wp_xx_posts
xx_wp_posts
"""
When I run `wp --require=table_names.php get_table_names '*_posts'`
Then STDOUT should be:
"""
wp_posts
"""
When I run `wp --require=table_names.php get_table_names 'wp_post*'`
Then STDOUT should be:
"""
wp_postmeta
wp_posts
"""
When I run `wp --require=table_names.php get_table_names 'wp*osts'`
Then STDOUT should be:
"""
wp_posts
"""
When I run `wp --require=table_names.php get_table_names '*_posts' --scope=blog`
Then STDOUT should be:
"""
wp_posts
"""
When I try `wp --require=table_names.php get_table_names '*_posts' --scope=global`
Then STDERR should be:
"""
Error: Couldn't find any tables matching: *_posts
"""
And STDOUT should be empty
When I run `wp --require=table_names.php get_table_names '*_posts' --network`
Then STDOUT should be:
"""
wp_posts
"""
When I run `wp --require=table_names.php get_table_names '*_posts' --all-tables-with-prefix`
Then STDOUT should be:
"""
wp_posts
wp_xx_posts
"""
When I run `wp --require=table_names.php get_table_names '*wp_posts' --all-tables-with-prefix`
Then STDOUT should be:
"""
wp_posts
"""
When I run `wp --require=table_names.php get_table_names 'wp_post*' --all-tables-with-prefix`
Then STDOUT should be:
"""
wp_postmeta
wp_posts
wp_posts_view
wp_posts_xx
"""
When I run `wp --require=table_names.php get_table_names 'wp*osts' --all-tables-with-prefix`
Then STDOUT should be:
"""
wp_posts
wp_xx_posts
"""
When I run `wp --require=table_names.php get_table_names '*_posts' --all-tables`
Then STDOUT should be:
"""
wp_posts
wp_xx_posts
xx_wp_posts
"""
When I run `wp --require=table_names.php get_table_names '*wp_posts' --all-tables`
Then STDOUT should be:
"""
wp_posts
xx_wp_posts
"""
When I run `wp --require=table_names.php get_table_names 'wp_post*' --all-tables`
Then STDOUT should be:
"""
wp_postmeta
wp_posts
wp_posts_view
wp_posts_xx
"""
When I run `wp --require=table_names.php get_table_names 'wp*osts' --all-tables`
Then STDOUT should be:
"""
wp_posts
wp_xx_posts
"""
When I try `wp --require=table_names.php get_table_names non_existent_table`
Then STDERR should be:
"""
Error: Couldn't find any tables matching: non_existent_table
"""
And STDOUT should be empty
When I run `wp --require=table_names.php get_table_names wp_posts non_existent_table`
Then STDOUT should be:
"""
wp_posts
"""
When I run `wp --require=table_names.php get_table_names wp_posts non_existent_table 'wp_?ption*'`
Then STDOUT should be:
"""
wp_options
wp_posts
"""
Scenario: Get WP table names for multisite install
Given a WP multisite install
And I run `wp db query "CREATE TABLE xx_wp_posts ( id int );"`
And I run `wp db query "CREATE TABLE xx_wp_2_posts ( id int );"`
And I run `wp db query "CREATE TABLE wp_xx_posts ( id int );"`
And I run `wp db query "CREATE TABLE wp_2_xx_posts ( id int );"`
And I run `wp db query "CREATE TABLE wp_posts_xx ( id int );"`
And I run `wp db query "CREATE TABLE wp_2_posts_xx ( id int );"`
And I run `wp db query "CREATE TABLE wp_categories ( id int );"`
And I run `wp db query "CREATE TABLE wp_sitecategories ( id int );"`
And a table_names.php file:
"""
<?php
/**
* Test WP get table names.
*
* ## OPTIONS
*
* [<table>...]
* : List tables based on wildcard search, e.g. 'wp_*_options' or 'wp_post?'.
*
* [--scope=<scope>]
* : Can be all, global, ms_global, blog, or old tables. Defaults to all.
*
* [--network]
* : List all the tables in a multisite installation. Overrides --scope=<scope>.
*
* [--all-tables-with-prefix]
* : List all tables that match the table prefix even if not registered on $wpdb. Overrides --network.
*
* [--all-tables]
* : List all tables in the database, regardless of the prefix, and even if not registered on $wpdb. Overrides --all-tables-with-prefix.
*/
function test_wp_get_table_names( $args, $assoc_args ) {
if ( $tables = WP_CLI\Utils\wp_get_table_names( $args, $assoc_args ) ) {
echo implode( PHP_EOL, $tables ) . PHP_EOL;
}
}
WP_CLI::add_command( 'get_table_names', 'test_wp_get_table_names' );
"""
# With no subsite.
When I run `wp --require=table_names.php get_table_names`
# Leave out wp_blog_versions as it was never used and is removed with WP 5.3+.
# Leave out wp_blogmeta for old WP compat.
Then STDOUT should contain:
"""
wp_blogs
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_registration_log
wp_signups
wp_site
wp_sitemeta
wp_term_relationships
wp_term_taxonomy
"""
# Leave out wp_termmeta for old WP compat.
And STDOUT should contain:
"""
wp_terms
wp_usermeta
wp_users
"""
And save STDOUT as {DEFAULT_STDOUT}
When I run `wp --require=table_names.php get_table_names --scope=all`
Then STDOUT should be:
"""
{DEFAULT_STDOUT}
"""
When I run `wp --require=table_names.php get_table_names --scope=blog`
Then STDOUT should contain:
"""
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_term_relationships
wp_term_taxonomy
"""
# Leave out wp_termmeta for old WP compat.
And STDOUT should contain:
"""
wp_terms
"""
When I run `wp --require=table_names.php get_table_names --scope=global`
# Leave out wp_blog_versions as it was never used and is removed with WP 5.3+.
# Leave out wp_blogmeta for old WP compat.
Then STDOUT should contain:
"""
wp_blogs
wp_registration_log
wp_signups
wp_site
wp_sitemeta
wp_usermeta
wp_users
"""
And save STDOUT as {GLOBAL_STDOUT}
When I run `wp --require=table_names.php get_table_names --scope=ms_global`
# Leave out wp_blog_versions as it was never used and is removed with WP 5.3+.
# Leave out wp_blogmeta for old WP compat.
Then STDOUT should contain:
"""
wp_blogs
wp_registration_log
wp_signups
wp_site
wp_sitemeta
"""
When I run `wp --require=table_names.php get_table_names --scope=old`
Then STDOUT should be:
"""
wp_categories
"""
When I run `wp --require=table_names.php get_table_names --network`
Then STDOUT should be:
"""
{DEFAULT_STDOUT}
"""
# With subsite.
Given I run `wp site create --slug=foo`
When I run `wp --require=table_names.php get_table_names`
Then STDOUT should be:
"""
{DEFAULT_STDOUT}
"""
When I run `wp --require=table_names.php get_table_names --url=example.com/foo --scope=blog`
Then STDOUT should contain:
"""
wp_2_commentmeta
wp_2_comments
wp_2_links
wp_2_options
wp_2_postmeta
wp_2_posts
wp_2_term_relationships
wp_2_term_taxonomy
"""
# Leave out wp_2_termmeta for old WP compat.
And STDOUT should contain:
"""
wp_2_terms
"""
And save STDOUT as {SUBSITE_BLOG_STDOUT}
When I run `wp --require=table_names.php get_table_names --url=example.com/foo`
Then STDOUT should be:
"""
{SUBSITE_BLOG_STDOUT}
{GLOBAL_STDOUT}
"""
When I run `wp --require=table_names.php get_table_names --network`
Then STDOUT should be:
"""
{SUBSITE_BLOG_STDOUT}
{DEFAULT_STDOUT}
"""
And save STDOUT as {NETWORK_STDOUT}
When I run `wp --require=table_names.php get_table_names --network --url=example.com/foo`
Then STDOUT should be:
"""
{NETWORK_STDOUT}
"""
When I run `wp --require=table_names.php get_table_names --all-tables-with-prefix`
Then STDOUT should contain:
"""
wp_2_commentmeta
wp_2_comments
wp_2_links
wp_2_options
wp_2_postmeta
wp_2_posts
wp_2_posts_xx
wp_2_term_relationships
wp_2_term_taxonomy
"""
# Leave out wp_2_termmeta for old WP compat.
And STDOUT should contain:
"""
wp_2_terms
wp_2_xx_posts
"""
# Leave out wp_blog_versions as it was never used and is removed with WP 5.3+.
# Leave out wp_blogmeta for old WP compat.
Then STDOUT should contain:
"""
wp_blogs
wp_categories
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_posts_xx
wp_registration_log
wp_signups
wp_site
wp_sitecategories
wp_sitemeta
wp_term_relationships
wp_term_taxonomy
"""
# Leave out wp_termmeta for old WP compat.
And STDOUT should contain:
"""
wp_terms
wp_usermeta
wp_users
wp_xx_posts
"""
And save STDOUT as {ALL_TABLES_WITH_PREFIX_STDOUT}
# Network overriden by all-tables-with-prefix.
When I run `wp --require=table_names.php get_table_names --all-tables-with-prefix --network`
Then STDOUT should contain:
"""
{ALL_TABLES_WITH_PREFIX_STDOUT}
"""
When I run `wp --require=table_names.php get_table_names --all-tables`
Then STDOUT should be:
"""
{ALL_TABLES_WITH_PREFIX_STDOUT}
xx_wp_2_posts
xx_wp_posts
"""
And save STDOUT as {ALL_TABLES_STDOUT}
# Network overriden by all-tables.
When I run `wp --require=table_names.php get_table_names --all-tables --network`
Then STDOUT should be:
"""
{ALL_TABLES_STDOUT}
"""
When I run `wp --require=table_names.php get_table_names '*_posts'`
Then STDOUT should be:
"""
wp_posts
"""
When I run `wp --require=table_names.php get_table_names '*_posts' --network`
Then STDOUT should be:
"""
wp_2_posts
wp_posts
"""
When I run `wp --require=table_names.php get_table_names 'wp_post*'`
Then STDOUT should be:
"""
wp_postmeta
wp_posts
"""
When I run `wp --require=table_names.php get_table_names 'wp_post*' --network`
Then STDOUT should be:
"""
wp_postmeta
wp_posts
"""
When I run `wp --require=table_names.php get_table_names 'wp*osts'`
Then STDOUT should be:
"""
wp_posts
"""
When I run `wp --require=table_names.php get_table_names 'wp*osts' --network`
Then STDOUT should be:
"""
wp_2_posts
wp_posts
"""
When I run `wp --require=table_names.php get_table_names '*_posts' --scope=blog`
Then STDOUT should be:
"""
wp_posts
"""
When I run `wp --require=table_names.php get_table_names '*_posts' --scope=blog --network`
Then STDOUT should be:
"""
wp_2_posts
wp_posts
"""
When I try `wp --require=table_names.php get_table_names '*_posts' --scope=global`
Then STDERR should be:
"""
Error: Couldn't find any tables matching: *_posts
"""
And STDOUT should be empty
# Note: BC change 1.5.0, network does not override scope.
When I try `wp --require=table_names.php get_table_names '*_posts' --scope=global --network`
Then STDERR should be:
"""
Error: Couldn't find any tables matching: *_posts
"""
And STDOUT should be empty
When I run `wp --require=table_names.php get_table_names '*_posts' --all-tables-with-prefix`
Then STDOUT should be:
"""
wp_2_posts
wp_2_xx_posts
wp_posts
wp_xx_posts
"""
When I run `wp --require=table_names.php get_table_names 'wp_post*' --all-tables-with-prefix`
Then STDOUT should be:
"""
wp_postmeta
wp_posts
wp_posts_xx
"""
When I run `wp --require=table_names.php get_table_names 'wp*osts' --all-tables-with-prefix`
Then STDOUT should be:
"""
wp_2_posts
wp_2_xx_posts
wp_posts
wp_xx_posts
"""
When I run `wp --require=table_names.php get_table_names '*_posts' --all-tables`
Then STDOUT should be:
"""
wp_2_posts
wp_2_xx_posts
wp_posts
wp_xx_posts
xx_wp_2_posts
xx_wp_posts
"""
When I run `wp --require=table_names.php get_table_names '*wp_posts' --all-tables`
Then STDOUT should be:
"""
wp_posts
xx_wp_posts
"""
When I run `wp --require=table_names.php get_table_names 'wp_post*' --all-tables`
Then STDOUT should be:
"""
wp_postmeta
wp_posts
wp_posts_xx
"""
When I run `wp --require=table_names.php get_table_names 'wp*osts' --all-tables`
Then STDOUT should be:
"""
wp_2_posts
wp_2_xx_posts
wp_posts
wp_xx_posts
"""
When I try `wp --require=table_names.php get_table_names non_existent_table`
Then STDERR should be:
"""
Error: Couldn't find any tables matching: non_existent_table
"""
And STDOUT should be empty
When I run `wp --require=table_names.php get_table_names wp_posts non_existent_table`
Then STDOUT should be:
"""
wp_posts
"""
When I run `wp --require=table_names.php get_table_names wp_posts non_existent_table 'wp_?ption*'`
Then STDOUT should be:
"""
wp_options
wp_posts
"""
When I run `wp --require=table_names.php get_table_names wp_posts non_existent_table 'wp_*ption?'`
Then STDOUT should be:
"""
wp_options
wp_posts
"""
When I run `wp --require=table_names.php get_table_names wp_posts non_existent_table 'wp_*ption?' --network`
Then STDOUT should be:
"""
wp_2_options
wp_options
wp_posts
"""
@less-than-wp-6.1
Scenario: Get WP table names for multisite install (site_categories only)
Given a WP multisite install
And I run `wp db query "CREATE TABLE xx_wp_posts ( id int );"`
And I run `wp db query "CREATE TABLE xx_wp_2_posts ( id int );"`
And I run `wp db query "CREATE TABLE wp_xx_posts ( id int );"`
And I run `wp db query "CREATE TABLE wp_2_xx_posts ( id int );"`
And I run `wp db query "CREATE TABLE wp_posts_xx ( id int );"`
And I run `wp db query "CREATE TABLE wp_2_posts_xx ( id int );"`
And I run `wp db query "CREATE TABLE wp_categories ( id int );"`
And I run `wp db query "CREATE TABLE wp_sitecategories ( id int );"`
And a table_names.php file:
"""
<?php
/**
* Test WP get table names.
*
* ## OPTIONS
*
* [<table>...]
* : List tables based on wildcard search, e.g. 'wp_*_options' or 'wp_post?'.
*
* [--scope=<scope>]
* : Can be all, global, ms_global, blog, or old tables. Defaults to all.
*
* [--network]
* : List all the tables in a multisite installation. Overrides --scope=<scope>.
*
* [--all-tables-with-prefix]
* : List all tables that match the table prefix even if not registered on $wpdb. Overrides --network.
*
* [--all-tables]
* : List all tables in the database, regardless of the prefix, and even if not registered on $wpdb. Overrides --all-tables-with-prefix.
*/
function test_wp_get_table_names( $args, $assoc_args ) {
if ( $tables = WP_CLI\Utils\wp_get_table_names( $args, $assoc_args ) ) {
echo implode( PHP_EOL, $tables ) . PHP_EOL;
}
}
WP_CLI::add_command( 'get_table_names', 'test_wp_get_table_names' );
"""
And an enable_sitecategories.php file:
"""
<?php
WP_CLI::add_hook( 'after_wp_load', function () {
add_filter( 'global_terms_enabled', '__return_true' );
} );
"""
When I run `wp --require=table_names.php --require=enable_sitecategories.php get_table_names`
# Leave out wp_blog_versions as it was never used and is removed with WP 5.3+.
# Leave out wp_blogmeta for old WP compat.
Then STDOUT should contain:
"""
wp_blogs
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_registration_log
wp_signups
wp_site
wp_sitecategories
wp_sitemeta
wp_term_relationships
wp_term_taxonomy
"""
# Leave out wp_termmeta for old WP compat.
And STDOUT should contain:
"""
wp_terms
wp_usermeta
wp_users
"""