Edit file File name : flags.feature Content :Feature: Global flags @require-wp-5.5 Scenario: Setting the URL Given a WP installation When I run `wp --url=localhost:8001 eval 'echo json_encode( $_SERVER );'` Then STDOUT should be JSON containing: """ { "HTTP_HOST": "localhost:8001", "SERVER_NAME": "localhost", "SERVER_PORT": 8001 } """ @less-than-wp-5.5 Scenario: Setting the URL Given a WP installation When I run `wp --url=localhost:8001 eval 'echo json_encode( $_SERVER );'` Then STDOUT should be JSON containing: """ { "HTTP_HOST": "localhost:8001", "SERVER_NAME": "localhost", "SERVER_PORT": "8001" } """ Scenario: Setting the URL on multisite Given a WP multisite installation And I run `wp site create --slug=foo` When I run `wp --url=example.com/foo option get home` Then STDOUT should contain: """ example.com/foo """ @require-wp-3.9 Scenario: Invalid URL Given a WP multisite installation When I try `wp post list --url=invalid.example.com` Then STDERR should be: """ Error: Site 'invalid.example.com' not found. Verify `--url=<url>` matches an existing site. """ Scenario: Quiet run Given a WP installation When I try `wp non-existing-command --quiet` Then the return code should be 1 And STDERR should be: """ Error: 'non-existing-command' is not a registered wp command. See 'wp help' for available commands. """ @less-than-php-8 Scenario: Debug run Given a WP installation When I try `wp eval 'echo CONST_WITHOUT_QUOTES;'` Then STDOUT should be: """ CONST_WITHOUT_QUOTES """ And STDERR should contain: """ Use of undefined constant CONST_WITHOUT_QUOTES """ And the return code should be 0 When I try `wp eval 'echo CONST_WITHOUT_QUOTES;' --debug` Then the return code should be 0 And STDOUT should be: """ CONST_WITHOUT_QUOTES """ And STDERR should contain: """ Use of undefined constant CONST_WITHOUT_QUOTES """ Scenario: Setting the WP user Given a WP installation When I run `wp eval 'var_export( is_user_logged_in() );'` Then STDOUT should be: """ false """ And STDERR should be empty When I run `wp --user=admin eval 'echo wp_get_current_user()->user_login;'` Then STDOUT should be: """ admin """ And STDERR should be empty When I run `wp --user=admin@example.com eval 'echo wp_get_current_user()->user_login;'` Then STDOUT should be: """ admin """ And STDERR should be empty When I try `wp --user=non-existing-user eval 'echo wp_get_current_user()->user_login;'` Then the return code should be 1 And STDERR should be: """ Error: Invalid user ID, email or login: 'non-existing-user' """ Scenario: Warn when provided user is ambiguous Given a WP installation When I run `wp --user=1 eval 'echo wp_get_current_user()->user_email;'` Then STDOUT should be: """ admin@example.com """ And STDERR should be empty When I run `wp user create 1 user1@example.com` Then STDOUT should contain: """ Success: """ When I try `wp --user=1 eval 'echo wp_get_current_user()->user_email;'` Then STDOUT should be: """ admin@example.com """ And STDERR should be: """ Warning: Ambiguous user match detected (both ID and user_login exist for identifier '1'). WP-CLI will default to the ID, but you can force user_login instead with WP_CLI_FORCE_USER_LOGIN=1. """ When I run `WP_CLI_FORCE_USER_LOGIN=1 wp --user=1 eval 'echo wp_get_current_user()->user_email;'` Then STDOUT should be: """ user1@example.com """ And STDERR should be empty When I run `wp --user=user1@example.com eval 'echo wp_get_current_user()->user_email;'` Then STDOUT should be: """ user1@example.com """ And STDERR should be empty When I try `WP_CLI_FORCE_USER_LOGIN=1 wp --user=user1@example.com eval 'echo wp_get_current_user()->user_email;'` Then STDERR should be: """ Error: Invalid user login: 'user1@example.com' """ Scenario: Using a custom logger Given an empty directory And a custom-logger.php file: """ <?php class Dummy_Logger { function __call( $method, $args ) { echo "log: called '$method' method"; } } WP_CLI::set_logger( new Dummy_Logger ); """ When I try `wp --require=custom-logger.php is-installed` Then STDOUT should contain: """ log: called 'error' method """ And STDERR should be empty And the return code should be 1 Scenario: Using --require Given an empty directory And a custom-cmd.php file: """ <?php /** * @when before_wp_load */ class Test_Command extends WP_CLI_Command { function req( $args, $assoc_args ) { WP_CLI::line( $args[0] ); } } WP_CLI::add_command( 'test', 'Test_Command' ); """ And a foo.php file: """ <?php echo basename(__FILE__) . "\n"; """ And a bar.php file: """ <?php echo basename(__FILE__) . "\n"; """ And a wp-cli.yml file: """ require: - foo.php - bar.php """ And a wp-cli2.yml file: """ require: custom-cmd.php """ When I run `wp --require=custom-cmd.php test req 'This is a custom command.'` Then STDOUT should be: """ foo.php bar.php This is a custom command. """ When I run `WP_CLI_CONFIG_PATH=wp-cli2.yml wp test req 'This is a custom command.'` Then STDOUT should contain: """ This is a custom command. """ Scenario: Using --require with globs Given an empty directory And a foober/foo.php file: """ <?php echo basename(__FILE__) . "\n"; """ And a foober/bar.php file: """ <?php echo basename(__FILE__) . "\n"; """ And a doobie/doo.php file: """ <?php echo basename(__FILE__) . "\n"; """ And a wp-cli.yml file: """ require: foober/*.php """ When I run `wp` Then STDOUT should contain: """ bar.php foo.php """ When I run `wp --require=doobie/*.php` Then STDOUT should contain: """ doo.php """ Scenario: Enabling/disabling color Given a WP installation When I try `wp --no-color non-existent-command` Then STDERR should be: """ Error: 'non-existent-command' is not a registered wp command. See 'wp help' for available commands. """ When I try `wp --color non-existent-command` Then STDERR should strictly contain: """ [31;1mError: """ Scenario: Use `WP_CLI_STRICT_ARGS_MODE` to distinguish between global and local args Given an empty directory And a cmd.php file: """ <?php /** * @when before_wp_load * * [--url=<url>] * : URL passed to the callback. */ $cmd_test = function( $args, $assoc_args ) { $url = WP_CLI::get_runner()->config['url'] ? ' ' . WP_CLI::get_runner()->config['url'] : ''; WP_CLI::log( 'global:' . $url ); $url = isset( $assoc_args['url'] ) ? ' ' . $assoc_args['url'] : ''; WP_CLI::log( 'local:' . $url ); }; WP_CLI::add_command( 'cmd-test', $cmd_test ); """ And a wp-cli.yml file: """ require: - cmd.php """ When I run `wp cmd-test --url=foo.dev` Then STDOUT should be: """ global: foo.dev local: """ When I run `WP_CLI_STRICT_ARGS_MODE=1 wp cmd-test --url=foo.dev` Then STDOUT should be: """ global: local: foo.dev """ When I run `WP_CLI_STRICT_ARGS_MODE=1 wp --url=bar.dev cmd-test --url=foo.dev` Then STDOUT should be: """ global: bar.dev local: foo.dev """ Scenario: Using --http=<url> requires wp-cli/restful Given an empty directory When I try `wp --http=foo.dev` Then STDERR should be: """ Error: RESTful WP-CLI needs to be installed. Try 'wp package install wp-cli/restful'. """ Scenario: Strict args mode should be passed on to ssh When I try `WP_CLI_STRICT_ARGS_MODE=1 wp --debug --ssh=/ --version` Then STDERR should contain: """ Running SSH command: ssh -T -vvv '' 'WP_CLI_STRICT_ARGS_MODE=1 wp """ Scenario: SSH flag should support changing directories When I try `wp --debug --ssh=wordpress:/my/path --version` Then STDERR should contain: """ Running SSH command: ssh -T -vvv 'wordpress' 'cd '\''/my/path'\''; wp """ Scenario: SSH flag should support Docker When I try `wp --debug --ssh=docker:user@wordpress --version` Then STDERR should contain: """ Running SSH command: docker exec --user 'user' 'wordpress' sh -c """ Scenario: Customize config-spec with WP_CLI_CONFIG_SPEC_FILTER_CALLBACK Given a WP installation And a wp-cli-early-require.php file: """ <?php function wp_cli_remove_user_arg( $spec ) { unset( $spec['user'] ); return $spec; } define( 'WP_CLI_CONFIG_SPEC_FILTER_CALLBACK', 'wp_cli_remove_user_arg' ); """ When I run `WP_CLI_EARLY_REQUIRE=wp-cli-early-require.php wp help` Then STDOUT should not contain: """ --user=<id|login|email> """ When I run `wp help` Then STDOUT should contain: """ --user=<id|login|email> """ Save