Feature: Create shortcuts to specific WordPress installs
Scenario: Alias for a path to a specific WP installation
Given a WP installation in 'foo'
And I run `mkdir bar`
And a wp-cli.yml file:
"""
@foo:
path: foo
"""
When I try `wp core is-installed`
Then STDERR should contain:
"""
Error: This does not seem to be a WordPress installation.
"""
And the return code should be 1
When I run `wp @foo core is-installed`
Then the return code should be 0
When I run `cd bar; wp @foo core is-installed`
Then the return code should be 0
Scenario: Error when invalid alias provided
Given an empty directory
When I try `wp @test option get home`
Then STDERR should be:
"""
Error: Alias '@test' not found.
"""
Scenario: Provide suggestion when invalid alias is provided
Given an empty directory
And a wp-cli.yml file:
"""
@test2:
path: foo
"""
When I try `wp @test option get home`
Then STDERR should be:
"""
Error: Alias '@test' not found.
Did you mean '@test2'?
"""
Scenario: Treat global params as local when included in alias
Given a WP installation in 'foo'
And a wp-cli.yml file:
"""
@foo:
path: foo
"""
When I run `wp @foo option get home`
Then STDOUT should be:
"""
https://example.com
"""
When I try `wp @foo option get home --path=foo`
Then STDERR should contain:
"""
Parameter errors:
"""
And STDERR should contain:
"""
unknown --path parameter
"""
When I run `wp @foo eval 'echo get_current_user_id();' --user=admin`
Then STDOUT should be:
"""
1
"""
Given a wp-cli.yml file:
"""
@foo:
path: foo
user: admin
"""
When I run `wp @foo eval 'echo get_current_user_id();'`
Then STDOUT should be:
"""
1
"""
When I try `wp @foo eval 'echo get_current_user_id();' --user=admin`
Then STDERR should contain:
"""
Parameter errors:
"""
And STDERR should contain:
"""
unknown --user parameter
"""
Scenario: Support global params specific to the WordPress install, not WP-CLI generally
Given a WP installation in 'foo'
And a wp-cli.yml file:
"""
@foo:
path: foo
debug: true
"""
When I run `wp @foo option get home`
Then STDOUT should be:
"""
https://example.com
"""
And STDERR should be empty
Scenario: List available aliases
Given an empty directory
And a wp-cli.yml file:
"""
@foo:
path: foo
"""
When I run `wp eval --skip-wordpress 'echo realpath( getenv( "RUN_DIR" ) );'`
Then save STDOUT as {TEST_DIR}
When I run `wp cli alias list`
Then STDOUT should be YAML containing:
"""
@all: Run command against every registered alias.
@foo:
path: {TEST_DIR}/foo
"""
When I run `wp cli aliases`
Then STDOUT should be YAML containing:
"""
@all: Run command against every registered alias.
@foo:
path: {TEST_DIR}/foo
"""
When I run `wp cli alias list --format=json`
Then STDOUT should be JSON containing:
"""
{"@all":"Run command against every registered alias.","@foo":{"path":"{TEST_DIR}/foo"}}
"""
When I run `wp cli aliases --format=json`
Then STDOUT should be JSON containing:
"""
{"@all":"Run command against every registered alias.","@foo":{"path":"{TEST_DIR}/foo"}}
"""
Scenario: Get alias information
Given a WP installation in 'foo'
And a wp-cli.yml file:
"""
@foo:
ssh: user@host:/path/to/wordpress
"""
When I run `wp cli alias get @foo`
Then STDOUT should be:
"""
ssh: user@host:/path/to/wordpress
"""
When I try `wp cli alias get @someotherfoo`
Then STDERR should be:
"""
Error: No alias found with key '@someotherfoo'.
"""
Scenario: Adds proxyjump to ssh command
Given a WP installation in 'foo'
And a wp-cli.yml file:
"""
@foo:
ssh: user@host:/path/to/wordpress
proxyjump: proxyhost
"""
When I try `wp @foo --debug --version`
Then STDERR should contain:
"""
Running SSH command: ssh -J 'proxyhost' -T -vvv
"""
Scenario: Adds key to ssh command
Given a WP installation in 'foo'
And a wp-cli.yml file:
"""
@foo:
ssh: user@host:/path/to/wordpress
key: identityfile.key
"""
When I try `wp @foo --debug --version`
Then STDERR should contain:
"""
Running SSH command: ssh -i 'identityfile.key' -T -vvv
"""
Scenario: Add an alias
Given a WP installation in 'foo'
And a wp-cli.yml file:
"""
@foo:
ssh:
[email protected]:2222
"""
When I run `wp cli alias add @dev --set-user=wpcli --set-path=/path/to/wordpress --config=project`
Then STDOUT should be:
"""
Success: Added '@dev' alias.
"""
When I run `wp cli alias list`
Then STDOUT should be YAML containing:
"""
@all: Run command against every registered alias.
@foo:
ssh:
[email protected]:2222
@dev:
user: wpcli
path: /path/to/wordpress
"""
When I try `wp cli alias add @something --config=project`
Then STDERR should be:
"""
Error: No valid arguments passed.
"""
When I try `wp cli alias add @something --set-user= --config=project`
Then STDERR should be:
"""
Error: No value passed to arguments.
"""
When I try `wp cli alias add @something --set-path=/new/path --grouping=foo,dev --config=project`
Then STDERR should be:
"""
Error: --grouping argument works alone. Found invalid arg(s) 'set-path'.
"""
Scenario: Delete an alias
Given a WP installation in 'foo'
And a wp-cli.yml file:
"""
@foo:
ssh: foo@bar:/path/to/wordpress
@dev:
ssh: user@hostname:/path/to/wordpress
"""
When I run `wp cli alias delete @dev --config=project`
Then STDOUT should be:
"""
Success: Deleted '@dev' alias.
"""
When I run `wp cli alias list`
Then STDOUT should be YAML containing:
"""
@all: Run command against every registered alias.
@foo:
ssh: foo@bar:/path/to/wordpress
"""
When I try `wp cli alias delete @dev`
Then STDERR should be:
"""
Error: No alias found with key '@dev'.
"""
When I try `wp cli alias update @foo`
Then STDERR should be:
"""
Error: No valid arguments passed.
"""
Scenario: Update an alias
Given a WP installation in 'foo'
And a wp-cli.yml file:
"""
@foo:
user: wpcli
@foopath:
path: /home/wpcli/sites/wpcli
@foogroup:
- @foo
- @foopath
"""
When I run `wp cli alias update @foo --set-user=newuser --config=project`
Then STDOUT should be:
"""
Success: Updated '@foo' alias.
"""
When I run `wp cli alias list`
Then STDOUT should be YAML containing:
"""
@all: Run command against every registered alias.
@foo:
user: newuser
@foopath:
path: /home/wpcli/sites/wpcli
@foogroup:
- @foo
- @foopath
"""
When I try `wp cli alias update @otherfoo --set-ssh=foo@host --set-path=/some/path`
Then STDERR should be:
"""
Error: No alias found with key '@otherfoo'.
"""
When I try `wp cli alias update @foogroup --set-ssh=foo@host`
Then STDERR should be:
"""
Error: Trying to update group alias with invalid arguments.
"""
When I try `wp cli alias update @foo --grouping=foo@host --set-user=wpcli`
Then STDERR should be:
"""
Error: --grouping argument works alone. Found invalid arg(s) 'set-user'.
"""
When I try `wp cli alias update @foo --grouping=foo@host`
Then STDERR should be:
"""
Error: Trying to update simple alias with invalid --grouping argument.
"""
When I try `wp cli alias update @foo --set-path=/new/path`
Then STDOUT should be:
"""
Success: Updated '@foo' alias.
"""
When I run `wp cli alias list`
Then STDOUT should be YAML containing:
"""
@all: Run command against every registered alias.
@foo:
user: newuser
path: /new/path
@foopath:
path: /home/wpcli/sites/wpcli
@foogroup:
- @foo
- @foopath
"""
Scenario: Defining a project alias completely overrides a global alias
Given a WP installation in 'foo'
And a config.yml file:
"""
@foo:
path: foo
"""
When I run `WP_CLI_CONFIG_PATH=config.yml wp @foo option get home`
Then STDOUT should be:
"""
https://example.com
"""
Given a wp-cli.yml file:
"""
@foo:
path: none-existent-install
"""
When I try `WP_CLI_CONFIG_PATH=config.yml wp @foo option get home`
Then STDERR should contain:
"""
Error: This does not seem to be a WordPress installation.
"""
Scenario: Use a group of aliases to run a command against multiple installs
Given a WP installation in 'foo'
And a WP installation in 'bar'
And a wp-cli.yml file:
"""
@both:
- @foo
- @bar
@invalid:
- @foo
- @baz
@foo:
path: foo
@bar:
path: bar
"""
When I run `wp @foo option update home 'http://apple.com'`
And I run `wp @foo option get home`
Then STDOUT should contain:
"""
http://apple.com
"""
When I run `wp @bar option update home 'http://google.com'`
And I run `wp @bar option get home`
Then STDOUT should contain:
"""
http://google.com
"""
When I try `wp @invalid option get home`
Then STDERR should be:
"""
Error: Group '@invalid' contains one or more invalid aliases: @baz
"""
When I run `wp @both option get home`
Then STDOUT should be:
"""
@foo
http://apple.com
@bar
http://google.com
"""
When I run `wp @both option get home --quiet`
Then STDOUT should be:
"""
http://apple.com
http://google.com
"""
Scenario: Register '@all' alias for running on one or more aliases
Given a WP installation in 'foo'
And a WP installation in 'bar'
And a wp-cli.yml file:
"""
@foo:
path: foo
@bar:
path: bar
"""
When I run `wp @foo option update home 'http://apple.com'`
And I run `wp @foo option get home`
Then STDOUT should contain:
"""
http://apple.com
"""
When I run `wp @bar option update home 'http://google.com'`
And I run `wp @bar option get home`
Then STDOUT should contain:
"""
http://google.com
"""
When I run `wp @all option get home`
Then STDOUT should be:
"""
@foo
http://apple.com
@bar
http://google.com
"""
When I run `wp @all option get home --quiet`
Then STDOUT should be:
"""
http://apple.com
http://google.com
"""
Scenario: Don't register '@all' when its already set
Given a WP installation in 'foo'
And a WP installation in 'bar'
And a wp-cli.yml file:
"""
@all:
path: foo
@bar:
path: bar
"""
When I run `wp @all option get home | wc -l | tr -d ' '`
Then STDOUT should be:
"""
1
"""
Scenario: Error when '@all' is used without aliases defined
Given an empty directory
When I try `wp @all option get home`
Then STDERR should be:
"""
Error: Cannot use '@all' when no aliases are registered.
"""
Scenario: Alias for a subsite of a multisite install
Given a WP multisite subdomain installation
And a wp-cli.yml file:
"""
url: https://example.com
@subsite:
url: https://subsite.example.com
"""
When I run `wp site create --slug=subsite`
Then STDOUT should not be empty
When I run `wp option get siteurl`
Then STDOUT should be:
"""
https://example.com
"""
# TODO: The HTTPS default is currently not forwarded to subsite creation.
When I run `wp @subsite option get siteurl`
Then STDOUT should be:
"""
http://subsite.example.com
"""
When I try `wp @subsite option get siteurl --url=subsite.example.com`
Then STDERR should be:
"""
Error: Parameter errors:
unknown --url parameter
"""
Scenario: Global parameters should be passed to grouped aliases
Given a WP installation in 'foo'
And a WP installation in 'bar'
And a wp-cli.yml file:
"""
@foo:
path: foo
@bar:
path: bar
@foobar:
- @foo
- @bar
"""
When I try `wp core is-installed --allow-root --debug`
Then STDERR should contain:
"""
Error: This does not seem to be a WordPress installation.
"""
And STDERR should contain:
"""
core is-installed --allow-root --debug
"""
And the return code should be 1
When I try `wp @foo core is-installed --allow-root --debug`
Then the return code should be 0
And STDERR should contain:
"""
@foo core is-installed --allow-root --debug
"""
When I try `cd bar; wp @bar core is-installed --allow-root --debug`
Then the return code should be 0
And STDERR should contain:
"""
@bar core is-installed --allow-root --debug
"""
When I try `wp @foobar core is-installed --allow-root --debug`
Then the return code should be 0
And STDERR should contain:
"""
@foobar core is-installed --allow-root --debug
"""
And STDERR should contain:
"""
@foo core is-installed --allow-root --debug
"""
And STDERR should contain:
"""
@bar core is-installed --allow-root --debug
"""
Scenario Outline: Check that proc_open() and proc_close() aren't disabled for grouped aliases
Given a WP installation in 'foo'
And a WP installation in 'bar'
And a wp-cli.yml file:
"""
@foo:
path: foo
@bar:
path: bar
@foobar:
- @foo
- @bar
"""
When I try `{INVOKE_WP_CLI_WITH_PHP_ARGS--ddisable_functions=<func>} @foobar core is-installed`
Then STDERR should contain:
"""
Error: Cannot do 'group alias': The PHP functions `proc_open()` and/or `proc_close()` are disabled
"""
And the return code should be 1
Examples:
| func |
| proc_open |
| proc_close |
Scenario: An alias is a group of aliases
Given a WP install
And a wp-cli.yml file:
"""
@foo:
path: foo
@bar:
path: bar
@both:
- @foo
- @bar
"""
When I try `wp cli alias is-group @both`
Then the return code should be 0
Scenario: An alias is not a group of aliases
Given a WP install
And a wp-cli.yml file:
"""
@foo:
path: foo
"""
When I try `wp cli alias is-group @foo`
Then the return code should be 1
Scenario: Automatically add "@" prefix to an alias
Given a WP install
And a wp-cli.yml file:
"""
@foo:
path: foo
"""
When I run `wp cli alias add hello --set-path=/path/to/wordpress`
Then STDOUT should be:
"""
Success: Added '@hello' alias.
"""
When I run `wp eval --skip-wordpress 'echo realpath( getenv( "RUN_DIR" ) );'`
Then save STDOUT as {TEST_DIR}
When I run `wp cli alias list`
Then STDOUT should be YAML containing:
"""
@all: Run command against every registered alias.
@hello:
path: /path/to/wordpress
@foo:
path: {TEST_DIR}/foo
"""